Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 22 kwi 2026, o 15:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 1 wrz 2018, o 20:32 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

Witam według noty katalogowej mojej pamięci AT25SF161:
https://www.adestotech.com/wp-content/uploads/DS-AT25SF161_046.pdf
powinienem najpierw wysłać 0xB a następnie adres komórki pamięci w 24bajtach np 12E631 aby uzyskać jej wartość??
nie do końca mi to wychodzi :evil: nie wiem jak to dokładnie wysłać by otrzymać odpowiedź

mój kod w c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2018, o 16:22 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Pierwszy problem w Twoim kodzie to brak obsługi pinu SS. Podczas inicjalizacji SPI powinieneś ustawić te pin jako wyjście (to masz dobrze) i ustawić je w stan wysoki (czego nie robisz). Ponadto pin ten przed rozpoczęciem transmisji powinien być ustawiony w stan niski (czego nie robisz), a po jej zakończeniu z powrotem w stan wysoki (czego też nie robisz).

Drugi problem jest taki, że chyba nie bardzo rozumiesz zasadę działania SPI. Najpierw należy wysłać komendę (tu jest OK, wysyłasz 1 bajt o wartości 0x0B) i adres (w przypadku komendy 0x0B wymagane są 4 bajty, Ty wysyłasz 3). Później jednak, aby cokolwiek odebrać musisz utrzymać taktowanie na linii SCK. By to zrealizować, musisz wpisać cokolwiek do rejestru SPDR, wtedy mikrokontroler utrzyma taktowanie i Twoje dane zostaną "wysunięte" do układu slave (w tym przypadku do pamięci - zostaną przez nią zignorowane), a do mikrokontrolera zostanie "wsunięty" odczytany z pamięci bajt danych.

Reasumując algorytm jest taki:
  1. ustawiasz pin SS w stan niski,
  2. wpisujesz do SPDR komendę 0x0B i czekasz na zakończenie transmisji,
  3. wpisujesz do SPDR po kolei cztery bajty adresu zaczynając od najbardziej znaczącego (z czego pierwsze 3 są adresem, ostatni bajt może być dowolny - zostanie zignorowany) za każdym razem czekając na zakończenie transmisji,
  4. wpisujesz do SPDR dowolny bajt danych i czekasz na zakończenie transmisji,
  5. odczytujesz z SPDR odebrany bajt danych,
  6. powtarzasz punkty 4 i 5 tyle razy, ile bajtów chcesz odebrać,
  7. po odebraniu potrzebnej ilości danych ustawiasz pin SS w stan wysoki.

Komendy odczytu 0x0B należy używać dopiero przy prędkościach transmisji powyżej 50MHz, co i tak jest w 8-bitowych AVR nieosiągalne, więc możesz spokojnie użyć komendy 0x03. Wtedy wystarczy wysłać tylko 3 bajty adresu, co skróci czas potrzebny na odczyt (szczególnie w przypadku odczytu pojedynczych bajtów).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2018, o 18:02 
Offline
Użytkownik

Dołączył(a): 27 sie 2015
Posty: 47
Pomógł: 0

dzięki za zainteresowanie, przy takiej konfiguracji:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

dostaje zwrot z wartości komórki 000001 pamięci chociaz wpisana jest 000000. :roll:
to ile dodatkowych bitów muszę wysłać z byle czym aby otrzymać wartość komórki 000000, jak wysyłam dwa to mam wartość drugiej komórki a jak jeden to wartość z kosmosu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 wrz 2018, o 18:27 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Wszystko napisałem w poprzednim poście. Twój kod nadal nie realizuje prawidłowo algorytmu, który opisałem. Jestem przekonany, że kiedy to dokładnie przeczytasz, zrozumiesz i zastosujesz w swoim kodzie, to wszystko będzie działać ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 15 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO