Spørsmål:
Hva skjer hvis du skriver> 10000 ganger til flashminnet til en ATmega?
user8437812
2017-04-05 14:49:30 UTC
view on stackexchange narkive permalink

Jeg innså at jeg laster opp kode hvert 5. minutt og gjør relativt intensiv prøve-og-feil-utvikling, og at denne vanen kan forårsake problemer på veien, spesielt hvis jeg jobber på et tilpasset tavle (ikke Arduino ) der brikken ikke kan skiftes ut.

Hva vil skje?

Jeg la merke til at avrdude bekrefter den skrevne blitsen. Så vil det ganske enkelt begynne å legge merke til feil og muligens ikke kunne skrive uten å mislykkes?

Eller vil det fungere noen ganger, noen ganger ikke?

Eksempel på tung bruk: sterk > Et tilpasset PCB der enkel erstatning av MCU ikke er mulig. 10 000 skriv vil tilsvare 100 dager, hver 8. timers utvikling, med flash-skriv hvert 5. minutt.

Jeg har flere vaner som driver hyppig flash-skriving: Jeg injiserer referanser i koden min, tester hastighetsforbedringer av små optimaliseringer , programstørrelsesoptimaliseringer og så videre.

Jeg prøver nå å hindre meg i å blinke for ofte og gjøre flere koderevisjoner før testing, i stedet for å teste umiddelbart.

I konklusjon: Ja, det er usannsynlig, og uten tvil, hvis du jobber heltid på et styre, mindre intensivt, for eksempel et år, har du sannsynligvis råd til å kjøpe et nytt bord når det første begynner å svikte blitsverifiseringen.

Så vidt jeg vet sjekker avrdude alle skrevne byte. Du vil vite når det mislyktes. Noen har gjort tester med EEPROM, men jeg kjenner ikke en test med Flash. Den gamle ATmega8 har samme tall for flash (10k) og EEPROM (100k), men de nyere sjetongene er bedre. Jeg antar at det begynner å mislykkes etter mange 10k skriving.
@Jot, Jeg er fortsatt ikke sikker på om konsekvensen blir ødelagt blits, om avrdude gradvis mislykkes oftere og må prøve på nytt, eller om blitsen rett og slett ikke vil være i stand til å bli skrevet til riktig, f.eks. gir alltid feil lesing.
Dataarkene har en tendens til å være konservative, og tallene de gir, er vanligvis gyldige i et bredt temperaturområde. Ved romtemperaturforhold er sjansen stor for at du kan gå langt utover grensen på 10K. Du kan bare ikke være 100% sikker, ettersom Atmel ikke gir noe løfte utover 10K.
Det jeg prøver å finne ut, er hvordan det vil mislykkes.
Egentlig vil det være udefinert oppførsel. I utgangspunktet kan alt skje, og det bør unngås å gjøre det.
@Paul, Så i ekstreme tilfeller vil det være aktuelt å holde oversikt over antall flash-skrivinger? Siden feilmodus ikke ville oppføre seg forutsigbart? F.eks. en gjentatt feil på flash-skriving
Soms programmererbrett eller IDE gjør dette faktisk. Men ofte programmerer du ikke mikroen mer enn 10.000 ganger.
Fem svar:
dannyf
2017-04-06 05:37:49 UTC
view on stackexchange narkive permalink

Hva vil skje?

det kan hende det ikke består paritetskontroll. så å laste opp kode ville ikke være mulig.

Når det er sagt, har jeg aldri hatt en flashbasert mcu-feil på grunn av utholdenhet. det er utallige mcus siden så vidt jeg kan huske.

for å gi deg litt følelse av designhøyde, skrev jeg til og så tilbakelevering fra eeprom på et bilde over flere timer @ 10ms per lese / skrive , uten feil. at eeprom er rangert som 1 M i utholdenhet.

så med mindre du får noen rare deler eller du skriver til det gjentatte ganger over lang tid, er det sannsynlig at flashfeil ikke er et praktisk problem.

JRobert
2017-04-05 19:04:38 UTC
view on stackexchange narkive permalink

Denne Wikipedia-artikkelen om Flash-minne diskuterer feilmekanismer, inkludert referanser til relevante artikler. Et poeng som overrasket meg var "Les forstyrrelse" av tilstøtende celler etter et stort antall (> 100.000) avlesninger fra en celle siden siste sletting, noe som fikk den tilstøtende cellen (e) til å lese feil feil. Det er sannsynligvis mer der og i de refererte artiklene enn du noen gang ønsket å vite om Flash-feilmekanismer.

Imidlertid ...

Ved 5 minutter per test tar 10000 tester deg 35 dager jobber døgnet rundt eller over 100 dager @ 8 timer / dag, og opprettholder den hastigheten på testing. Poenget mitt er at du sannsynligvis ikke når 10K-sykluser. Men hvis du er bekymret for å sette en kraftig brukt brikke i feltet (og det kan også være, i noen tilfeller), vil det være verdt å bruke stikkontakt nr. 1.

Faktisk. Min bekymring er hovedsakelig når det gjelder aktiv utvikling av en tilpasset PCB, med en ATmega2560 som ikke ville være for gøy å erstatte manuelt, selv om det er mulig (100 pinner + risiko for vanskelig å se kortslutning av pinnene). Eller alternativt å kjøpe flere brett.
Årsaken til det høye antallet skrivinger er at jeg finjusterer forskjellige funksjoner for automatisering, sensing etc. - kanskje noe av det kan lindres ved å skrive til EEPROM via seriell osv. Osv., Men det er mye mer komplisert. enn bare å gjenoppbygge / reflektere;)
Min første tanke er om noen av disse funksjonene kan stilles ut av systemet? Og hvis ikke, hva er kostnadene for en feil i felten i forhold til trinnene som er nødvendige for å forhindre en? Vil svikt koste noe nedetid? En global serviceanrop? Et kundeforhold? Dreper en pasient? Noen scenarier rettferdiggjør rett og slett til og med en enorm investering på forhånd for å unngå dem. Ouch - snakk om fjellet mot det harde stedet ...
Michel Keijzers
2017-04-05 15:00:55 UTC
view on stackexchange narkive permalink

Selv om det ikke er et direkte svar på spørsmålet ditt, kan det være et svar på problemet ditt (behovet for å gjøre intensiv prøving og feiling.

Sannsynligvis tester du for det meste programmet ditt (endringer) , og ikke maskinvaren din (endringer). Siden jeg ikke antar at du bytter maskinvare (breadboard) hvert 5. minutt.

Hvis programmet er ganske komplisert, vil det sannsynligvis være best å skrive en spesifikk offline testprogram, og kjør det på en datamaskin i stedet for en Arduino. Du må sannsynligvis stoppe noen klasser / biblioteker du bruker, men det kan spare deg for mye tid. Også har du fordelen med en bedre IDE og mange flere feilsøkingsmuligheter. Etter at testene på testprogrammet for offline er bestått, prøver du det på Arduino.

På denne måten trenger du sannsynligvis å laste opp programmet bare noen få ganger om dagen på Arduino.

Etter min erfaring vil dette være bedre egnet som en kommentar enn et svar.
Jeg tror det kommer an på hva som er viktigere: svaret på selve spørsmålet eller løsningen på hans problem.
Det er et godt svar, fordi 10 000 forsøk er for mye, og det er bedre å fikse det underliggende problemet. Kanskje brukes forsinkelser som må justeres (i stedet for å bruke millis). Kanskje mer enn ett Arduino-kort kan brukes, eller Arduino Due med flere oppgaver. Jeg tror at bare en tilfeldig generator for å lage arbeidskode vil kreve så mange forsøk.
gilhad
2017-04-05 17:07:19 UTC
view on stackexchange narkive permalink

AFAIK produsenten sier at antall skrivesykluser er garantert. Vanligvis er brikken i stand til å tåle litt mer (for at produsenten skal være sikker på å opprettholde garantien), kan enkelte sjetonger tilfeldigvis tåle mye, mye mer.

Også feilen kan resultere i to typer problemer - først er det bedre på en måte - skrivingen mislykkes bare, etter å lese returnerer "noe" (vanligvis en del av den skrevne verdien, men noen biter er alltid satt til samme 0/1). Den andre er at bruk gjør skrivingen upålitelig - du skriver den, du leser den er ok, men etter en stund (som dager / måneder) endres innholdet, og hvis du leser det igjen, vil du få "noe "som i forrige tilfelle.

Det ville være bedre å sørge for at du er i stand til å bytte brikken, før du går til" normal bruk "og legger den fersk - bruk en stikkontakt / opprett et nytt kort / uløsemiddel gammel brikke og lodde ny. Bruk den slitte brikken for mer testing / utvikling, men bruk en fersk med bare noen få sykluser med refleks. Programvareemulatorer kan også øke hastigheten på utviklingen din og redusere behovet for / antall reflekterende brikker på brettet.

crusader27529
2017-04-06 00:54:39 UTC
view on stackexchange narkive permalink

Forutsatt at du ikke trenger å finjustere hvert brett individuelt, bare ikke send brettet som du gjør testingen / justeringen til "feltet" ..... hold det internt, og bruk bare nye tavler for feltbruk.

10k skrivesykluser er mye skjønt.


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 3.0-lisensen den distribueres under.
Loading...