DataFlash Atmela - problem przy uruchomieniu

Jul 25, 2006 11 Replies

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


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

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

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

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

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

Użytkownik Rogher napisał:

Piszesz w C? Jesli chcesz podeśle Ci sprawdzone procedurki. Ja oczwiscie mam na AVRki , ale to juz przerobisz sobie. Marek

Marek P. napisał(a):

Tak, w C. Jeżeli możesz to podrzuć - może podratuje.

dzięki

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

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

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

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required