Ik verbind mijn mcu met een eeprom via I2C
ik wens een reeks bytes te schrijven (niet page write)
moet ik tussen elke afgewerkte write een pauze invoeren?
ik gebruik de I2C soft lib van mikroc.
Pseudo code
START
Hi address
Lo address
Data1
STOP
+++++++ moet hier een pauze tussen en hoe lang?
START
Hi address
Lo address
Data2
STOP
Ja, het varieert per merk (Kijk in het datasheet voor de write timing). Meestal tussen de 2 en 10 milliseconden.
Het is dus niet alleen traag, maar ook inefficient. Je kan beter de reeks in een keer schrijven want dan gaat je I2C chip veel langer mee en is het bovendien veel sneller. Wel de page boundaries in de gaten houden.
Het vreemde is dat ik een test deed met een delay van 20ms en hij schreef alleen de eerste byte.
Bij een test met delay van 100 ms deed ie alle byte writes.
Bij Page writes dien je dus op een page boundary te beginnen.
Zoals
0000 0000
0100 0000
1000 0000
1100 0000
en telkens een pakket van 64 bytes schrijven om geen problemen te ondervinden met schrijven over boundaries?
dus pseudo code moet lukken?
PSEUDO voor 24LC256
for a=0 tot 512
START
Write command
adres a*0
write byte 0
.......
write byte 63
STOP
next a
Op 13 juni 2009 19:39:43 schreef tubos:
Bij Page writes dien je dus op een page boundary te beginnen.
Nee, je mag overal beginnen, je mag alleen geen pagina grens kruisen.Dus als je altijd een binair aantal schrijft (2/4/8/16/32 etc..) heb je er nooit last van.
Je mag ook bijvoorbeeld 50 bytes schrijven op adres 10 (van 10 tot 59), maar niet op adres 250 (van 250 tot 299), want dan kruis je de pagina grens.
Ok ik begrijp het , maar programmatorisch lijkt het me handiger een buffertje van 64 bytes te vullen en dan op
naar de juiste page sturen.
alvast bedankt.
Ik begrijp alleen die delay problemen nog niet.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
die delahy is eigen aan de interne programmeer afhandeling van de chip.
je kan testen of de chip klaar is door hem direct na een schrijfopdracht als read te addresseren. als hij niet antwoordt op de ack cyclus is hij nog bezig ...
Het probleem was niet de delay maar een te lage
Voedingsspanning , ik voed via een batterij van 3V
maar deze was te laag geworden.
Doordat ik de LC versie (min 2.5V) heb , kwamen daardoor
de schrijffouten.
Ik heb nu de Delay veranderd naar 10 ms en het werkt perfect.
Ik heb nog een vraag over de levensduur van de eeprom.
Is dat 1 miljoen cycles Per geheugenplaats of write cycles in totaal gerekend?
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com