Küsimus:
Kuidas saada kõigile oma Arduino tahvlitele ainulaadne ID?
jfpoilpret
2014-02-18 04:27:43 UTC
view on stackexchange narkive permalink

Kui olete visandi ühele oma Arduino tahvlile üles laadinud, on raske täpselt teada saada, milline lähtekood selle visandini viis.

Tõepoolest, võite oma eskiisi lähtekoodi muuta oma PC ilma binaarses vormingus oma plaadile värskendamata.

Mul oli mõte luua selline " visandihoidla ", mis täidetakse kohe, kui laadin üles visand ühele minu tahvlile. Siis saaksin hiljem hankida mis tahes mu tahvlil töötava visandi lähtekoodi.

Sellise hoidla jaoks oleks mul kõigepealt vaja " register " see võimaldaks mul teada saada, millise tahvliga eskiisi lähtekood on lingitud.

Tavaliselt peaks selline register olema unikaalne iga arduino tahvli jaoks.

Siit ka minu küsimus: kuidas saada Arduino tahvlile unikaalne ID?

Muuda:

See on minu praegune tahvlite loend (miniumum loend, mida toetab üks ainulaadne ID-lähenemine):

  • UNO R3
  • Mega 2560
  • Yun
  • Arduino robot (see peab olema 2 Leonardo ekvivalentset tahvlit)

Tulevikus võin ehitada ka oma tahvlid (Uno samaväärsed, kuid ilma kondita, ilma FTDIta), seega kui neid toetab ka lähenemine ole parem.

@jfpoilpret ... nägin just seda postitust saidi tutvumise ajal ... kas leidsite lahenduse või parimal juhul selle rakendamise stsenaariumi?
Seitse vastused:
#1
+15
Cybergibbons
2014-02-18 14:27:20 UTC
view on stackexchange narkive permalink

Unikaalse ID saamiseks võite siin kasutada mitmeid tehnikaid.

  1. FTDI kiipidele on programmeeritud kordumatu seerianumber. Sellele pääseb minu teada ainult ühenduse arvutipoolelt.
  2. Mõnel USB sisseehitatud kiibil (nt ATmega8U2 / 16U2 / 32U2) on allkirjaandmetes unikaalne ID. , mida tavaliselt kasutatakse USB jaoks. Sellele saab hõlpsasti juurde pääseda ühenduse mõlemalt küljelt. See hõlmab ATmega16U2, mida kasutatakse USB-> jadasillana Arduino Uno R3.
  3. Mõnel kiibil, millel on sisseehitatud USB, kuid millel pole ainulaadset ID-d allkirjas, on USB-sse programmeeritud unikaalne ID. virn (nt LUFA), mida kasutatakse alglaaduri või DFU (seadme püsivara uuendamine) jaoks.
  4. Seal on palju kiipe, millel on ülemaailmselt ainulaadsed seerianumbrid, nt mikrokiip 11AA02E48, kõik Dallase 1-traadilised andurid (sealhulgas tavaline DS18B20 temperatuuriandur) ja muud jadased EEPROMS-id. Olen neid kasutanud tootmisriistvaras, millel peab olema ainulaadne MAC-aadress.
  5. Saate modifitseerida standardset Optiboot bootloaderit (või seda, millist paadilaadijat kasutate), et see saaks unikaalse ID-ga hoida ja sellele vastata.

Nendega on probleem see, et pole valikut peale 5, mis töötab kõigil tahvlitel.

Kui teie lahendus saab olema üldine, sooviksin soovitan, et USB-ID kasutamine pole viis, kuidas edasi minna. Mul on ~ 30 Arduino-põhist tahvlit ja ainult 5 neist on sisseehitatud USB-riistvara. Kõik ülejäänud vajavad programmeerimiseks välist FTDI-kaablit. See tähendab, et neil kõigil oleks sama ID.

Mida teete ** 30 ** tahvlitega?
Peamiselt traadita andurite võrkude jaoks. Mul on ainult mõned tõelised Arduinod - Duemilanova, Seeeduino Mega ja Uno. Kõik ülejäänud on Teensy, Jeenodes, WiNodes, Nanodes ja RFus.
+1 võimalike valikute põhjaliku loendi eest, aitäh! Ma pigem väldin 4. kuna ma ei soovi kõigile oma tahvlitele konkreetset riistvara lisada. 5. näeb välja ohtlik (sama modifitseeritud alglaadurit on lihtne üles laadida kahele erinevale plaadile) ja tülikas (iga laua jaoks on vaja üleslaadimiseks erinevat alglaadurite lähtekoodi). Siiani tunduvad USB ID ja FTDI üsna head lahendused, kuid kas need töötavad kogu minu praeguse tahvliga?
Kas Arduinol on globaalselt ainulaadsed seerianumbrid? Kuidas seda lugeda?
#2
+13
sachleen
2014-02-18 05:37:06 UTC
view on stackexchange narkive permalink

Kiibil pole minu teada mingisugust ainulaadset ID-d ... aga võite selle programmeerida oma tahvlite EEPROM-i.

EEPROM-i dokumentatsioon

Kirjutate kindlale aadressile ja siis saavad tulevased visandid lugeda ID-d ja teha sellega kõike.


Võite näha ka unqiue ID-d või aadress vastuvõtva poolel. Ma ei tea piisavalt USB-seadmete kohta, et teile rohkem teada anda, kuid USB-sidet haldaval kiibil võib olla ainulaadne ID, mida saaksite kasutada. Teie Arduino kood ei saaks seda siiski kasutada.

Teise võimalusena kasutage lihtsalt sildiloojat ja pange silt igale tahvlile.

Mis puutub küsimuse ainulaadsesse aspekti, siis [GUID] (http://en.wikipedia.org/wiki/Globally_unique_identifier) ​​suudaks selle lahendada (väikese vea piires).
Olin algselt mõelnud selleks kasutada EEPROM-i; kuid see nõuab iga tahvli hankimisel lisatööd: looge uus unikaalne ID ja kirjutage see siis EEPROM-i. Samuti võib olla vastuolu minu visandite poolt kasutatavate teekidega (mis võivad kirjutada samale EEPROMi aadressile). Lõpuks peaksin oma kontekstis lugema ID-d oma arvutist, mis on keerulisem. USB unikaalne ID tundub mulle huvitavam.
Minu vastuse kohaselt tähendab see, et kui soovite, et see oleks üldine lahendus (enamiku inimeste jaoks ja lai valik plaate), siis USB-ID-le toetumine tähendab, et inimesed, kes kasutavad FTDI-kaableid ilma USB-> jadasillata plaatidel teie süsteemi kasutada.
#3
+8
Federico Fissore
2014-02-18 05:45:14 UTC
view on stackexchange narkive permalink

Mõni tahvel avaldab arvutiga ühendamisel oma seerianumbri. Minu Arduino Uno R3 ütleb

  [16818.451423] usb 3-2: SerialNumber: 85235353137351E02242  

Kuigi ma pole kindel, kui ainulaadne see on.

Kas kõigil Arduino tahvlitel on selline arv? Oleks tore, kui oleks nimekiri tahvlitest, millel on üks (või mitte).
Kaevandusi vaadates pole seda 32u4-põhistel, 328 ja SAM3X8E-del
#4
+4
jippie
2014-02-18 11:19:19 UTC
view on stackexchange narkive permalink

Minu teada on USB-kiipidel kõigil FTDI-kiipide puhul ainulaadne seerianumber. Linuxis saate selle abil hõlpsasti omistada ainulaadseid seadmete nimesid, kontrollige minu veebisaiti.

Peale selle on see, mida kirjeldate, üsna lihtne versioon versioonihaldus. Veenduge, et teie lähtefailidel oleks versiooninumbrid. Arduino tuvastamiseks saate selle teha setup (); .

Serial.Print (); nime ja koodi versiooni.
Jah, versioonihaldus on enam-vähem see, mida ma tahan saavutada; kuid versiooni seadmine koodis ja selle muutmine iga kord, kui kood muutub, pole valikuvõimalus (liiga lihtne unustada). Praegu kasutan oma visandite jaoks githubi, kuid sooviksin hõlpsasti teada saada, milline versioon sellest visandist praegu ühel tahvlil töötab.
Koostamise kuupäeva ja kellaaja `__DATE__` ja` __TIME__` jaoks on makro. Nii saate vähemalt selle teabe automaatselt oma .hex-faili @jfpoilpret salvestada
Hea punkt, ma ei olnud mõelnud nende versioonide makrode peale.
#5
+2
Nick Gammon
2015-09-03 11:25:11 UTC
view on stackexchange narkive permalink

Ma kahtlen, kas Uno USB-liides annab teile kordumatu seerianumbri. Mis tahes number oleks kiibile üles laaditud koodi osa, mis oleks mitme Unose seas sama.

Üks lähenemisviis on kiip DS2401 "Silicon Serial Number", mis kasutab ühe juhtmega liidest. Selleks oleks vaja ainult ühte vaba tihvti ja mõnda koodi (kood võib olla probleemiks).

Vähim pealetükkiv ja tõenäoliselt kõige usaldusväärsem meetod oleks lihtsalt koodi ja summa tagasi lugeda -Vaata seda. Täpselt seda ma teen oma kiibi allkirja detektoriga. Kuid see tuvastab ainult (praegu kirjutatuna) alglaaduri allkirja. Üsna väike muudatus ja see võib MD5 summeerida kogu visandikoodi.

Väljundi näide:

  Allkirja detektor. Kirjutas Nick Gammon. Allkiri = 1E 95 0F FusesLow = FF High = D6 Ext = FF Lock = CFProcessor = ATmega328P Välkmälu suurus = 32768 Kasutatav alglaadur: jahEEPROM on säilinud kustutamise kaudu: JahWatchdogi taimer on alati sisse lülitatud: Ei 0C 0D 0E 0F 7E10: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7E20: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7E30: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ... 7FB0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7FC0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7FD0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7FE0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 7FF0: 02 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F MD5 alglaadija summa = 56 72 75 2D 5D B5 0D BA 25 10 DF BE 87 D2 A1 27 

See MD5 summa (viimane rida) on eff eriti selle konkreetse alglaaduri allkiri. Tegelikult otsib uusim versioon neid tabelist:

  MD5 alglaadija summa = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F Bootloaderi nimi: optiboot_atmega328  kood> 

Nii et mida saaksite teha, on visandi üleslaadimisel genereerida kuuskantkoodi MD5 summa. Selleks on üsna lihtsaid viise. Seejärel võiksite teha lähtekoodil "git-märgendi" toimingu ja seejärel (kasutades mõnda automatiseeritud või käsitsi toimuvat protsessi) meeles pidada, et konkreetne MD5-kuusnurkkoodi summa tähistab visandikoodi konkreetsel hetkel. Mingisugune andmebaas nagu:

  Kiip: UnoMD5 summa: D8 8C 70 6D FE 1F DC 38 82 1E CE AE 23 B2 E6 E7 Sketch: My_robot_sketch_42.inoGit silt: version666  

Allika leidmiseks tahvlilt määrake koodi MD5 summa (lugedes selle tahvlilt tagasi) ja otsige see seejärel oma andmebaasist.

#6
+1
vlad b.
2015-09-03 12:20:07 UTC
view on stackexchange narkive permalink

Ühendasin ühe juhtmega tempeanduri, millel mõlemal on ainulaadne seade. Kõik sketšid lugesid käivitamisel olevaid faile ja kirjutasid aadressi igale jadaühendusele. Tegin kogu vajamineva riistvaraga kilbi, nii et kui mul oleks vaja Unost Mega-le üle minna, siis hoidis seade oma unikaalset.

#7
+1
gingo
2018-03-06 02:59:43 UTC
view on stackexchange narkive permalink

Kohandatud riistvara ID lugemiseks ja EEPROM-i kirjutamiseks on väike raamatukogu. Saate seda kasutada, et vältida Arduinole vale visandi sisestamist või seadme tuvastamiseks muudel eesmärkidel.

https://github.com/skoumalcz/arduino-id-guard

Kohustustest loobumine: olen teegi autor: -)



See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 3.0-litsentsi eest, mille all seda levitatakse.
Loading...