Stránka 2 z 2

Napsal: 22 srp 2015, 19:15
od lesana87
Ale v tom diagramu se provádí verifikace a podle jejího výsledku se přidávají další 100us pulsy. Tak jak můžeš ten algoritmus dodržet bez verifikace?

Napsal: 22 srp 2015, 19:26
od astromik
lesana87:

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.

Napsal: 22 srp 2015, 19:30
od lesana87
A aspoň to časování dodržuješ? Data + adresa, >2us počkat, zápisový puls 100us, >4us počkat, další data + adresa, ....

Napsal: 22 srp 2015, 19:46
od Bernard
Š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é.

Napsal: 22 srp 2015, 19:48
od astromik
lesana87:

Č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
......

Napsal: 22 srp 2015, 22:02
od EKKAR
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é.
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 ...

Napsal: 22 srp 2015, 22:43
od lesana87
Rentgenka má spojité spektrum záření se špičkami na charakteristických energiích materiálu anody. U wolframu jsou ty špičky kolem 60keV.
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.

Napsal: 23 srp 2015, 02:11
od danhard
Brzdné rtg záření je širokopásmové a maximální energie je daná urychlovacím napětím :D
Charakteristické záření dané materiálem anody se začne objevovat až po překročení exitačních energií materiálu anody, prakticky až pro 80kV a více.

Napsal: 23 srp 2015, 09:05
od astromik
Tak jsem vyzkoušel doplnění té verifikace a vypadne to hned na první adrese po 10. zápisovém impulzu. Data, která jsou v paměti, není možné přepsat.

Takže to vypadá, že je ta paměť asi špatná.

Další postup bude sehnat novou paměť a pokusit se o nahrání dat na první pokus.

Napsal: 23 srp 2015, 09:37
od lesana87
Co radši použít AT49F1025? Nebo požádat někoho, kdo má funkční programátor na tu OTP.

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. :D

Napsal: 23 srp 2015, 22:16
od monterjirka
Bernard píše:Šla kdysi taková fáma, že OTP EPROMky jdou smazat roentgenovým zářením. ....

Mám dojem, že to tvrdil i autor knihy Rozeberte si PC.

Napsal: 17 pro 2015, 19:55
od astromik
Sice s velkým zpožděním, ale podle bodu 7d) pravidel fóra oznamuji, že je problém vyřešen.

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.