Mini64SE R6 + sdcard Coocox Fatfs spi
Доброго дня. Досить давно хотів під’єднати до своїх розробок на мікроконтролерах такий невичерпний засіб зберігання інформації як sd карта. Для цього сьогодні ми використаємо Mini64SE R6 та кардхолдер sd карти.
Під’єднуємо карту до SPI1 у наступному порядку:
PA4-CS
PA5-SCLK
PA6-MISO
PA7-MOSI
3.3v та GND до відповідних шин живлення + фільтруючий завади конденсатор на 47 uF розміщений ближче до карти.
Виводи MOSI, MISO, CS підтягнуті до +3.3v через 10К резистори
Далі вирішив пошукати готовий проект, так як до того не мав справу с FATFS.
Знайшов такий проект на перший погляд він повністю відповідав моїм потребам, але це було тільки на перший погляд згодом мені довелося з самого початку під’єднувати до нього FATFS . Плюс до того він написаний під CooCox я вирішив спробувати його в роботі, так як досі не вибрав собі зручне середовище програмування для stm32.
Йдемо на сайт http://www.coocox.org/Downloads.htm та скачуємо CoIDE, встановлюємо його.
Далі скачуємо GCC ARM та також встановлюємо.
В CoIDE в вкладці Progect>Select toolchain path вказуємо шлях до компілятора
в моєму випадку це C:\Program Files\GNU Tools ARM Embedded\4.7 2014q2\bin
Скачуємо проект sd-test new
#include "stm32f10x_conf.h" #include "ff.h" char buff[1024]; // буфер для читання / запису int main(void) { SysTick_Config(SystemCoreClock /100);//10ms FRESULT result; // змонтувати диск FATFS FATFS_Obj; disk_initialize (0); result = f_mount(0, &FATFS_Obj); if (result != FR_OK) { //printf("Помилка монтування диска %d\r\n", result); } // Рахуемо файли в кореневому каталозі DIR dir; FILINFO fileInfo; int nFiles = 0; result = f_opendir(&dir, "/"); if (result == FR_OK) { while (((result = f_readdir(&dir, &fileInfo)) == FR_OK) && fileInfo.fname[0]) { nFiles++; } } f_closedir(&dir); // відкриваємо файл readme.txt для чтання FIL file; UINT nRead, nWritten; result = f_open(&file, "readme.txt", FA_OPEN_EXISTING | FA_READ); if (result == FR_OK) { f_read(&file, &buff, 1024, &nRead); f_close(&file); } // створюємо файл write.txt result = f_open(&file, "write.txt", FA_CREATE_ALWAYS | FA_WRITE); if (result == FR_OK) { f_write(&file, &buff, nRead, &nWritten); f_close(&file); } while(1) { } } void SysTick_Handler(void) { disk_timerproc (); // Тактування часових затримок FatFs }
Алгоритм простий монтуємо файлову систему > читаємо вміст файла readme.txt в буфер > пишемо буфер в файл write.txt. На цьому все.