Mini64SE R6 + sdcard Coocox Fatfs spi

Доброго дня. Досить  давно хотів під’єднати до своїх розробок на мікроконтролерах такий невичерпний засіб зберігання інформації як sd карта. Для цього сьогодні ми використаємо Mini64SE R6 та кардхолдер sd карти.

sdcard

 

Під’єднуємо карту до 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. На цьому все.

Залишити відповідь