一SD卡介绍
1、SD卡
SD存储卡(Secure Digital Memory Card)是一种基于半导体快闪存储器的新一代高速存储设备。SD存储卡的技术是从MMC卡(MultiMedia Card格式上发展而来,在兼容SD存储卡基础上发展了SDIO(SD Input/ Output)卡,此兼容性包括机械,电子,电力,信号和软件,通常将SD、SDIO卡俗称SD存储卡
一张SD卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5 个部分。
存储单元是存储数据部件,存储单元通过存储单元接口与卡控制单元进行数据传输;
电源检测单元保证SD卡工作在合适的电压下,如出现掉电或上状态时,它会使控制单元和存储单元接口复位;
卡及接口控制单元控制SD卡的运行状态,它包括有8个寄存器;
接口驱动器控制 SD 卡引脚的输入输出。
驱动模式
SD卡有两种驱动模式:SPI模式与SDIO模式。它们所使用的接口信号是不同的。在SPI模式下,只会用到SD卡的4根信号线,即CS、DI、SCLK与DO(分别是SD卡的片选、数据输入、时钟与数据输出)。
传输模式
SD卡共支持三种传输模式:SPI模式(独立序列输入和序列输出),1位SD模式(独立指令和数据通道,独有的传输格式),4位SD模式(使用额外的针脚以及某些重新设置的针脚。支持四位宽的并行传输)。
本篇文章主要使用SPI方式进行验证,关于SPI介绍可以参考我之前的博客
、FATFS
FATFS 是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 组件的编写遵循ANSI C(C89),完全分离于磁盘 I/O 层,因此不依赖于硬件平台。它可以嵌入到资源有限的微控制器中,如 8051, PIC, AVR, ARM, Z80, RX等等,不需要做任何修改。
FATFS提供了以下文件访问函数:
f_open - 打开/创建文件 f_close - 关闭打开的文件f_read - 从文件中读取数据f_write - 将数据写入文件
f_lseek - 移动读/写指针,扩展大小 f_truncate - 截断文件大小
f_sync - 刷新缓存的数据f_forward - 将数据转发到流
f_expand - 为文件分配连续块 f_gets - 读取字符串
f_putc - 写一个字符 f_puts - 编写字符串 f_printf - 编写格式化字符串
f_tell - 获取当前读/写指针 f_eof - 测试文件结尾
f_size - 获取尺寸f_error - 测试错误
二.分析
1代码分析
1.1.SD卡写入文件名及写入内容
char SD_FileName[] = "hello.txt";
uint8_t WriteBuffer[] = "小小星亮晶晶 631907030123\n";
1.2.main函数
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_SPI1_Init();
MX_FATFS_Init();
MX_USART1_UART_Init();
HAL_UART_Receive_IT(&huart1,&aRxBuffer1,1); //enable uart
printf(" mian \r\n");
Get_SDCard_Capacity(); //得到使用内存并选择格式化
while (1)
{
WritetoSD(WriteBuffer,sizeof(WriteBuffer)); //写入SD卡
HAL_Delay(500);
WriteBuffer[0] = WriteBuffer[0] +10;
WriteBuffer[1] = WriteBuffer[1] +10;
write_cnt