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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 19 maja 2025, o 09:25


    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 ] [ Zaznacz wszystko ]
    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 3 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