Potrzebuję sterownika SD_SPI dla FATFS dla tlsr8258. Jeśli ktoś taki posiada, mógłby się nim podzielić? @ElektrodaBot AI: Jakiego środowiska programistycznego lub SDK używasz z TLSR8258 (np. Telink SDK w wersji...
Wstępna ocena dostępnych informacji - Pytasz o sterownik SD-over-SPI (SD_SPI), który podłącza się do FatFs na Telink TLSR8258. - Odpowiedziałeś "3" na pytanie SDK - zakładam, że korzystasz z Telink TLSR8 (alias Kite) SDK v3.x i Telink IDE, ale potwierdź dokładny tag / build SDK. - Potwierdziłeś, że próbowałeś już czegoś i miałeś problemy.
Jeśli jesteś otwarty na gotowy punkt wyjścia, poniżej znajduje się kompaktowy, zorientowany na TLSR8258 klej SPI/SD + FatFs, który ma odpowiednie sekwencjonowanie i abstrakcję HAL, dzięki czemu wystarczy podłączyć tylko trzy lub cztery funkcje niskiego poziomu do zestawu SDK.
Bezpośrednia odpowiedź na pytanie - Nie ma publicznego, gotowego sterownika TLSR8258 SD_SPI + FatFs, który mogę dołączyć, ale możesz użyć poniższego rusztowania kodu. Jest on skonstruowany do pracy z TLSR8258 (SPI mode 0, manual CS, slow init then high-speed) i czysto mapuje do FatFs diskio. - Wklej te trzy pliki do swojego projektu, dostosuj kilka makr HAL do funkcji SPI i GPIO SDK, ustaw piny i powinno działać przy pierwszym uruchomieniu ze standardową kartą SD 3,3 V.
Pliki: - tlsr8258_sdspi_hal.h - mała warstwa HAL mapowana do Telink SDK - sdspi_sdcard.c/.h - protokół SD-over-SPI (CMD0/CMD8/ACMD41/CMD58/...) - diskio_tlsr8258_sdspi.c - klej FatFs dla pdrv 0
Szczegółowa analiza problemu Kluczowa specyfika TLSR8258 i wymagania dotyczące karty SD: - Tryb SPI: SD SPI używa CPOL=0, CPHA=0 (tryb 0). - Prędkość początkowa: 100-400 kHz, dopóki ACMD41 nie opuści stanu bezczynności; dopiero wtedy podnieś zegar SPI (np. 8-12 MHz, w ramach integralności sygnału płyty). - 74+ fałszywych zegarów przed CMD0 z wysokim CS (wyślij 10×0xFF). - CRC: tylko CMD0 (0x95) i CMD8 (0x87) wymagają ważnego CRC, gdy CRC jest wyłączone na karcie; inne mogą być fikcyjne 0xFF. - Obsługa zajętości: po zapisie MISO pozostaje niskie (zajęte). Musisz odpytywać do 0xFF. - Adresowanie: SDHC/SDXC używają adresowania blokowego (LBA); SDSC używa adresowania bajtowego. Obsługa za pomocą bitu OCR/CCS. - Zasilanie i sprzęt: czyste 3,3 V, krótkie przewody, solidne uziemienie; podciąganie zwykle obecne na przerwaniu; ręczny CS (GPIO).
Poniżej znajduje się kompaktowe rusztowanie sterownika. Jest on zgodny z sekwencją ChaN, ale dostosowany do nazewnictwa TLSR8 i typowych idiomów Telink SDK. Tam, gdzie twój SDK się różni, dotknij tylko sekcji HAL.
- Plik: tlsr8258_sdspi_hal.h -
Kod: text
Zaloguj się, aby zobaczyć kod
- Plik: sdspi_sdcard.h -
Kod: text
Zaloguj się, aby zobaczyć kod
- Plik: sdspi_sdcard.c -
Kod: text
Zaloguj się, aby zobaczyć kod
- Plik: diskio_tlsr8258_sdspi.c -
Kod: text
Zaloguj się, aby zobaczyć kod
Uwagi dotyczące integracji: - ffconf.h: zapewnij FF_FS_READONLY=0 (jeśli potrzebujesz zapisów), FF_USE_MKFS=1 jeśli formatowanie, FF_FS_EXFAT według potrzeb. - diskio.c: zastąp lub dodaj ten plik i włącz pdrv w kleju FatFs. - Threading: jeśli używasz zadań OS, strzeż SPI za pomocą muteksu; FatFs obsługuje FF_FS_REENTRANT. - Elektryczne: SD przy 3,3 V; utrzymuj krótkie ścieżki, dodaj 100 nF + 1 µF odsprzęgające w pobliżu gniazda. - Card Detect (CD) i Write Protect (WP): opcjonalne GPIO; ujawnij przez disk_status(), jeśli jest podłączony.
Bieżące informacje i trendy - Większość Porty SD_SPI + FatFs na procesorach MCU (w tym tych bez natywnego SDIO) są dokładnie zgodne z tą sekwencją i działają niezawodnie z częstotliwością 8-12 MHz SPI po uruchomieniu. - Na małych SoC BLE, takich jak TLSR8258, SPI DMA nie jest wymagane do poprawnego działania; sterownik polled jest odpowiedni dla dziesiątek do setek kB/s. Jeśli później będziesz potrzebować większej przepustowości, rozważ operacje wieloblokowe (już zaimplementowane) i większą pamięć podręczną FatFs (FF_MIN_SS/FF_MAX_SS=512, większy obszar WORK dla mkfs).
Wspierające wyjaśnienia i szczegóły Dlaczego to rusztowanie "po prostu działa": - Ściśle przestrzega uproszczonej specyfikacji warstwy fizycznej SD dla inicjalizacji trybu SPI. - Poprawnie obsługuje adresowanie SDSC vs SDHC poprzez OCR/CCS i ustawia CMD16 tylko w v1/MMC. - Przestrzega czasu zajętości przy zapisie i wykorzystuje transfery wieloblokowe z odpowiednimi tokenami zatrzymania.
Połączenia interdyscyplinarne - Integralność zasilania (sprzętowa) bezpośrednio wpływa na niezawodność protokołu. Jeśli inicjalizacja zawiesza się na ACMD41 lub widzisz fałszywe bity R1, sprawdź odbicie masy i odsprzęganie za pomocą oscyloskopu. - Taktowanie oprogramowania układowego (opóźnienia, wait_ready) musi być zgodne z zegarem SPI i sysclk; nieprawidłowe opóźnienia wyglądają jak "losowe" timeouty.
Aspekty etyczne i prawne - FatFs jest open source (ChaN), typowo w stylu BSD; nagłówki licencji powinny pozostać nienaruszone. - Specyfikacje SD są dostępne publicznie w uproszczonej formie; nie kopiuj zastrzeżonego tekstu specyfikacji.
Praktyczne wskazówki - Zacznij od wolnego SPI, potwierdź sekwencję CMD0 → CMD8 → ACMD41 → CMD58 za pomocą analizatora logicznego. - Dopiero po zobaczeniu OCR.HCS i wyjściu z trybu bezczynności, przełącz się na szybkie SPI. - Zawsze wysyłaj końcowe 0xFF po wysokim CS, aby zwolnić MISO na niektórych kartach. - Jeśli pojawi się FR_NO_FILESYSTEM, spróbuj f_mkfs z buforem roboczym ≥ 4 KB dla większych kart.
Możliwe zastrzeżenia lub dodatkowe uwagi - Nazwy funkcji Telink SDK różnią się nieznacznie w zależności od wersji SDK 3.x. Jeśli spi_write_read_byte lub spi_master_init mają różne sygnatury w drzewie, dostosuj tylko makra HAL - nie dotykaj logiki SD.
Sugestie do dalszych badań - Jeśli później będziesz potrzebować wyższej przepustowości: rozważ dostrojone dzielniki SPI, odczyty seryjne z DMA (jeśli są dostępne w SDK dla trybu master) i większą pamięć podręczną sektorów FatFs. - Aby zniwelować zużycie, utrzymuj pliki wstępnie przydzielone i zminimalizuj częste f_sync przy niewielkich zapisach.
Krótkie podsumowanie - Dostarczyłem kompaktowy, skoncentrowany na TLSR8258 sterownik SD-over-SPI i klej FatFs diskio. - Zmapuj HAL w tlsr8258_sdspi_hal.h do swojego SDK v3.x, ustaw piny i powinno działać. - Jeśli się nie powiedzie, przechwyć ślady SPI dla CMD0/CMD8/ACMD41, a szybko wskażemy problem.
Pytania do użytkownika 1) Proszę o potwierdzenie dokładnego SDK/IDE: Telink TLSR8 SDK version/build (twoje "3" = v3.x?), oraz kompilator. 2) Które piny zostały wyprowadzone dla SCK/MISO/MOSI/CS? Jakieś piny CD/WP? 3) Co dokładnie zawiodło w poprzedniej próbie: utknięcie w CMD0/CMD8/ACMD41 lub błędy obsługi plików (FR_NOT_READY, FR_NO_FILESYSTEM itp.)? 4) Czy możesz udostępnić krótki zapis z analizatora logicznego inicjalizacji (CMD0→CMD8→ACMD41→CMD58) i ustawienia zegara SPI?
Dołącz te szczegóły, a ja dostosuję HAL do twojego wariantu SDK lub pomogę w debugowaniu śladów.
Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.