Kysymys:
Kuinka saan yksilöllisen tunnuksen kaikille Arduino-levyilleni?
jfpoilpret
2014-02-18 04:27:43 UTC
view on stackexchange narkive permalink

Kun olet ladannut luonnoksen johonkin Arduino-taulustasi, on vaikea tietää tarkalleen, mikä lähdekoodi johti kyseiseen luonnokseen.

Voit todellakin muuttaa luonnoksesi lähdekoodia PC päivittämättä sitä (binaarimuodossa) taululle.

Minulla oli ajatus perustaa eräänlainen " luonnosvarasto ", joka täytettäisiin heti, kun lataan luonnos yhdelle laudastani. Sitten voisin myöhemmin hakea luonnoksen lähdekoodin, joka käy missä tahansa pöydissäni.

Tällaista arkistoa varten tarvitsen ensin " hakemisto " sen avulla voisin tietää mihin levylle luonnoksen lähdekoodi on linkitetty.

Tyypillisesti tällaisen hakemiston tulisi olla ainutlaatuinen jokaiselle yksittäiselle arduino-levylle.

Tästä syystä kysymykseni: kuinka saan yksilöllisen tunnuksen Arduino-levylle?

Muokkaa:

Tämä on nykyinen luetteloni taulukoista (miniumum luettelo, jota tuetaan yhdellä yksilöllisellä tunnisteella):

  • UNO R3
  • Mega 2560
  • Yun
  • Arduino-robotti (sen on oltava 2 Leonardo-ekvivalenttia levyä)

Tulevaisuudessa voin myös rakentaa omia levyjäni (Uno-vastaavia mutta barebone, ilman FTDI: tä), joten jos myös lähestymistapa tukee näitä, ole parempi.

@jfpoilpret.
Seitsemän vastused:
#1
+15
Cybergibbons
2014-02-18 14:27:20 UTC
view on stackexchange narkive permalink

Tässä on useita tekniikoita, joita voit käyttää yksilöllisen tunnuksen hankkimiseksi.

  1. FTDI-siruille on ohjelmoitu yksilöllinen sarjanumero. Tähän pääsee vain yhteyden tietokonepuolelta.
  2. Joillakin siruilla, joissa on sisäänrakennettu USB (esim. ATmega8U2 / 16U2 / 32U2), on yksilöllinen tunnus allekirjoitustiedoissa. , jota käytetään yleensä USB-liitäntään. Pääsee helposti yhteyden molemmilta puolilta. Tämä sisältää ATmega16U2: n, jota käytetään USB-> sarjasillana Arduino Uno R3.
  3. Joissakin siruissa, joissa on sisäänrakennettu USB, mutta allekirjoituksessa ei ole yksilöllistä tunnusta, on edelleen ohjelmoitu yksilöllinen tunnus USB: hen. pino (esim. LUFA), jota käytetään käynnistyslataimeen tai DFU: han (Device Firmware Upgrade).
  4. Siellä on monia siruja, joilla on maailmanlaajuisesti ainutlaatuiset sarjatunnukset, esim. Microchip 11AA02E48, kaikki Dallasin 1-johdin-anturit (mukaan lukien yhteinen DS18B20 -lämpötila-anturi) ja muut sarjaliikennetiedot. Olen käyttänyt näitä tuotantolaitteistoissa, joilla on oltava yksilöllinen MAC-osoite.
  5. Voit muokata vakio-Optiboot-käynnistyslatainta (tai mitä tahansa veneen lataajaa), jotta se voi pitää sisällään ja vastata yksilöllisellä tunnuksella.

Näiden ongelmana on, että ei ole muuta vaihtoehtoa kuin 5, joka toimii kaikilla levyillä.

Jos ratkaisusi tulee olemaan yleinen, haluaisin ehdottaa, että USB-tunnuksen käyttö ei ole oikea tapa edetä. Minulla on ~ 30 Arduino-pohjaista levyä, ja vain viidellä niistä on sisäänrakennettu USB-laitteisto. Kaikki muut tarvitsevat ulkoisen FTDI-kaapelin ohjelmoitavaksi. Tämä tarkoittaa, että heillä kaikilla olisi sama henkilötodistus.

Mitä teet * ** ** ** -tauluilla?
Lähinnä langattomiin anturiverkkoihin. Minulla on vain muutama todellinen Arduinos - Duemilanova, Seeeduino Mega ja Uno. Kaikki muut ovat Teensy, Jeenodes, WiNodes, Nanodes ja RFus.
+1 saadaksesi kattavan luettelon mahdollisista vaihtoehdoista, kiitos! Vältäisin mieluummin 4. koska en halua lisätä tiettyä laitteistoa kaikkiin levyihini. 5. näyttää vaaralliselta (helppo ladata sama muokattu käynnistyslatauslaite kahdelle eri levylle) ja hankala (jokaiselle levylle lähetettäväksi tarvitaan eri käynnistyslataimen lähdekoodi). Toistaiseksi USB ID ja FTDI näyttävät melko hyviltä ratkaisuilta, mutta toimivatko ne koko nykyisen korttini kanssa?
Onko Arduinolla maailmanlaajuisesti ainutlaatuisia sarjatunnuksia? Kuinka lukea se?
#2
+13
sachleen
2014-02-18 05:37:06 UTC
view on stackexchange narkive permalink

Piirillä ei ole minkäänlaista yksilöllistä tunnusta, sikäli kuin tiedän .... mutta voit ohjelmoida sellaisen taulukkojesi EEPROM-tiedostoon.

EEPROM-dokumentointi

Kirjoitat tiettyyn osoitteeseen ja sitten tulevat luonnokset voivat lukea tunnuksen ja tehdä mitä tahansa sen kanssa.


Saatat myös nähdä unqiue-tunnuksen tai osoite isäntäpuolella. En tiedä tarpeeksi USB-laitteista kertoa sinulle enemmän, mutta sirulla, joka käsittelee USB-viestintää, voi olla yksilöllinen tunnus, jota voit käyttää. Arduino-koodisi ei kuitenkaan pystyisi käyttämään tätä.

Vaihtoehtoisesti voit käyttää vain tarrakirjoitinta ja laita tarra jokaiselle levylle.

Kysymyksen ainutlaatuisen puolen osalta [GUID] (http://en.wikipedia.org/wiki/Globally_unique_identifier) ​​voisi ratkaista sen (pienen virhemarginaalin sisällä).
Olin alun perin ajatellut käyttää EEPROMia siihen; mutta se vaatii lisätyötä jokaiselle levyn hankinnalle: luo uusi yksilöllinen tunnus ja kirjoita se sitten EEPROM: iin. Lisäksi luonnoksissani käytettyjen kirjastojen kanssa voi olla ristiriitoja (jotka voivat kirjoittaa samaan EEPROM-osoitteeseen). Lopuksi minun pitäisi lukea tunnus tietokoneeltani, mikä on vaikeampaa. USB: n yksilöllinen tunnus näyttää mielenkiintoisemmalta.
Vastaukseni mukaan, jos haluat tämän olevan yleinen ratkaisu (useimmille ihmisille ja laaja valikoima levyjä), USB-tunnukseen luottaminen tarkoittaa, että ihmiset, jotka käyttävät FTDI-kaapeleita levyillä, joissa ei ole USB-> Sarjasillaa, eivät olisi pystyy käyttämään järjestelmääsi.
#3
+8
Federico Fissore
2014-02-18 05:45:14 UTC
view on stackexchange narkive permalink

Jotkut levyt, kun ne on liitetty tietokoneeseen, julkaisevat sarjanumeronsa. Arduino Uno R3 -laitteeni sanoo

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

Vaikka en ole varma kuinka ainutlaatuinen se on.

Onko kaikilla Arduino-levyillä tällainen numero? Olisi mukavaa saada luettelo taulukoista, joilla on yksi (tai ei).
Kaivoksia tarkasteltaessa 32u4-pohjaisilla ei ole, 328- ja SAM3X8E-kaivoksilla sitä on
#4
+4
jippie
2014-02-18 11:19:19 UTC
view on stackexchange narkive permalink

Parhaan tietoni mukaan kaikilla USB-siruilla on ainutlaatuinen sarjanumero, ainakin FTDI-siruille. Linuxissa voit helposti määrittää yksilöllisiä laitenimiä siitä, tarkista verkkosivustoni.

Sen lisäksi, mitä kuvaat, on melkein yksinkertainen muoto versionhallinnasta. Varmista, että lähdetiedostoissasi on versionumerot. Voit tunnistaa Arduinosi tekemällä siitä Serial.Print (); -koodin nimen ja version -asennuksen (); aikana.

Kyllä versionhallinta on enemmän tai vähemmän mitä haluan saavuttaa; mutta version asettaminen koodiksi ja vaihtaminen aina koodin muuttuessa ei ole vaihtoehto (liian helppo unohtaa). Käytän tällä hetkellä githubia luonnoksissani, mutta haluaisin helposti selvittää, mikä versio luonnoksesta on tällä hetkellä käynnissä yhdellä levyllä.
Laatimispäivämäärälle ja -ajalle on makro "__DATE__" ja "__TIME__". Joten ainakin voit tallentaa nämä tiedot automaattisesti .hex-tiedostoon @jfpoilpret
Hyvä asia, en ollut ajatellut näitä makroja versiota varten.
#5
+2
Nick Gammon
2015-09-03 11:25:11 UTC
view on stackexchange narkive permalink

Epäilen, että Unon USB-liitäntä antaa sinulle yksilöllisen sarjanumeron. Mikä tahansa numero olisi osa sirulle ladattua koodia, joka olisi siten sama useiden Unosien keskuudessa.

Yksi lähestymistapa on DS2401 "Silicon Serial Number" -siru, joka käyttää yhden langan rajapintaa. Se vaatii vain yhden vapaan nastan ja jonkin koodin (koodi olisi mahdollisesti ongelma).

Vähiten tunkeileva ja todennäköisesti luotettavin tapa olisi yksinkertaisesti lukea koodi ja summa takaisin -Tarkista se. Juuri näin teen sirun allekirjoitustunnistimellani. Se kuitenkin havaitsee vain (nyt kirjoitettuna) käynnistyslataimen allekirjoituksen. Melko pieni muutos, ja se voi MD5: n summata koko luonnoskoodin.

Esimerkkilähtö:

  Allekirjoituksen ilmaisin. Kirjoittanut Nick Gammon. Signature = 1E 95 0F FusesLow = FF High = D6 Ext = FF Lock = CFProcessor = ATmega328P Flash-muistikoko = 32768 Käynnistyslatain: Kyllä 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-käynnistyslataimen summa = 56 72 75 2D 5D B5 0D BA 25 10 DF BE 87 D2 A1 27 

Tämä MD5-summa (viimeinen rivi) on erityisesti kyseisen käynnistyslataimen allekirjoitus. Itse asiassa uusin versio etsii ne taulukosta:

  MD5 bootloader summa = FB F4 9B 7B 59 73 7F 65 E8 D0 F8 A5 08 12 E7 9F Bootloader name: optiboot_atmega328  koodi> 

Joten mitä voisit tehdä, on luonnoksen lataamisen yhteydessä luoda MD5-summa heksakoodista. On melko yksinkertaisia ​​tapoja tehdä se. Sitten voit tehdä "git tag" -operaation lähdekoodissasi ja muistaa sitten (käyttäen jotakin automaattista tai manuaalista prosessia), että tietty MD5-heksakoodisumma edustaa luonnoskoodia tiettynä ajankohtana.

Jonkinlainen tietokanta, kuten:

  Chip: UnoMD5 summa: D8 8C 70 6D FE 1F DC 38 82 1E CE AE 23 B2 E6 E7 Luonnos: My_robot_sketch_42.inoGit-tunniste: version666  

Löydätksesi lähteen taululta, määrität koodin MD5-summan (lukemalla sen taululta) ja etsit sen sitten tietokannastasi.

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

Liitin yhden langan lämpötila-anturin, joista jokaisella on oma yksilöllinen anturinsa. Kaikki luonnokset lukivat käynnistyksen ja kirjoitin osoitteen jokaiseen sarjayhteyteen. Tein suojan kaikilla tarvittavilla laitteilla, joten jos minun tarvitsi päivittää Unosta Megaksi, laite säilytti ainutlaatuisen.

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

On pieni kirjasto mukautetun laitteistotunnuksen lukemiseen ja kirjoittamiseen EEPROM: iin. Voit käyttää sitä välttääksesi väärän luonnoksen työntämistä Arduinoon tai laitteen tunnistamiseen muihin tarkoituksiin.

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

Vastuuvapauslauseke: Olen kirjaston kirjoittaja: -)



Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...