37.1. SPI操作SDCARD
37.1.1. 概述
该实例工程展示了使用SPI接口读写SD卡。
37.1.2. 硬件设置
SPI引脚 根据板子型号查看具体信息
SPI引脚对应好SD卡(模块)引脚
37.1.3. 注意事项
该实例工程依赖SPI组件和DMA管理器组件,需要进行使能该组件。
考虑到各类SD卡兼容性,SPI sdcard库中的写操作中,有些SD卡需要进行写等待延时。移植时可以参考common/adapt/spi_sd_adapt.c, 需要注意以下三点:
1.内部延时默认100us,如果需要改其他延时可以通过重新定义SPI_SD_DELAY_DEFAULT_US宏
2.如果不需要该写等待延时, 可以把sdcard_spi_init API的传参的结构体成员delay_ms和delay_us置为NULL。或者SPI_SD_DELAY_DEFAULT_US宏定义为0
3.如果需要该写等待延时, 并且是在RTOS环境下,建议sdcard_spi_init初始化API在任务中调用,并且传参的结构体成员delay_ms和delay_us赋值为RTOS的任务延时API,比如freertos的vTaskDelay
37.1.4. 运行现象
确认硬件无误后,工程正确运行后,串口终端会输出如下信息:
[spi_sdcard] SPI CLK frequency:400000 Hz
[spi_sdcard] SPI CLK frequency:40000000 Hz
SD Card initialization succeeded
Card Info:
-----------------------------------------------
Card Size in GBytes: 14.84GB
Block count: 31116288 block
Block Size: 512 Bytes
-----------------------------------------------
sdcard wiite/read verify ....
sd block_31116268 write PASSED
sd block_31116268 read PASSED
SD write-read-verify block 0x01dacbec PASSED
sd block_31116269 write PASSED
sd block_31116269 read PASSED
SD write-read-verify block 0x01dacbed PASSED
sd block_31116270 write PASSED
sd block_31116270 read PASSED
SD write-read-verify block 0x01dacbee PASSED
sd block_31116271 write PASSED
sd block_31116271 read PASSED
SD write-read-verify block 0x01dacbef PASSED
sd block_31116272 write PASSED
sd block_31116272 read PASSED
SD write-read-verify block 0x01dacbf0 PASSED
sd block_31116273 write PASSED
sd block_31116273 read PASSED
SD write-read-verify block 0x01dacbf1 PASSED
sd block_31116274 write PASSED
sd block_31116274 read PASSED
SD write-read-verify block 0x01dacbf2 PASSED
sd block_31116275 write PASSED
sd block_31116275 read PASSED
SD write-read-verify block 0x01dacbf3 PASSED
sd block_31116276 write PASSED
sd block_31116276 read PASSED
SD write-read-verify block 0x01dacbf4 PASSED
sd block_31116277 write PASSED
sd block_31116277 read PASSED
SD write-read-verify block 0x01dacbf5 PASSED
sd block_31116278 write PASSED
sd block_31116278 read PASSED
SD write-read-verify block 0x01dacbf6 PASSED
sd block_31116279 write PASSED
sd block_31116279 read PASSED
SD write-read-verify block 0x01dacbf7 PASSED
sd block_31116280 write PASSED
sd block_31116280 read PASSED
SD write-read-verify block 0x01dacbf8 PASSED
sd block_31116281 write PASSED
sd block_31116281 read PASSED
SD write-read-verify block 0x01dacbf9 PASSED
sd block_31116282 write PASSED
sd block_31116282 read PASSED
SD write-read-verify block 0x01dacbfa PASSED
sd block_31116283 write PASSED
sd block_31116283 read PASSED
SD write-read-verify block 0x01dacbfb PASSED
sd block_31116284 write PASSED
sd block_31116284 read PASSED
SD write-read-verify block 0x01dacbfc PASSED
sd block_31116285 write PASSED
sd block_31116285 read PASSED
SD write-read-verify block 0x01dacbfd PASSED
sd block_31116286 write PASSED
sd block_31116286 read PASSED
SD write-read-verify block 0x01dacbfe PASSED
SD write-read-verify reach the total count:19 PASSED!!!!
sdcard wiite/read speed test....
SD write-read-verify block range 0x01dacbec-0x01dacbff PASSED
Write Speed: 2532.18KB/s, Read Speed: 3021.68KB/s
Test completed, PASSED