Conectarea cardului SD la microcontroler, microtechnics, versiunea mobilă
Toate zilele bune! Astăzi vom vorbi despre cum să conectați un card de memorie SD la STM32 microcontroler.
S-ar părea că memoria este plină în controlere STM32F10x, de ce există încă în continuare, dar această impresie este înșelătoare) Aici, de exemplu, ar trebui să afișeze pentru a aduce o pereche de imagini diferite - format 320 * 240 - care este 76,800 pixeli, fiecare dintre acestea corespunzând la fel de mult ca 2 bytes. Deci, vom obține aproximativ 150 KB pe imagine. O mulțime de către standardele microcontroler, și nu faptul că două imagini diferite vor fi în măsură să se înghesuie în memoria sa Flash. Sau ar trebui să stocheze cantități mari de informații, datele de la orice senzor, de exemplu. Da, astfel că au fost disponibile aceste date, după o pană de curent. Aici este util pentru noi, iar memoria externă. Și soluția perfectă este un card de memorie SD sau MMC. Apropo, în acest articol vom efectua experimente pe card micro SD.
Pentru a începe cu câteva cuvinte de pe cartela de memorie în sine, sau mai degrabă a atribuirii codului PIN. Se pare toate de afaceri, după cum urmează:
Deci, ce avem aici? Ei bine, vom vedea imediat că concluziile pe care le are la opt piese. Alocarea pinilor următoarele (de la stânga la dreapta):
SPI-Mode Coloana ne face aluzie la faptul că cardul SD comunică la microcontroler folosind interfața SPI. DAR! Vom merge alt mod 😉 lucru este că STM32 sunt la bord gata pentru modulul periferic este un card de memorie, și se numește SDIO.
În general, interacțiunea cu carduri de memorie este de a le transfera la anumite comenzi. Unele comenzi necesită un argument, unele nu sunt. Echipele pot fi găsite în documentația oficială pentru card specifice. Deci, asta e un built-in SDIO permite de a simplifica considerabil procesul de comandă, și într-adevăr procesul de lucru cu carduri de memorie externe. De exemplu, aici SDIO_CMD înregistrați - acolo am doar pur și simplu scrie codul de comandă, pe care dorim să transferați harta. Sau aici e starea registru SDIO_STA - sunt la fel de multe ca 24 de steagul pe toată lumea, adică pentru un număr mare de evenimente.
De altfel STM place mai profund și documentare pe toată chestia asta. Aici, de exemplu, o descriere detaliată a inițializării pentru carduri de memorie SD (similar cu toate descrise pentru alte tipuri de cartele):
Ei bine, de fapt, este timpul pentru a trece la exemplul practic. Fiddle-ka Standard periferic Library.
Notă modul în SPL este pus în aplicare la comenzile de pe cartela de memorie. În acest scop, se folosește o SDIO_CmdInitTypeDef structură specială. În SDIO_CmdIndex introduceți codul de comandă în câmpul SDIO_Argument - argumentul, de asemenea, completați celelalte câmpuri. Rămâne așa cum este în datele împinge micro SD card 😉 Și pentru aceasta am pregătit funcția:
SDIO_SendCommand (SDIO_CmdInitTypeDef * SDIO_CmdInitStruct)
Argumentul a trecut la ea ca doar aceeași structură am creat. Pentru a înregistra date pe o funcție - SDIO_WriteData (uint32_t de date). După apelarea acestei funcții, datele vor fi într-un registru dedicat pentru acest lucru - SDIO_FIFO.
Acesta este modul în care lucrați cu modulul SDIO în STM32F10x)
Acum am ajuns la practica în cele din urmă. Din nou, voi lucra cu placa Mini STM32, ca chinezii sunt bune la ea nedumerit instalarea unui card de memorie slot pentru micro SD. Aici este schema electrică pentru conectorul de card la microcontroler:
Pentru a scrie un program folosiți exemplul pregătit pentru Keil'a - va scoate cele două fișiere care implementează ceva de genul șoferului să lucreze cu carduri - este fișiere și sdcard.h sdcard.c. Crearea unui proiect nou, care se agață de aceste fișiere, dar, de asemenea, desigur, CMSIS și fișiere SPL. Aici este proiectul finalizat, în care a fost deja adăugat totul - se poate scrie doar) codul principal (funcția)
În sdcard.c fișier implementat diverse funcții pentru a lucra cu un card de memorie, suntem acum este singura lor utilizare 😉 cod de scriere! De exemplu, pentru a scrie micro SD 512 octeți de date de test, apoi încercați să-și asume lor:
Vă rugăm să rețineți că suporturile de card SD de înregistrare în blocuri de 512 octeți.
Dacă vom rula programul sub debugger, veți vedea că datele citite corespund = scrise) Așa că experimentul poate fi considerat un succes. Acest lucru se încheie astăzi, veți vedea în curând!