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



Teraz jest 9 gru 2024, o 04:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 24 lip 2020, o 13:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Witam,
Od kilku dni walczę z obsługą karty SD za pomocą SPI w STM32103 i nie mogę sobie poradzić.


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


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


Funkcie do wysyałania i odbierania danych po SPI
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Do obsługi karty kozystam z biblioteki PetitFS z BB.
Jedyne zmiany jakie poczyniłem w tej biblitece to: zmiana wfunkcjach xmit_spi, rcv_spi (włożyłem tam moje funkcje do wysyłania i odbierania danych po SPI) oraz pozmieniałem definicje makr: SELECT(), DESELECT() oraz MMC_SEL
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dla czytelności wklejam cały plik mmc.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I teraz w pętli głównej chcę zrobić inicjalizację karty, odczyt zawartości, modyfikacja i zapis zmienionych danych:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po tych operacjach otrzymuję informacje "disk init error"

Na podglądzie magistrali, na linii MOSI procek cały czas wysyła 0x00
Obrazek
A tak wygląda cały przebieg:
Obrazek

Wnioskuję, że mam źle napisane funkcje do wysyłania i odbierania danych po SPI i/lub źle skonfugurowany port SPI.
Proszę o pomoc i o sprawdzenie moich wypocin :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2020, o 17:44 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

sam w problem nie mam czasu się wbijać - ale skoro i tak korzystasz z gotowej biblioteki (z BB) - to czemu nie skorzystać z rzeczy od ST - w CubeMx możesz sobie dodać do projektu obsługę karty pamięci i skorzystać z tego co producent przygotował.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2020, o 18:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Generalnie chcę się nauczyć pracy na rejestrach żeby lepiej poznać architekturę procka.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2020, o 19:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

Pierwsze co bym zrobiłem to zaczął od sprawdzenia SPI. Wyslij kilka bajtów i zobacz czy one lecą po mosi. Tym bardziej że masz analizator to problemu nie bedzie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 lip 2020, o 22:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

Widzę, że kod zaczerpnięty z poradnika Szczywronka i powinien być poprawny przy wysyłaniu.
Przed chwilą sprawdziłem na BluePill i u mnie działa wysyłanie poprzez spi_write().
Z tego wynika, że musisz mieć zwarcie na linii MOSI i dlatego cały czas ten sam stan. Nie można też wykluczyć uszkodzenia pinu mikrokontrolera, ale zacząłbym od sprawdzenia połączeń oraz modułu SD, jeśli to moduł.
Ciekawe też jak realizujesz podciąganie dla linii MISO, w module od Atnela do SD, jeśli dobrze pamiętam, były zewnętrzne rezystory.

Niestety do odbierania możesz mieć kłopot, bo funkcja gpio_pin_cfg jest w poradniku niepoprawnie, źle ustawia podciąganie dla pinu jako wejścia, tak wygląda poprawna:
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: 24 lip 2020, o 23:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2014
Posty: 150
Pomógł: 1

Napisałem prosty kod i wszystko na to wygląda, że SPI działa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obrazek

------------------------ [ Dodano po: 55 minutach ]

Zealota napisał(a):
Widzę, że kod zaczerpnięty z poradnika Szczywronka i powinien być poprawny przy wysyłaniu.

Skądś trzeba czerpac wiedze ;)


Zealota napisał(a):
Przed chwilą sprawdziłem na BluePill i u mnie działa wysyłanie poprzez spi_write().
Z tego wynika, że musisz mieć zwarcie na linii MOSI i dlatego cały czas ten sam stan. Nie można też wykluczyć uszkodzenia pinu mikrokontrolera, ale zacząłbym od sprawdzenia połączeń oraz modułu SD, jeśli to moduł.

Teraz sprawdziłęm jeszcze raz stykówkę i okazało się, że miałem odwrotnie podpięte piny MISO i MOSI w samym chińskim analizatorze "saleae". Grafika z pierwszego postu powinna wyglądać następująco (A więc na MOSI pojawia się wartość 0xFF) Jutro ( a właściwie dzisiaj rano) podepnę oscyloskop to dokładniej zobacze przebiegi bo ten analizator coś oszukuje.
Obrazek


Zealota napisał(a):
Ciekawe też jak realizujesz podciąganie dla linii MISO, w module od Atnela do SD, jeśli dobrze pamiętam, były zewnętrzne rezystory.

Rzuciłem teraz okiem na płytkę ATB to nie zauważyłem tam żadnego rezystora:
Obrazek
A ja korzystam z chińskiej przejściówki.
Obrazek
Aczkolwiek podłączałem czytnik z płytki ATB i był taki sam efekt - czyli karta nie przechodziła inicjalizacji.


Zealota napisał(a):
Niestety do odbierania możesz mieć kłopot, bo funkcja gpio_pin_cfg jest w poradniku niepoprawnie, źle ustawia podciąganie dla pinu jako wejścia, tak wygląda poprawna:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Dzięki za korektę :) Jak znalazłes ten błąd i co oznacza zapis:
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: 25 lip 2020, o 01:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2017
Posty: 368
Lokalizacja: Gliwice
Pomógł: 34

amilo_pa napisał(a):
Dzięki za korektę Jak znalazłes ten błąd i co oznacza zapis:
gpio_mode_input_pull_up = 8|16

Jeśli dobrze pamiętam, nie działał mi chyba PullUp dla wejścia i po przeglądnięciu RM zauważyłem braki w funkcji.
Sam zapis to zwykła suma bitowa, w ten sposób zapisałem sobie wzorzec, który sprawdzam w funkcji za pomocą maskowania.



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: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO