VYŘEŠENO - Je možné vymazat obsah v OTP EPROM?
Moderátor: Moderátoři
Dobře, zkusím zapsat "0x0000" i s tou verifikací.
Provedl jsem jen tu úvodní smyčku pro všechny adresy s jedním impulzem.
Pak jsem to vypnul, přepnul datový expander na vstup a všechny data z paměti načetl a uložil do souboru.
Při prvním zápisu to takhle fungovalo, ale protože jsem měl chybu v hardwaru, byla data na špatných adresách. Při pokusu o další zapisovací smyčku (opět s jedním 100us impulzem) se nic nedělo - data zůstala stejná jako po prvním zápisu.
Zítra dám vědět, jak to dopadlo.
Časování mám bezpečně nad požadovanými limity.
U 100us impulzu je tolerance 5%. Ten generuji v Arduinu takto:
Kód: Vybrat vše
void setup()
{
pinMode(4, OUTPUT); // D4 dava 100us impulzy
attachInterrupt(0, preruseni, FALLING); // INT0 ceka na sestupnou hranu
}
void loop()
{
}
void preruseni() // po sestupne hrane na INT0 se vygeneruje 100us impulz
{
digitalWrite(4, LOW);
delayMicroseconds(97); //doladeni sirky impulzu na 100us podle osciloskopu
digitalWrite(4, HIGH);
}
a program pro Raspberry Pi pro zápis dat vypadá takhle:
Kód: Vybrat vše
#!/usr/bin/python
import smbus
import time
bus = smbus.SMBus(1) # novejsi verze Raspberry Pi (512MB)
bus.write_byte_data(0x20,0x00,0x00) # port A ridiciho expanderu na vystup
bus.write_byte_data(0x20,0x01,0x00) # port B ridiciho expanderu na vystup
bus.write_byte_data(0x21,0x00,0x00) # port A adresoveho expanderu na vystup
bus.write_byte_data(0x21,0x01,0x00) # port B adresoveho expanderu na vystup
bus.write_byte_data(0x26,0x00,0x00) # port A datoveho expanderu na vystup
bus.write_byte_data(0x26,0x01,0x00) # port B datoveho expanderu na vystup
bus.write_byte_data(0x20,0x12,0b00000001) # pin A0 ridiciho expanderu do "1"
file = open('data-eeprom.txt', 'r')
for line in file:
adrh = int(line[0:3]) # hornich 8 bitu adresy
adrl = int(line[4:7]) # spodnich 8 bitu adresy
dath = int(line[8:11]) # hornich 8 bitu dat
datl = int(line[12:15]) # spodnich 8 bitu dat
bus.write_byte_data(0x21,0x12,adrl) # port A adresoveho expanderu nastavit na spodni cast adresy
bus.write_byte_data(0x21,0x13,adrh) # port B adresoveho expanderu nastavit na horni cast adresy
bus.write_byte_data(0x26,0x12,datl) # port A datoveho expanderu nastavit na spodni cast dat
bus.write_byte_data(0x26,0x13,dath) # port B datoveho expanderu nastavit na horni cast dat
time.sleep(0.001) # pauza pred zapisovacim impulzem
bus.write_byte_data(0x20,0x12,0b00000000) # pin A0 ridiciho expanderu do "0"
time.sleep(0.001) # arduino si na zaklade tehle H->L hrany vygeneruje 100us
bus.write_byte_data(0x20,0x12,0b00000001) # pin A0 ridiciho expanderu zpatky do "1"
print adrh , adrl, dath, datl
Data v souboru "data-eeprom.txt" mají takovouto strukturu (výřez části dat):
Kód: Vybrat vše
.....
115;109;003;089
115;110;003;118
115;111;003;147
115;112;003;176
115;113;003;205
115;114;131;234
115;115;000;007
115;116;000;036
115;117;000;065
115;118;000;094
115;119;000;123
......
To není fáma, to je fakt - OTP neboli One Time Programmable (E)PROM jdou smazat RTG zářením, akorát to musí bejt trochu silnější záření, než dávají lékařský diagnostický zářiče - nevím kolik eV musí to záření mít, ale na jistejch defektoskopickejch pracovištích, kde se rentgenujou sváry na oceli nebo obecně kovech o síle klidně 25-50mm se takový OTP paměti mazaly - stačilo je ozářit po dobu několika minut právě tím defektoskopickým RTG zářičem - a byly plný FF ... Určitým vodítkem pro určení energetický hladiny záření by mohlo bejt, že takovej rentgen má na anodě rentgenky napětí v řádu 100 - 150kV, kolik má energii v eV se mi nepovedlo od nikoho vyzvědět ...Bernard píše:Šla kdysi taková fáma, že OTP EPROMky jdou smazat roentgenovým zářením. Jeden kolega měl za manželku zubařku v nemocnici, tak jí to podstrčil na ozáření, ale nějak to nedopadlo na 100%. Tenkrát jsme ty OTB brali z nouze, Tesla nestíhala ta keramická pouzdra, a sovětské K176 byly značně nespolehlivé.
A kutilmile - nelituju tě
Docela bych se divila, kdyby ta EPROMka po několika minutách v takovém záření ještě spolehlivě fungovala. Na internetu jsem našla, že by se pak ten čip musel ohřát na 600°C, aby se odstranilo poškození, způsobené tím tvrdým zářením. A už vidím to plastové pouzdro při 600°C.
Edit: Mám tu haldu OTP pamětí poloviční kapacity AT27C516-55JC. Zkusila jsem je v programátoru přečíst a přepsat některé 1 na 0 a bez problémů. Jediný problém byl, že se ty paměti identifikují 001Eh/002Ah místo 001Eh/00F2h, takže bylo potřeba zakázat ID check.
Edit2: Dokonce i paměti od ST M27C516 se identifikují (0020h/01FFh) místo (0020h/000Fh). Aby to nakonec nebyly všechno nějaké zakuklené přeznačené Flashky.
- monterjirka
- Příspěvky: 2855
- Registrován: 14 čer 2003, 00:00
- Bydliště: Blížejov
Po neúspěšném pokusu s první pamětí jsem zkusil vypálit data do druhé paměti stejného typu.
I tady ale došlo asi po 20kB bezproblémového programování k jejímu zničení (zase se zablokovala tak, že do ní už nebylo možné nic zapsat.)
Na třetí pokus jsem tedy poslechl radu Lesany87 a místo OTP EPROM jsem použil přepisovatelnou FLASH "AT49F1025".
Protože má téměř stejné rozložení vývodů, stačilo jen trochu upravit vypalovací program a všechna data se podařilo zapsat hned napoprvé.
Opožděně tedy děkuji za radu.