Jak skonfigurować przejściówkę 1:1 dla pamięci FLASH AT29C1024 PLCC44?

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





Poprzedni Następny
Wiadomość
Spis treści
From: "Leszek Wieczoerk" <l.wieczorek_at_nospam_xl.wp.pl>
Subject: Problem z odczytem pamięci FLASH AT29C1024 PLCC44 ciąg dalszy
Date: Fri, 14 Nov 2003 11:14:57 +0100



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.







========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "JWik" <jwiklif_at_nospam_wp.pl>
Subject: Re: Problem z odczytem pamięci FLASH AT29C1024 PLCC44 ciąg dalszy
Date: Fri, 14 Nov 2003 14:04:59 +0100


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.

--
Pzdr
Mirek



---------------------------------------
Użytkownik "Leszek Wieczoerk" <l.wieczorek_at_nospam_xl.wp.pl> napisał w wiadomości
news:bp29m3$7as$1_at_nospam_atlantis.news.tpi.pl...
>
> > 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.



========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.nask.pl!news-stoc.telia.net!217.209.241.210.MISMATCH!news-stod.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anok_at_nospam_ceti.pl>
Subject: Re: Problem z odczytem pamięci FLASH AT29C1024 PLCC44 ciąg dalszy
Date: Fri, 14 Nov 2003 17:56:03 +0100


Użytkownik "Leszek Wieczoerk" <l.wieczorek_at_nospam_xl.wp.pl> napisał w wiadomości
news:bp29m3$7as$1_at_nospam_atlantis.news.tpi.pl...

...

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

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


--
Andrzej




========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Andy" <anok_at_nospam_ceti.pl>
Subject: Re: Problem z odczytem pamięci FLASH AT29C1024 PLCC44 ciąg dalszy
Date: Fri, 14 Nov 2003 18:58:52 +0100



EQU VCC=35;
...
VCC ma byc na 44 a tu masz na 35 ?

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

--
Andrzej




========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!not-for-mai