Skocz do zawartości

Pomocna odpowiedź

Co do komunikacji i zapisu na dysku to jeśli nie wiesz jak to zrobić to poszukaj w necie rozwiązań ot choćby to  https://controllerstech.com/stm32-usb-host-msc/.

   Projekty są omawiane krok po kroku i można je ściągnąć.Najważniejsze by się nie zniechęcać.Wszak wchodząc w tematy mikrokontrolerów  wchodzisz na teren w dużej części nieznany z którym należy się oswoić.Mokrokonrtolery weryfikują wiedzę jaką posiadamy,sposób myślenia,odpowiadają na pytanie czy jesteśmy logiczni.Z Controllertech  należy czerpać pełnymi garściami.Wypróbuj rozwiązania i dostosuj do własnych potrzeb.Jak dobrze  dostosujesz program do swoich potrzeb np. napiszesz polecenie by dane były lokowane w arkuszu kalkulacyjnym to pół roboty z obsługą danych na dzień dobry odpada.

Na tym forum wypowiadało się wielu na temat pomocy.Właśnie to uczyniłem i jestem z tych co raczej dają wędkę a nie rybę.W internecie znajdziesz mnóstwo rozwiązań i tam Cię kieruję a jedno rozwiązanie podałem jak na tacy.Mam nadzieję,że to doceniasz.Rozwiązań raczej szukaj na stronach amerykańskich bo wszyscy publikują właśnie tam.Musisz sam dojść do rozwiązania problemu tak jak większość na tym forum.

15 godzin temu, szymonw napisał:

Co do komunikacji i zapisu na dysku to jeśli nie wiesz jak to zrobić to poszukaj w necie rozwiązań ot choćby to  https://controllerstech.com/stm32-usb-host-msc/.

Niedawno próbowałem zrobić zapis na USB właśnie zgodnie z tym tutorialem. No i niestety nie działa. Nie wiem, czy problem jest z z moimi pendrive'ami - mam dwa różne egzemplarze ze złączami micro USB, niby OTG (ale chyba nie jest jednoznaczne?), z Nucleo - F764ZG to jedyne z OTG, jakie posiadam - czy robię coś źle.

Postaram się poszukać jakiegoś poradnika z zapisem na kartę SD, bo to mnie bardziej teraz interesuje, czas już trochę goni, a ja prawie stoję w miejscu.

Choć i tak dzięki Waszym poradom wiele się nauczyłem i wiem, jak nierealne były moje pierwotne założenia z transmisją bezprzewodową.

(edytowany)

Bezprzewodowa transmisja nie jest nierealna, taki BLE "2 megabity" wykręci:

Choć tutaj lepszym byłby klasyczny BT i profil SPP - czyli serial. Wybrany moduł oczywiście powinien zapewniać odpowiednio szybki UART do komunikacji pomiędzy STM.

Edytowano przez matsobdev

Na 100% masz dobrze skonfigurowaną płytę? Przeczytaj  UM1974 . Szczególnie polecam rozdział 5 a nade wszystko rozdział 6.

 

Dnia 11.11.2022 o 17:26, radek04 napisał:

Akurat na F7 idzie to bardzo szybko.

A racja, nie wiem czemu mi się ubzdurało, że to F103.

Dnia 11.11.2022 o 17:26, radek04 napisał:

DMA będzie szybsze od IT?

Zależy od prędkości, może nie być szybsze ale z pewnością mniej obciążające CPU w każdym wypadku.

Dnia 11.11.2022 o 17:26, radek04 napisał:

Już wcześniej wspominałem, że CubeIDE ma jakiś problem z UART_DMA na F7.

A nie ma opcji, że to napisać bez HALa?

1 minutę temu, kaworu napisał:

A nie ma opcji, że to napisać bez HALa?

Wzbraniam się przed tym, ale jeśli będzie trzeba...
Kiedyś pisałem z użyciem SPL.

1 godzinę temu, szymonw napisał:

Na 100% masz dobrze skonfigurowaną płytę? Przeczytaj  UM1974 . Szczególnie polecam rozdział 5 a nade wszystko rozdział 6.

Wiesz, na 100% to nie wiem nawet, czy Kopernik już umarł. Ale mam spore przeświadczenie, że wszystko z płytką jest OK. Inne programy działają. Poza tym sprzętowo mam wszystko domyślnie, czyli przystosowane do obsługi dołączonych peryferiów. Masz coś konkretnego na myśli?

Obecnie walczę (znów) z SD_SPI oraz SD_MMC. W obu przypadkach kończy się na popranym zamontowaniu karty. Nie mogę nic z niej odczytać, ani na nią zapisać. Testowane 2 karty uSD, 2 różne moduły kart, Nucleo-F7 oraz Nucleo-F4 (tylko tryb SPI).

Istotą poprawności działania USB jest właściwe ustawienie zworek .USB musi być zasilone z dobrego źródła prądowego.

6.4 Zasilanie i wybór mocy

Zasilanie jest dostarczane z komputera głównego przez kabel USB lub z zewnętrznego źródła: VIN (7 V-12 V), E5V (5 V) lub piny zasilania +3,3 V na CN8 lub CN11. W przypadku, gdy do zasilania płytki Nucleo-144 wykorzystywane jest napięcie VIN, E5V lub +3,3 V, źródło to musi spełniać normę EN-60950-1: 2006+A11/2009 i musi być Safety Extra Low Voltage (SELV) o ograniczonej mocy.

W przypadku, gdy zasilanie wynosi +3,3 V, ST-LINK nie jest zasilany i nie może być używany.

 

 

 

(edytowany)

Dużo pomysłów i dużo koncepcji nawet różnych od początkowych założeń. Pod koniec dnia dane pewnie wylądują na komputerze celem obróbki. Zwykły serial po USB nie będzie się nadawał? Mam na myśli czy kabelek może być pociągnięty. CoolTerm do zapisu i potem zrobić z danymi co się chce albo zrobić tak, alby się wyświetlało na bieżąco. Tutaj to nawet apka na Androida może być. Jeśli nie idzie z STM, to może coś innego? Chyba, że jego użycie to konieczność. A tak na szybko, lamerski kod pod Pico:

#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/vreg.h"
#include <unistd.h>

int main() {
    vreg_set_voltage(7);
    set_sys_clock_khz(48000, true);
    stdio_init_all();
	stdio_set_translate_crlf(&stdio_usb, false);
	uint64_t i = 0;
	uint64_t j = 0;
	uint64_t k = 0;
	uint64_t l = 0;
	uint64_t m = 0;
	uint64_t n = 0;
    while (true) {
		write(1, &i, 8);
		write(1, &j, 8);
		write(1, &k, 8);
		write(1, &l, 8);
		write(1, &m, 8);
		write(1, &n, 8);
		i++;
		j++;
		k++;
		l++;
		m++;
		n++;
        sleep_us(1700);
    }
}

Działa i tak na pierwszy rzut oka dane kupy się trzymają przy dużo wyższych transmisjach niż 24000 B/s

Edytowano przez matsobdev
(edytowany)

Nie ma opcji z kablem. Obiekt będzie ruchomy, dużo danych, potrzebny szybki zapis.
Kolejny dzień walczę z SD. Próbowałem na F1, F4 i F7. Docelowo musi być F7. Próbowałem z SPI, MMC 4-bit i MMC 1-bit. Jedyne, co mi zadziałało, to prosty przykład na Arduino. Z STM ani razu nie udało mi się osiągnąć więcej, niż sprawdzenie pojemności i wolnego miejsca na karcie. Ani odczyt, ani zapis nie działa. Możliwe, że to problem z biblioteką HAL lub nową wersją CubeIDE. Resztę kodu mam w HAL i wolałbym tego nie zmieniać, ale jeśli nie da się inaczej, to wszystko zrobię na SPL. Ludzie wrzucają swoje przykłady z HAL, które im działają, a u mnie za nic nie chce ruszyć. Powoli zaczynam tracić nadzieję.

Edit 1: Pierwszy sukces z SPI na F1. Spróbuję to samo zrobić na F7.

Edit 2: No i faktycznie na F7 ten sam kod nie działa (oczywiście zmieniłem piny i numery odpowiednich interfejsów, ale główne elementy są takie same). Ewidentnie jest jakiś błąd w oprogramowaniu (driver/biblioteki/inne) dotyczący serii F7, a przynajmniej mojego Nucleo F746.

Edytowano przez radek04
(edytowany)
24 minuty temu, Elvis napisał:

Skoro musi być radiówka, ale niekoniecznie BT/WiFi to może coś takiego: https://botland.com.pl/moduly-radiowe/1687-modul-radiowy-nrf24l01-24ghz-transceiver-tht-czarny-5903351242721.html ?

Nawet mam taki moduł w domu. A to wyrobi, jeśli chodzi o moje wymagania szybkości zapisu?
Nie musi być radiówka, może być też zapis na kartę. Ale przewodowa transmisja faktycznie odpada.

Edytowano przez radek04

No dobrze.Widzę,że utknąłeś i nie ruszysz z miejsca.Zobacz jak to jest u mnie .Pierwsze zdjęcie pokazuje cały moduł.Najważniejsze abyś miał porządny MicroSD Card Adapter taki co to jest do kupienia za 3,5zł.Dlaczego to takie ważne  bo musisz mieć pewność jeśli idzie o  połączenia.Na drugim zdjęciu widzisz konfigurację  SPI i tu zaznaczamy tak jak widać na zdjęciu.Szybkość transmisji  u mnie jest ustawiona jest na 21MHz i aby to zmienić trzeba kliknąć w  liczbę po prawej stronie prescalera. Na trzecim konfigurację FATFS w którym jak widzisz jest podświetlony Max SS(Sect...) zmieniamy na 4096.Po prawej stronie ioc jest procesor i zaznaczone wybrane piny w projekcie.SCK.MISO,MOSI są oczywiste natomiast jakoś tak jest,że nikt nie przykłada się do pinu NSS czyli do CS na adapterze.Jest to główna przyczyna,że na karcie się nie zapisuje.Przed wygenerowaniem kodu w zakładce Menager project->code generator  odznaczamy  generate periheral initialization...  Biblioteki do obsługi karty SD w  znajdziesz na stronie https://www.micropeta.com/video29

Po implementacji bibliotek  otwieramy fatfs.c i zmieniamy #include "stm32f1xx_hal.h" na #include "stm32f4xx_hal.h" jeśli używamy procesora z rodziny STM32F4,a jeśli używamy STMF7 to #include "stm32f7xx_hal.h"  etc.Tak jak w opisie na stronie. Ale to nie koniec bo w bibliotece fatfs.h trzeba jeszcze sprawdzić czy  pin NSS  to ten sam co jest zapisany w tej bibliotece inaczej mówiąc odnajdujemy

#define    SD_CS_PORT            GPIOA
#define SD_CS_PIN            GPIO_PIN_4

jeśli nie to zmieniamy w bibliotece na taki jaki jest przypisany jako NSS.

Następnie na stronie którą podałem powyżej przechodzimy do Code modification i dokonujemy zmian zgodnie z tym co jest tam zapisane.

Program w main jest jeszcze niżej  i tylko trzeba dokonać implementacji.Powodzenia - u mnie działa i na F1 i na F4.Daj znać jak uruchomisz.

 

IMG_0965.thumb.JPG.e290f46b5670e4da271cefacabe05a39.JPG

SPI.thumb.jpg.382ce624e0b8902c68c0b764d0794787.jpg

 

FATFS.thumb.jpg.7d5b5dfa3bcb603f0ec2d0ff5e48285c.jpg

 

 

(edytowany)

To pierwszy projekt, w którym widzę, by ktoś ustawiał Hardware NSS Output Signal. A widziałem ich już naprawdę sporo... Zwykle ludzie ustawiają po prostu jakiś pin jako GPIO_Output i do niego podłączają CS. Nie wiem, czy to robi różnicę, ale zrobię po Twojemu.

Dzięki za pomoc, zaraz go sprawdzę na swoim F7. Moduł SD mam identyczny.

Edytowano przez radek04

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...