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



Teraz jest 11 maja 2026, o 15:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 2 sty 2016, o 09:12 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Przepraszam, że moje pytanie nie dotyczy platformy AVR, ale zaczynam podejrzewać, że źródło kłopotów nie jest bezpośrednio związane z rodziną mikrokontrolerów.

Jak niektórzy wiedzą, od jakiegoś czasu eksperymentuję z rodziną trzydziestodwubitowych mikrokontrolerów od Microchipa. Przeportowałem już kilka bibliotek wykorzystywanych przeze mnie na AVR-ach, teraz zabrałem się za FatFS. Do tej pory korzystałem ze starszej wersji - tej, która kilka lat temu została przez pana Mirka dołączona do "Blue Booka". Wszystko działało jak powinno, więc nie czułem potrzeby upgrade'u. Tym razem jednak ściągnąłem inną wersję z Sieci.

1) Najpierw zacząłem od TEGO portu czyjegoś autorstwa, również opartego na starszej wersji. Pojawiły się jednak problemy (o których za chwilę), więc sięgnąłem po najnowszą wersję kodu z oficjalnej strony projektu.
2) Na wspomnianej stronie zamieszczone zostały przykłady dla kilku różnych platform. Nie było wśród nich PIC32, ale znalazł się szesnastobitowy PIC24. W oparciu o sterownik mm.c z poprzedniego podpunktu zmodyfikowałem go nieco. Niestety, problemy ciągle występowały.
3) Zastosowałem kompletnie inny sterownik, napisany przez znajomego z Usenetu. Problem ciągle występował.

Na czym polega problem? Układ najwyraźniej komunikuje się z kartą, gdyż potrafi rozpoznać jej wyjęcie (zgłasza wtedy kod błedu odpowiadający problemowi z fizycznym nośnikiem) oraz przeprowadza bez problemu funkcję disk_initialize(), zwracając FR_OK.
Jednak próba wykonania jakiejkolwiek operacji, zaczynając od f_mount kończy się błędem 13, oznaczającym brak prawidłowego systemu plików. Karty były formatowane za pomocą standardowego narzędzia z Windowsa 7.

Co może być nie takk?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2016, o 14:56 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Format karty to FATxx czy NTFS?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 18:39 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

FAT32, próbowałem też FAT16.

Przeprowadziłem kilka kolejnych testów. Sprawa wydaje się być bardziej "pokręcona". Pozwólcie, że wkleję post, który wysłałem już w tej sprawie na pl.misc.elektronika, żeby nie pisać tego samego od nowa:

Cytuj:
Jak wcześniej pisałem - próbuję uruchomić FatFS na PIC32. Na AVR-ach nie
miałem najmniejszego problemu z tą biblioteką, tutaj za chwilę osiwieję...

Nic nie działa jak powinno, a w sposobie hmm... niedziałania nie mogę
się doszukać żadnej logiki, która dałaby mi jakiś punkt zaczepienia przy
debugowaniu problemu.

1) Komunikacja po SPI najwyraźniej działa. Funkcja disk_initialize(0)
przy każdym wywołaniu zwraca FR_OK. No chyba, że w slocie nie ma karty -
wtedy otrzymuję FR_NOT_READY. Czyli wszystko tak, jak być powinno.
Niektóre karty zwracają co prawda FR_DISK_ERR, ale to pomijam, bo
dokładnie z tymi samymi egzemplarzami miałem także problem na AVR-ach i
szukanie przyczyny pozostawiam na później.
Fakt, że inicjacja karty kończy się komunikatem FR_OK świadczy o tym, że
mikrokontroler potrafi się dogadać z kartą.
2) O tym, że między dwoma urządzeniami występuje przepływ danych
świadczy też wynik badania analizatorem stanów logicznych. wyraźnie
widać pracę linii CS, SCK, MISO i MOSI.
3) Problem zaczyna się nieco później. Próba odczytania kilku sektorów z
karty za pomocą disk_read(0, bufor, 1, 5) kończy się zwróceniem
RES_ERROR. Analizator stanów pokazuje, że po wywołaniu tej komendy
występuje szybka komunikacja pomiędzy tymi urządzeniami. Pomyślałem, że
może SPI pracuje za szybko dla karty, jednak przestawienie interfejsu na
wolną transmisję nic nie zmieniło.
4) Funkcje wyższego poziomu nie działają, albo nie działają jak powinny.
f_mkfs() zwraca za każdym razem błąd FR_DISK_ERR, a f_mount()
FR_NO_FILESYSTEM. No może nie za każdym razem - jeszcze parę dni temu od
czasu do czasu (dość rzadko i raczej losowo) obserwowałem przypadki
"zaskakiwania" systemu plików - na karcie pojawiał się plik, do którego
były zapisywane dane.
5) Wypróbowałem kilka różnych modułów ze slotem na karty SD i micro SD.
W tym jeden zlutowany samodzielnie. Poprawność połączeń stwierdziłem
kilkadziesiąt razy. Ktoś ma jakiś pomysł co do możliwej przyczyny? CO
jeszcze mogę sprawdzić?

Port SPI jest iicjowany z następującymi ustawieniami:
SpiChnOpen(SPI_CHANNEL2,SPI_OPEN_MSTEN|SPI_OPEN_CKP_HIGH|SPI_OPEN_SMP_END|SPI_OPEN_MODE8,142);

Aha, żeby nie było - karta zasilana jest przez port LC (22uH, 1uF), a
wszystkie linie interfejsu SPI są podciągnięte do VCC.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 21:05 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Rzućmy okiem na ffconf.h który powinien być inny dla AVR i PIC32 (parametr _WORD_ACCESS). Problem może być w pliku mmc.c i w razie czego można sprawdzić wersję z bezpośrednim sterowaniem I/O. Microchip oferuje też własne rozwiązania. Czy próbowałeś jak działa Harmony? Powinno być łatwiej.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 sty 2016, o 22:32 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Krauser napisał(a):
Rzućmy okiem na ffconf.h który powinien być inny dla AVR i PIC32 (parametr _WORD_ACCESS).


Opcja _WORD_ACCESS jest ustawiona na 0, co (wedle opisu dołączonego do ffconf.h) ma zapewnić kompatybilność z wszystkimi platformami. Zresztą ja nie portowałem tej biblioteki z AVR. Wykorzystałem jeden z przykładowych projektów ze strony FatFS - co prawda nie był on zrobiony z myślą o PIC32, ale o siostrzanej, szesnastobitowej rodzinie PIC24. Zmodyfikowałem nieco funkcje odpowiedzialne za komunikację SPI. Resztę zostawiłem tak, jak była.

Cytuj:
Problem może być w pliku mmc.c i w razie czego można sprawdzić wersję z bezpośrednim sterowaniem I/O.


Jaką wersję masz na myśli? Chodzi o soft SPI, ręczne machanie pinami? Sęk w tym, że SPI działa - widać aktywność na analizatorze stanów logicznych. Funkcja disk_initialize() przechodzi zwracając FR_OK, co znaczy tyle, że wysłała to co trzeba, i odebrała to, co miała odebrać. Ale już np. odczyt sektora nie chce działa, a co za tym idzie - nie działają wysokopoziomowe funkcje.


Cytuj:
Microchip oferuje też własne rozwiązania. Czy próbowałeś jak działa Harmony? Powinno być łatwiej.


Nie próbowałem jeszcze ani Harmony, ani starszego MLA. Wolałem sięgnąć po FatFS, z uwagi na dwie kwestie:
1) Ta biblioteka jest bardzo podobna do uniksowego sposobu obsługi plików. W bibliotekach od Microchipa są ponoć jakieś większe różnice.
2) FatFS miałem już "rozgryziony" pod AVR-ami. Nie spodziewałem się żadnych problemów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 sty 2016, o 19:43 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Przykład dla PIC24 opiera się na tym, że taktowanie procesora to 4 * 7,3728 MHz, czyli około 29 MHz. Uwzględniłeś to? Możesz też obniżyć zegar dla SPI i sprawdzić. Kartę w trybie SPI taktuje się na początku małą prędkością 100 kHz - 400 kHz, a później maksymalną dla danej karty np. 25 MHz. Dokładnie chodzi o te ustawienia w pliku 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.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 sty 2016, o 10:58 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Tak, sprawdzałem pracę na niskim taktowaniu.
Problem okazał się mieć czysto sprzętowe podłoże - jak się okazuje płytka stykowa nie była w stanie zapewnić odpowiedniej jakości zasilania i nawet kondensatory wpinane w pobliżu modułu z kartą SD nie pomagały. Zastosowałem kartę z oddzielnym stabilizatorem i paroma przylegającymi kondensatorkami i układ od razu zaczął działać.
W przypadku samodzielnie trawionych płytek nigdy nie miałem takiego problemu, tam wystarczał filtr LC. Niemniej wtedy zawsze karta znajdowała się relatywnie blisko stabilizatora i była z nim połączona dość grubą ścieżką i/lub kawałkiem przewodu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 maja 2017, o 18:38 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Mam bardzo podobny problem:
Staram się uruchomić obsługę karty SD na procku PIC32. Funkcję inicjalizującą przechodzi bezproblemowo, natomiast przy próbie otwarcia pliku przy pomocy "fopen" dostaję błąd "FR_NO_FILESYSTEM".
Koledze z postu powyżej pomogły zmiany sprzętowe - u mnie jest trawiona płytka, z filtrowaniem 100nF 10uF tuż przy nóżkach scalaka i dalej nie działa :(

Ktoś ma jakieś złote rady ?



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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