ice845930 发表于 2019-7-16 20:14:05

SDIO驱动SD卡的写多块的问题

有个地方不是很明白,就是disk_write这里,写完之后为什么是调用SD_WaitReadOperation这个函数进行检查是否完成,而不是调用SD_WaitWriteOperation进行监测呢?
驱动文件上写的是用SD_WaitWriteOperation。
*
*          E - Programming Model (Selecting DMA for SDIO data Transfer)
*          ============================================================
*             Status = SD_Init(); // Initialization Step as described in section A
*
*             // SDIO Interrupt ENABLE
*             NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;
*             NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
*             NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
*             NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
*             NVIC_Init(&NVIC_InitStructure);
*             // DMA2 STREAMx Interrupt ENABLE
*             NVIC_InitStructure.NVIC_IRQChannel = SD_SDIO_DMA_IRQn;
*             NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
*             NVIC_Init(&NVIC_InitStructure);
*               
*             // Write operation as described in Section C
*             Status = SD_WriteBlock(buffer, address, 512);
*             Status = SD_WaitWriteOperation();
*             while(SD_GetStatus() != SD_TRANSFER_OK);
*
*             Status = SD_WriteMultiBlocks(buffer, address, 512, NUMBEROFBLOCKS);
*             Status = SD_WaitWriteOperation();
*             while(SD_GetStatus() != SD_TRANSFER_OK);


eric2013 发表于 2019-7-16 20:40:38

这个问题提的好,这么多年一直在用读操作完成,竟然也工作这么多年了:L

caicaptain2 发表于 2020-5-12 08:19:08

eric2013 发表于 2019-7-16 20:40
这个问题提的好,这么多年一直在用读操作完成,竟然也工作这么多年了

可能是现在的sd卡的速度都很快了,那个等待函数其实没什么用处。。。等同于NOP()而已。

eric2013 发表于 2020-5-12 08:40:06

caicaptain2 发表于 2020-5-12 08:19
可能是现在的sd卡的速度都很快了,那个等待函数其实没什么用处。。。等同于NOP()而已。

跟快慢没关系,是大批量数据读写稳定性的保证。

太重要了,是相当重要。

a515509429 发表于 2024-3-30 15:53:45

这个非常重要
页: [1]
查看完整版本: SDIO驱动SD卡的写多块的问题