乐鑫技术交流
直播中

李英

7年用户 1409经验值
私信 关注
[问答]

spi sd卡连续写入时会出0x109错误的原因?

idf版本ESP-IDF v4.2-dev-1304-gaeff546-dirty,芯片ESP32-WROVER-B
用spi连接sd卡,pin管脚用的是12131415,速度20M
挂载和基本的文件操作没有问题,但是在连续写入时(用的是i2s例程,大约每100ms左右写入10k byte)。
结果发现经常写了2~3M数据就出错了。尝试了更低的速度,结果变得更差。有时会在写了十几k就出错,问题可能出现在哪里?
receive message from the queue. have written 4194304 bytes to sd card.
and free heep size: 211848
E (44594) sdmmc_cmd: sdmmc_write_sectors_dma: sdmmc_send_cmd returned 0x109
E (44594) diskio_sdmmc: sdmmc_write_blocks failed (265)
receive message from the queue. have written 4194304 bytes to sd card.

回帖(1)

王燕

2024-6-19 16:43:47
0x109错误通常是由于SD卡在传输过程中出现错误。在您的情况下,可能的原因有以下几点:

1. **SD卡质量**:低质量或损坏的SD卡可能导致数据传输错误。尝试更换一张新的、高质量的SD卡。

2. **SPI速度**:虽然您已经尝试降低速度,但可能仍然存在不兼容的问题。尝试使用不同的SPI速度,例如10MHz或5MHz,看看是否有所改善。

3. **电源稳定性**:不稳定的电源可能会影响SD卡的性能。确保您的电源供应稳定,并且ESP32-WROVER-B模块的电源输入满足要求。

4. **SPI引脚连接**:检查SPI引脚(12, 13, 14, 15)的连接是否牢固,以及是否有任何可能的接触不良或短路。

5. **代码问题**:检查您的代码,确保在写入数据时没有逻辑错误。例如,确保在写入之前正确地初始化了SD卡,并且在写入过程中没有超出SD卡的容量。

6. **ESP-IDF版本**:您使用的是ESP-IDF v4.2-dev-1304-gaeff546-dirty版本,这是一个开发版本,可能存在一些未解决的问题。尝试升级到最新的稳定版本,看看问题是否仍然存在。

7. **I2S例程**:您提到使用的是i2s例程,但您的问题是关于SPI SD卡。请确保您没有将I2S和SPI混淆,因为它们是不同的接口。

8. **内存问题**:您提到了“free heap size”,如果ESP32的内存不足,可能会导致写入错误。尝试优化您的代码,减少内存使用,或者增加堆大小。

9. **SD卡文件系统**:检查SD卡的文件系统是否正确。如果文件系统损坏,可能会导致写入错误。尝试重新格式化SD卡。

10. **硬件问题**:如果以上方法都不能解决问题,可能是ESP32-WROVER-B模块本身存在硬件问题。尝试使用另一块模块,看看问题是否仍然存在。

综上所述,您需要逐一排查这些可能的原因,以找到导致0x109错误的根本原因。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分