DataFlash Atmela - problem przy uruchomieniu
Rogher - 15-08-2006 19:29
DataFlash Atmela - problem przy uruchomieniu Cześć,
Już ponad tydzień siedzę nad problemem i utknąłem. Może pomożecie.
W systemie jest PIC18F2420 i DataFlash AT45DB011.
Mam problem z zapisem do MainPage'a jakichkolwiek danych.
Co działa:
1) czytam status - działa
2) zapis do bufora SRAM - działa
3) odczyt z bufora SRAM - działa
4) zapis do MainPage a następnie odczyt z MainPage - zwraca tylko FF-y.
Co zabawne - Robię tak:
1) Załadowanie strony nr x do bufora SRAM
2) Zapis nowych danych do bufora
3) zaprogramowanie bufora SRAM do Flash'a
W międzyczasie podglądam sobie timingi i podczas zapisu do Flash'a układ
nawet jest busy przez 15ms czyli jakby programował.
A robię mu potem odczyt a on mi zwraca FF'y. Dla pewności już 1mln razy
sprawdziłem że WP jest podciągnięty do +3V.
Dla chętnych pomocy mogę wrzucić zrzuty z analizatora na priva.
Może ktoś wie co jeszcze może być nie tak.
dzięki i pozdrawiam
Rogher
Paweł \(0\) - 15-08-2006 19:30
> Już ponad tydzień siedzę nad problemem i utknąłem. Może pomożecie.
> W systemie jest PIC18F2420 i DataFlash AT45DB011.
> Mam problem z zapisem do MainPage'a jakichkolwiek danych.
> Może ktoś wie co jeszcze może być nie tak.
Pokaż co _dokładnie_ wysyłasz w SPI przy nie działających
rozkazach.
Miałem jakiś czas temu podobne problemy, ale nie pamiętam
jak je rozwiązałem :-) Nie wiem czy czasem nie chodziło o to że pomyliłem
rozkazy gdzie należy wysyłać 4 a gdzie 1 dodatkowy bajt pomiędzy
rozkazem a danymi
pozdr
Rogher - 15-08-2006 19:30
> Miałem jakiś czas temu podobne problemy, ale nie pamiętam
> jak je rozwiązałem :-) Nie wiem czy czasem nie chodziło o to że pomyliłem
> rozkazy gdzie należy wysyłać 4 a gdzie 1 dodatkowy bajt pomiędzy
> rozkazem a danymi
>
> pozdr
>
>
Leci tak (wykrzyknik to jeden kompletny rozkaz z argumentami):
Jeszcze 1 komentarz: 0x33 - to u mnie don't care bits
//sprawdza STATUS i flagę BUSY
1! (CS: 1->0), 0xD7, (czeka na READY), (CS: 0->1)
//MainMemoryToBuffer
2! (CS: 1->0), 0x53, 0x00, 0x00, 0x33, (CS: 0->1)
//STATUS
3! (CS: 1->0), 0xD7, (CS: 0->1)
//BufferWrite
4! (CS: 1->0), 0x84, 0x33, 0x00, 0x00, 'T', 'O', 'M', 'A', 'S', 'Z',
(CS: 0->1)
//STATUS
5! (CS: 1->0), 0xD7, (CS: 0->1)
//BufferToMainMemoryWithBuiltErase
6! (CS: 1->0), 0x83, 0x00, 0x00, 0x33, (CS: 0->1)
//STATUS
7! (CS: 1->0), 0xD7, (tu czeka 15,7ms aż BUSY zostanie skasowane), (CS:
0->1)
i teraz odczyt:
//ContinousArrayRead
8! (CS: 1->0), 0xE8, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33,
(i teraz DATAFLASH przełącza SDO z 0->1, i puszczam kolejne 10 paczek
impulsów na SCK. Odczyt na linii SDO daje 10 razy 0xFF, (CS: 0->1)
KONIEC.
Dzięki za podejście do tematu
Rogher
Marek P. - 15-08-2006 19:30
Użytkownik Rogher napisał:
> Cześć,
>
> Już ponad tydzień siedzę nad problemem i utknąłem. Może pomożecie.
> W systemie jest PIC18F2420 i DataFlash AT45DB011.
> Mam problem z zapisem do MainPage'a jakichkolwiek danych.
>
> Co działa:
>
> 1) czytam status - działa
> 2) zapis do bufora SRAM - działa
> 3) odczyt z bufora SRAM - działa
> 4) zapis do MainPage a następnie odczyt z MainPage - zwraca tylko FF-y.
>
> Co zabawne - Robię tak:
>
> 1) Załadowanie strony nr x do bufora SRAM
> 2) Zapis nowych danych do bufora
> 3) zaprogramowanie bufora SRAM do Flash'a
>
> W międzyczasie podglądam sobie timingi i podczas zapisu do Flash'a układ
> nawet jest busy przez 15ms czyli jakby programował.
> A robię mu potem odczyt a on mi zwraca FF'y. Dla pewności już 1mln razy
> sprawdziłem że WP jest podciągnięty do +3V.
>
> Dla chętnych pomocy mogę wrzucić zrzuty z analizatora na priva.
>
> Może ktoś wie co jeszcze może być nie tak.
>
> dzięki i pozdrawiam
>
> Rogher
Witam,
Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się kiedyś,
czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
Marek
Rogher - 15-08-2006 19:30
>
> Witam,
> Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
> Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
> Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się kiedyś,
> czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
> Marek
Już sprawdzam....
Rogher
Kosma - 15-08-2006 19:30
Marek P. wrote:
> Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
> Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
> Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się kiedyś,
> czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
Ja miałem podobne problemy z AT89C2051. Tak często zapominałem o
odsprzęganiu zasilania lizaczkiem 100n, że zacząłęm przylutowywać
kondensatory od góry do nóg zasilania procka. Wygląda to śmiesznie, ale
działa niezawodnie... bo nie muszę pamiętać o kondensatorze.
W ogóle te kondensatorki powinny być zintegrowane. :P
Kosma
Rogher - 15-08-2006 19:30
>
> Witam,
> Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
> Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
> Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się kiedyś,
> czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
> Marek
Niestety, nie pomogło.
Wstawiłem najbliżej jak się dało tantala 22u + 100u (niskoimpedancyjny)
+ 1000u (jakiś zwykły). Bez zmian.
A wcześniej też podejrzewałem jakiś problem może od tej strony i
podłączyłem oscyloskop do zasilania DataFlash'a. Nie udało mi się jednak
zarejestrować żadnego skoku. Także to chyba nie o to chodzi...
Ale do dalszych prób - kondensatory te zostawiam :)
Rogher
Marek P. - 15-08-2006 19:30
Użytkownik Rogher napisał:
>>
>> Witam,
>> Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
>> Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
>> Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się
>> kiedyś, czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
>> Marek
>
>
> Niestety, nie pomogło.
>
> Wstawiłem najbliżej jak się dało tantala 22u + 100u (niskoimpedancyjny)
> + 1000u (jakiś zwykły). Bez zmian.
>
> A wcześniej też podejrzewałem jakiś problem może od tej strony i
> podłączyłem oscyloskop do zasilania DataFlash'a. Nie udało mi się jednak
> zarejestrować żadnego skoku. Także to chyba nie o to chodzi...
>
> Ale do dalszych prób - kondensatory te zostawiam :)
>
> Rogher
Piszesz w C?
Jesli chcesz podeśle Ci sprawdzone procedurki. Ja oczwiscie mam na AVRki
, ale to juz przerobisz sobie.
Marek
Rogher - 15-08-2006 19:30
Marek P. napisał(a):
> Użytkownik Rogher napisał:
>
>>>
>>> Witam,
>>> Dobry "hint" na DF to dobry elektrolit/tantal na nogach zasilania.
>>> Często gdy magazyn energii jest za daleko, rozkazy zapisu/kasowania
>>> Flasha są błędne. Przećwiczone wiele razy. Już zastanawiałem się
>>> kiedyś, czy nie zrobić DF+tantal jako 1 element biblioteczny ;)
>>> Marek
>>
>>
>> Niestety, nie pomogło.
>>
>> Wstawiłem najbliżej jak się dało tantala 22u + 100u
>> (niskoimpedancyjny) + 1000u (jakiś zwykły). Bez zmian.
>>
>> A wcześniej też podejrzewałem jakiś problem może od tej strony i
>> podłączyłem oscyloskop do zasilania DataFlash'a. Nie udało mi się
>> jednak zarejestrować żadnego skoku. Także to chyba nie o to chodzi...
>>
>> Ale do dalszych prób - kondensatory te zostawiam :)
>>
>> Rogher
> Piszesz w C?
> Jesli chcesz podeśle Ci sprawdzone procedurki. Ja oczwiscie mam na AVRki
> , ale to juz przerobisz sobie.
> Marek
Tak, w C. Jeżeli możesz to podrzuć - może podratuje.
dzięki
Rogher - 15-08-2006 19:30
>>
>>
> Piszesz w C?
> Jesli chcesz podeśle Ci sprawdzone procedurki. Ja oczwiscie mam na AVRki
> , ale to juz przerobisz sobie.
> Marek
Witam,
Temat cały czas aktualny. Porównałem procedurki od Marka ze swoimi. Mam
właściwie identyczne. A kod już jest tak prosty że prostszy nie może
być. Tymbardziej że mam podgląd na analizatorze i widzę co idzie
faktycznie po SPI.
Co jeszcze może być powodem że nie chce programować Main Memory?
(przypominam, że do buforów SRAM zapisuje i odczytuje z nich)
A może jest jakiś hint aby odczytać z MainPage'a. Może zapisało a nie
mogę odczytać???
Proszę o wsparcie a ja w międzyczasie mam jeszcze 1 pomysł. Zmajstruję
programator A. Dybkowskiego i podejrzę na analizatorze jak wygląda zapis
i odczyt czegoś co działa.
A może WriteProtect jest na stałe zablokowany mimo pina podwieszonego???
Zdażyło się kiedyś komuś?
pozdrawiam
Rogher
Paweł \(0\) - 15-08-2006 19:30
> i teraz odczyt:
>
> //ContinousArrayRead
> 8! (CS: 1->0), 0xE8, 0x00, 0x00, 0x00, 0x33, 0x33, 0x33, 0x33,
> (i teraz DATAFLASH przełącza SDO z 0->1, i puszczam kolejne 10 paczek
> impulsów na SCK. Odczyt na linii SDO daje 10 razy 0xFF, (CS: 0->1)
A spróbuj odczytać flasha do bufora (0x52, 0xD2), a potem odczytać
bufor.
może tak:
zapis do bufora
odczyt z bufora (żeby sobie potwierdzić co tam siedzi)
odczyt flash do bufora
odczyt z bufora
jak tu będzie miał FFy to znaczy że może nie działa zapis do flash
jak będzie ok to odczyt bezpośrednio z flasha nie działa
spróbuj też zapisu poprzez 0x82
pozdr
Rogher - 15-08-2006 19:30
Witam,
Na chwilę obecną wylutowałem DataFlasha z PCB podłączyłem go na pająku
do portu LPT (wg opisu A. Dybkowskiego, lecz bez buforów 74LVC244),
zasiliłem 3,3V, podłączyłem kondensatory na zasilaniu (22u tantal + 100u
niskoimp. + 1000u) i odpaliłem ISPProg'a.
linie WP i RST podłączyłem twardo do 3,3V.
1. Czyta sygnaturę poprawnie.
2. Próba zapisu kończy się WriteError ("powinno być 0x54 a jest 0xFF").
Podejrzałem sobie timingi z programatora - identyko jak u mnie i u Marka P.
Stawiam na uszkodzoną kość, co objawia się brakiem możliwości zapisu do
MainMemory (lub odczytu z niej). Zamówiłem nowe kości. Dam znać jak
dostanę i przetestuję.
Rogher
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl