Problem z odczytem pamięci FLASH AT29C1024 PLCC44 ciąg dalszy

Czy na pewno przejsciówka powinna być jeden do jednego pinowo? Ten Flash

> może mieć obudowę PLCC lub TSOP i wyprowadzenia nie są zgodne. Poza tym >chcę przypomnieć, że numery pinów się liczy inaczej w PLCC niż zwykle.

Zgadza się, ale przejściówka jest miom zdaniem dobrze zrobiona. Algorytm nazywa się AT29C1024-PLCC44 więc jest do takiego właśnie układu. Jeżeli nie włożę do programatora nic, to wyświetla mi wtedy błąd podłączenia i pokazuje które piny są nie podłączone na rysunku podstawki DIP48. wśród nich nie ma pinów 1, 2, 13, 33,42. A są to właśnie puste piny (NC) w AT29C1024 w obudowie PLCC44 tak więc wnioskuję, że przejściówka ma być zrobiona 1 do 1. Zresztą zwykłą przejściówkę z PLCC44 na DIP40 mam oryginalną i pierwsze co zrobiłem to właśnie próby programowania przy jej pomocy, ale wtedy były kompletne bzdury na rysunku podłączenia.

Dodatkowo zablokowałem testowanie sygnatury - nie wiem czy dobrze. Teraz już ne wyświetla błędu "manufacturer code error" i wydaje się że normalnie czyta, ale w buforze po przeczytaniu nic sensownego nie widzę, a zaznaczam jeszcze raz, że pamięć mam jedną napewno dobrą (z działającego urządzenia) natomiast druga - jest albo uszko dzona albo wykasowana - chodzi mi tylko o przekopiowanie Tutaj jest algorytm do tego układu, może ktoś coś mądrego podpowie. wyrzucone pętle są zaznaczone gwiazdkami:

;***************************************************** ; EPROM 29C1024-PLCC44.as ; PINBASE=44;

Var CheckSum:Word; VAR SectorStart: Word; VAR SectorStop : Word; VAR ChipStart : LongWord; VAR ChipStop : LongWord; VAR BufferStart: LongWord; VAR Data:word; var DataVer:Word;

Frame(10,10,210,325) Button('/Blank' ,20, 20,112,35,'IconDeviceBlank',Blank); Frame(10,59,210,2) Button('/Read' ,20, 65,112,35,'IconDeviceRead',READ); Frame(10,104,210,2) Button('/Program',20,110,112,35,'IconDeviceProgram',Program); Frame(10,149,210,2) Button('/Verify' ,20,155,112,35,'IconDeviceVerify',verify); Frame(10,194,210,2) Button('/Auto' ,20,200,112,35,'IconDeviceAuto',auto); Frame(10,239,210,2) Button('Pr/otect',20,245,112,35,'IconDeviceProtect',Protect); Frame(10,285,210,2) Button('/Unprotect',20,290,112,35,'IconDeviceUnProtect',UnProtect);

equ Check=1; equ unCheck=0; Var CheckAutoBlank:Byte; Var OverWrite:Byte; Var CheckAutoVerify:Byte; Var CheckProgramVerify:Byte;

CheckBox('Verify',140,119,CheckProgramVerify,1);

CheckBox('Blank' ,140,198,CheckAutoBlank,1); CheckBox('Verify',140,220,CheckAutoVerify,1);

equ SectorSize=80h; Label('Adres = Sector * 080h',600,10)

Frame(590,30,185,147) EditHEX('Sector Start' ,100,705, 45,58,25,SectorStart,0,0,SectorStop); Frame(590,79,185,2) EditHEX('Sector Stop' ,100,705, 92,58,25,SectorStop,_GLOBALSIZE /80h-1h,0,_GLOBALSIZE /80h-1h); Frame(590,124,185,2) EditHEX('Buffer Start',100,705,139,58,25,BufferStart,0,0,_GLOBALBUFFERSIZE-1);

TextFrame(230,10,350,210,T1);

ProgressRect(230,230,350,15,P1);

AdresMask(24,25,26,27,28,29,30,31,32, 44,36,37,38,39,40,41); DataMask(21,20,19,18,17,16,15,14, 11,10,9,8,7,6,5,3);

EQU VCC=35; EQU GND1=12; EQU GND2=34; EQU CE=4; EQU OE=22; EQU WE=43; EQU A9=44;

VAR ADRESChip:LongWord; VAR ADRESMemory:LongWord; VAR Blanked:LongWord; VAR DataTemp:Word; VAR Verify:LongWord;

BODY

;******************************************************* procedure(Puls); DATAOUT(Data); PINL(CE,WE); PINH(CE,WE); EndProc; ;******************************************************* Procedure(ID); ADRESOUT(05555h); Let Data = 0AAAAh; Puls; ADRESOUT(02AAAh); Let Data = 05555h; Puls; ADRESOUT(05555h); Let Data = 09090h; Puls; Loop(100);

DATAOUT(0FFFFh)

ADRESOUT(0h); PinL(OE,CE); DATAIN(DataVer); PinH(OE,CE); if DataVer<>_GLOBALMANUFCODE then ;******************************************** ;******************************************** ;UWAGA PONIŻSZĄ PĘTLĘ WYRZUCIŁEM ; begin ; TEXT(T1,'/Red/Manufacturer code ERROR!#//'); ; Reset; ; Halt; ; end;

ADRESOUT(1h); PinL(OE,CE); DATAIN(DataVer); PinH(OE,CE);

;***************************************** ;I TĄ TEŻ WYRZUCIŁEM ; if DataVer<>_GLOBALDEVICECODE then ; begin ; TEXT(T1,'/Red/Device code ERROR!#//'); ; Reset; ; Halt; ; end;

ADRESOUT(05555h); Let Data = 0AAAAh; Puls; ADRESOUT(02AAAh); Let Data = 05555h; Puls; ADRESOUT(05555h); Let Data = 0F0F0h; Puls; Loop(100);

DATAOUT(0FFFFh) EndProc; ;******************************************************* Procedure(POWER_ON); TEXT(T1,'/Maroon/Waiting...#//'); RESET LEDON VCCSET(500) PULLUP5V VCC(VCC) PINL(GND1,GND2) DATAOUT($FFFF) PINH(OE,CE) PINH(WE) VCCON; ID; EndProc; ;******************************************************* Procedure(POWER_OFF); Progress(P1,0); RESET EndProc; ;******************************************************* Procedure(BLANK); TEXT(T1,'#BLANK '); POWER_ON;

Let ChipStart = SectorStart; let ChipStart * SectorSize; Let ChipStop = SectorStop; let ChipStop * SectorSize; let ChipStop + SectorSize -1;

Let ADRESCHIP = ChipStart Let ADRESMEMORY=BufferStart; Let Blanked=0; PROGRESSMAX(P1,ChipStop); PROGRESSMIN(P1,ChipStart);

for AdresChip to ChipStop do begin ADRESOUT(AdresChip); PINL(CE,OE); DATAIN(Data); PINH(CE,OE); IF DATA<>$FFFF THEN Inc(Blanked); Progress(P1,AdresChip); end;

if blanked<>0 then begin TEXT(T1,'/Red//Under/WARNING !// CHIP NOT BLANK.#') TEXT(T1,'/Navy blue/') TEXTHEX(T1,Blanked) TEXT(T1,' //byte <> FFFFh.#')

POWER_OFF Halt end;

TEXT(T1,'/Under/OK!// CHIP BLANK#')

POWER_OFF EndProc; ;******************************************************* Procedure(READ); TEXT(T1,'#READ '); POWER_ON;

Let ChipStart = SectorStart; let ChipStart * SectorSize; Let ChipStop = SectorStop; let ChipStop * SectorSize; let ChipStop + SectorSize -1;

Let ADRESCHIP=ChipStart; Let ADRESMEMORY=BufferStart; LET Blanked=0; Let CheckSum=0; PROGRESSMAX(P1,ChipStop); PROGRESSMIN(P1,ChipStart);

for AdresChip to ChipStop do begin ADRESOUT(ADRESChip); PINL(CE,OE); DATAIN(Data); PINH(CE,OE); MEMORYOUT(ADRESMemory,Data); Let CheckSum+Data; IF DATA<>$FFFF THEN Inc(Blanked); INC(ADRESMemory); Progress(P1,AdresChip); end;

if blanked<>0 then begin TEXT(T1,'/Navy blue/') TEXTHEX(T1,Blanked) TEXT(T1,'// word <> FFFFh. ') end; Text(T1,'/Under/OK!//')

Text(T1,' Crc='); TextHex(T1,CheckSum); Text(T1,'h#');

POWER_OFF EndProc; ;******************************************************* Var AdrError:LongWord; Var DataBufferError:Word; Var DataChipError:Word; Var MarkError:Byte

Equ Marked = 1; Equ NotMarked = 0;

Procedure(Verify); TEXT(T1,'#VERIFY '); POWER_ON;

Let ChipStart = SectorStart; let ChipStart * SectorSize; Let ChipStop = SectorStop; let ChipStop * SectorSize; let ChipStop + SectorSize -1;

Let ADRESCHIP=ChipStart; Let ADRESMEMORY=BufferStart; Let Verify=0; Let MarkError=NotMarked;

PROGRESSMAX(P1,ChipStop); PROGRESSMIN(P1,ChipStart);

for AdresChip to ChipStop do begin ADRESOUT(AdresChip); PINL(CE,OE); DATAIN(Data); PINH(CE,OE); CompareOut(AdresMemory,Data); MemoryIn(AdresMemory,DataTemp); IF DATA<>DataTemp THEN begin Inc(Verify); if MarkError=NotMarked then begin Let AdrError=AdresChip; Let DataBufferError=DataTemp; Let DataChipError=Data; Let MarkError=Marked; end; end;

INC(AdresMemory); Progress(P1,AdresChip); end;

if verify<>0 then begin TEXT(T1,'/Red//Under/ERROR !// Verify #') TEXT(T1,'/Navy blue/') TEXTHEX(T1,Verify) TEXT(T1,' //byte bad value#')

TEXT(T1,'First error:#') TEXT(T1,'ChipAdres ChipData MemoryData#/Navy blue/') TEXTHEX(T1,AdrError) TEXT(T1,'h ') TEXTHEX(T1,DataChipError) TEXT(T1,'h ') TEXTHEX(T1,DataBufferError) TEXT(T1,'h #//')

POWER_OFF exit end

TEXT(T1,'/Under/OK!// CHIP Verify#')

POWER_OFF EndProc; ;******************************************************* var SAdresMemory:LongWord; var SAdresChip:LongWord; var SCounter:Word; procedure(SectorVerify); Let SAdresMemory=AdresMemory; Let SAdresMemory - SectorSize -1 ; Let SAdresChip =AdresChip; Let SAdresChip - SectorSize -1;

DataOut(0FFFFh); Let SCounter=0; for SCounter to SectorSize-1 do begin ADRESOUT(SAdresChip); PINL(CE,OE); DATAIN(DataVer); PINH(CE,OE); MemoryIn(SAdresMemory,Data); if DataVer<>Data then begin Text(T1,'/Red//Under/Error!//#'); TEXT(T1,'ChipAdres ChipData MemoryData#') Text(T1,'/Navy blue/'); TEXTHEX(T1,SAdresChip) TEXT(T1,'h ') TEXTHEX(T1,DataVer) TEXT(T1,'h ') TEXTHEX(T1,Data) TEXT(T1,'h #//') POWER_OFF Halt; end;

Inc(SAdresMemory); Inc(SAdresChip); end; EndProc; ;******************************************************* var Counter:Word; procedure(ProgramLoop); TEXT(T1,'#PROGRAM '); POWER_ON; PinH(CE,OE,WE); VCCSET(_GLOBALVCC);

Let ChipStart = SectorStart; let ChipStart * SectorSize; Let ChipStop = SectorStop; let ChipStop * SectorSize; let ChipStop + SectorSize -1;

Let ADRESCHIP=ChipStart; Let ADRESMEMORY=BufferStart; PROGRESSMAX(P1,ChipStop); PROGRESSMIN(P1,ChipStart);

PinL(CE); PinH(OE); Let Counter=0;

ADRESOUT(ADRESCHIP); Let SADRESCHIP=AdresChip;

for AdresChip to ChipStop do begin ADRESOUT(ADRESCHIP); PulseHL(WE); MEMORYIN(AdresMemory,Data); DataOut(Data)

inc(Counter); if Counter=SectorSize then begin PinH(CE,WE); Loop(100) Let Counter=0; Progress(P1,ADRESCHIP); SectorVerify; PinL(CE); end;

INC(ADRESMemory); end;

Loop(100); TEXT(T1,'/Under/OK!// CHIP Program#') POWER_OFF EndProc;

;******************************************************* procedure(Program); ProgramLoop; if CheckProgramVerify=Check then Verify EndProc; ;******************************************************* procedure(Protect); TEXT(T1,'#PROTECT '); POWER_ON; VCCSET(_GLOBALVCC);

ADRESOUT(5555h); Let Data= 0AAh; Puls; ADRESOUT(2AAAh); Let Data= 055h; Puls; ADRESOUT(5555h); Let Data= 0A0h; Puls;

ADRESOUT(0h); Let Counter=0 for Counter to SectorSize-1 do begin PulseHL(WE); end;

PinH(CE,WE); LOOP(100);

TEXT(T1,'/Under/OK!// CHIP Protected#') POWER_OFF EndProc; ;******************************************************* procedure(UnProtect); TEXT(T1,'#UNPROTECT '); POWER_ON; VCCSET(_GLOBALVCC);

ADRESOUT(5555h); Let Data= 0AAh; Puls; ADRESOUT(2AAAh); Let Data= 055h; Puls; ADRESOUT(5555h); Let Data= 080h; Puls; ADRESOUT(5555h); Let Data= 0AAh; Puls; ADRESOUT(2AAAh); Let Data= 055h; Puls; ADRESOUT(5555h); Let Data= 020h; Puls;

ADRESOUT(0h); Let Counter=0 for Counter to SectorSize-1 do begin PulseHL(WE); end;

PinH(CE,WE);

LOOP(100);

TEXT(T1,'/Under/OK!// CHIP UnProtected#') POWER_OFF EndProc; ;******************************************************* procedure(Auto) TEXT(T1,'#AUTO '); if CheckAutoBlank=Check then Blank

ProgramLoop;

if CheckAutoVerify=Check then Verify

Serialize;

TEXT(T1,'#/Under/OK!// AUTO#') endproc ;******************************************************* end.

Reply to
Leszek Wieczoerk
Loading thread data ...

jeżeli masz programator Erica to zamiast pamieci w obudowie plcc44 ustaw pamięc w obudowie dip i powinno pójść bez problemu, ..chyba że masz źle zrobioną przejściówke,..radzę sprawdzić w pdfie ukladu i porówac wyprowadzenia posczególnych obudów.

Reply to
JWik

Użytkownik "Leszek Wieczoerk" snipped-for-privacy@xl.wp.pl> napisał w wiadomości news:bp29m3$7as$ snipped-for-privacy@atlantis.news.tpi.pl...

popatrz na powyzszy fragment i do pdf'a cos tu nie gra ! przejsciowka 1 na 1 chyba nie zadziala

VCC ma byc na 44 a tu masz na 35 ? czy jak czytasz pamieci to pojawia sie zasilanie 5V na pinie 44 kostki PLCC44 ? bo cos czuje, ze nie

CE tesz jest zle tu 4 a w pdf'ie na 3 A9 tez zle

porownaj to wszystko i popraw algorytm albo przejsciowke

Reply to
Andy

dodam, ze taki miszung byc moze wynika z tego, ze w Erice nie na kazdej nodze mozna ustawic VCC i byc mozna na pinie 44 nie da sie ustawic VCC

podobnie noga A9 ma jakies specjalne znaczenie chyba protekcja kasowania albo cos podobnego i konieczne jest podanie na nia 12V (VPP) a jako, ze VPP tez nie na kazda noge da sie wystawic to pewie jest przepleciona gdzies poza kolejnoscia

wokol podstawki sa takie znaczki mowiace co na ktorym pinie podstawki da sie ustawic

i jesli jest tak jak mowie to tylko modyfikacja przejsciowki pomoze

Reply to
Andy

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.