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



Teraz jest 4 sie 2026, o 02:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 2 lip 2015, o 07:29 
Offline
Użytkownik

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

Uruchamiam w tej chwili pewne urządzenie, które będzie korzystało z łączności Ethernetowej na ENC28J60 oraz karty SD (a właściwie microSD). Nie chciałem podpinać żadnego z tych urządzeń do programowego SPI, a ponieważ Atmeha644 ma tylko jedną sprzętową magistralę, będą musiały ją dzielić między sobą. ENC już działa, teraz zabrałem się za uruchamianie karty.

Ponieważ będę potrzebował w miarę wygodnej obsługi zapisu i tworzenia nowych plików, zdecydowałem się na FatFS. Ściągnąłem najnowszą wersję ze strony autora i zabrałem się za jej przerabianie, zgodnie z wytycznymi zawartymi w "Niebieskiej Książce". Oczywiście będę musiał poprzerabiać makra sterujące wyjściami i odczytujące stany określonych wejść. Będę też musiał zmodyfikować funkcję odpowiadającą za odczyt RTC, którego nie zamierzam rezygnować - autor korzystał z osobnego układu na I2C, ja zliczam sekundy w formacie uniksowym, korzystając z Timer2 i kwarcu zegarkowego.

Zauważyłem jednak, że w bibliotece FatFS inicjacja magistrali SPI odbywa się w funkcji włączającej zasilanie. Podobnie magistrala jest wyłączana przy jego wyłączeniu. Z funkcji on/off także nie chcę rezygnować, gdyż już przewidziałem na płytce miejsce pod tranzystor pnp. Oczywiście inicjacja magistrali przy włączaniu karty nie będzie potrzebna (na tym etapie będzie ona już zainicjowana przez ENC), co najwyżej będę musiał poustawiać kierunki i stany pomocniczych linii. Podobnie wyłączenie magistrali przez kartę zablokowałoby komunikację przez Ethernet. To jest jeszcze dla mnie jasne, zauważyłem jednak coś jeszcze.
Widzę, że w bibliotece FatFS zostały zdefiniowane makra do obsługi prędkości SPI. Domyślnie karta pracuje na F_CPU/2. Wykorzystywane jest jednak także makro ustawiające F_CPU/64. Do czego to służy? I jego użycie przez FatFS-a może w jakiś sposób zakłócić komunikację z ENC? Ten układ domyślnie również pracuje na F_CPU/2 i taka częstotliwość jest ustawiana w jego procedurze inicjującej.

Jest jakiś właściwy sposób pisania kodu, gdy na magistrali pracuje więcej niż jedno urządzenie? Chodzi mi przede wszystkim o następujące zagadnienia:
1. Czy powinienem zostawiać inicjację magistrali jednemu z nich? A może powinienem wydzielić potrzebne operacje do osobnych funkcji, trzymanych w osobnym pliku i zainicjować SPI jeszcze przed rozpoczęciem pracy z pozostałymi układami? Zdaje się tak to jest właśnie robione w Arduino...
2. Może wskazane byłoby "przypominanie" właściwych ustawień magistrali dla danego urządzenia przed rozpoczęciem każdej transmisji? W tym przypadku to nie będzie konieczne, bo obydwa urządzenia pracują w tym samym trybie, ale może jednak jest to dobrą praktyką, której warto się trzymać?

I tak przy okazji, odnośnie FatFS chciałem zapytać, czy ta biblioteka posiada jakieś zabezpieczenie przed błędami w przypadku zaniku zasilania albo wyjęcia karty podczas zapisu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 10:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 maja 2014
Posty: 317
Pomógł: 19

Atlantis napisał(a):
(...)
Kolego, niewiele Ci pomogę, bo sam przerabiam podobny problem obecnie. W każdym razie powinieneś zwrócić uwagę na taki PIN/parametr jak CS=Chip Select. Przejrzyj schemat Pana Mirka i zobacz co jak tam działa. Mam nadzieję, że chociaż minimalnie pomogłem.

Pozdrawiam! j23 Jarek

_________________
"O sygnałach bez całek" Czesław Frąc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 10:27 
Offline
Użytkownik

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

j23 napisał(a):
Kolego, niewiele Ci pomogę, bo sam przerabiam podobny problem obecnie. W każdym razie powinieneś zwrócić uwagę na taki PIN/parametr jak CS=Chip Select. Przejrzyj schemat Pana Mirka i zobacz co jak tam działa. Mam nadzieję, że chociaż minimalnie pomogłem.


Ale z tego doskonale zdaje sobie sprawę. :)
Każdy układ pracujący na magistrali ma swoją osobną linię CS.
Mi chodzi raczej o zalecaną praktykę pisania kodu, gdy mamy więcej urządzeń. Bo po przejrzeniu "domyślnego" kodu biblioteki FatFS już widzę, że kilka rzeczy trzeba będzie pozmieniać. Jest ona napisana tak, że "zawłaszcza" sobie magistralę, zupełnie wyłączając ją w przypadku wyłączenia/wyjęcia karty. Jest to niedopuszczalne, gdy korzysta z niej jeszcze jedno urządzenie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 10:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

Atlantis tak zapytam najpierw czy koniecznie upierasz się przy zastosowaniu ENC28J60? Bo jak nie to miałbym dla Ciebie inną ciekawszą propozycję która by Ci zaoszczędziła sporo miejsca w procku, przyspieszyła działanie programu i dodała nowe funkcjonalności do urządzenia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 11:05 
Offline
Użytkownik

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

Intre napisał(a):
Atlantis tak zapytam najpierw czy koniecznie upierasz się przy zastosowaniu ENC28J60? Bo jak nie to miałbym dla Ciebie inną ciekawszą propozycję która by Ci zaoszczędziła sporo miejsca w procku, przyspieszyła działanie programu i dodała nowe funkcjonalności do urządzenia.


Jeśli chodzi o Wiznet W5100 albo W5500, to jestem świadom ich zalet. Już ich parę razy używałem w różnych projektach. Tym razem celowo "wróciłem" do ENC28J60, bo generalnie w tym projekcie mogę dzięki temu wygodnie wykorzystać "fragmenty" kilku wcześniejszych - zarówno jeśli chodzi o hardware jak i software. A w tym przypadku łączność sieciowa nie będzie zbyt intensywnie wykorzystywana - chodzi o wysłanie informacji na serwer co kilkadziesiąt sekund i synchronizacje czasu co godzinę. Podobnie zapis na karcie SD nie będzie zbyt intensywnie używany.

Na ENC zdecydowałem się także z uwagi na łatwiejszy projekt płytki. Poza tym Wiznety mam jak na razie "rozgryzione" tylko w C++ (przeportowana biblioteka Arduino Ethernet). Zależało mi na tym, żeby ten projekt powstał w "czystym" C.

Jeśli natomiast chciałeś polecić WiFi po ESP8266, to dopiero uczę się pisania kodu bezpośrednio pod ten moduł. Komunikację za pomocą UART-a i komend AT sobie odpuściłem...

Jeśli jednak masz jeszcze inny "patent" (i nie jest on prockiem PIC18F z wbudowanym sterownikiem Ethernet) to chętnie posłucham. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 lip 2015, o 13:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 27 maja 2013
Posty: 562
Lokalizacja: Bydgoszcz
Pomógł: 23

No co tu dużo opowiadać, poprostu bym Ci polecał ATNEL-WIFI232-T

http://atnel.pl/atnel-wifi232-t.html

Zanim powiesz że nie i że dopiero sie uczysz UART to obejrzyj sobie to

https://www.youtube.com/playlist?list=PLtXXWLsA5QNhEfaFw5gVD-nwm5eG9slfB

Powiem Ci tak prosto, łatwo i przyjemnie a w tych filmach masz elegancko wyjasnione jak sobie je skonfigurować i ich uzywać.



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

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