|

楼主 |
发表于 2020-9-18 14:45:56
|
显示全部楼层
写多块调用SD_WriteMultiBlocks写入9600个字节,随机性的前2-4个字节会写错误数据。目测是4字节对齐问题,目前修改如下,可以写正确了。
__align(4) uint8_t SDIO_DATA_BUFFER[512]; //定义一个4字节对齐的数组
else
{
/* 此处存在疑问: 扇区个数如果写 count ,将导致最后1个block无法写入 */
//Status = SD_WriteMultiBlocks((uint8_t *)buff, sector << 9 ,SECTOR_SIZE, count);
//这里写入数据 有时候前2 - 4个字节会少数据
//Status = SD_WriteMultiBlocks((uint8_t *)buff, sector << 9 ,512, count + 1);
for(n = 0;n < count; n++)
{
memcpy(SDIO_DATA_BUFFER,buff+(n*512),512);
Status = SD_WriteBlock(SDIO_DATA_BUFFER, (sector << 9) + n*512 , 512);
/* SDIO工作在DMA模式,需要检查操作DMA传输是否完成 */
Status = SD_WaitWriteOperation();
if (Status != SD_OK)
{
return RES_ERROR;
}
}
}
不知道版主你是怎么解决这个问题的。 |
|