[C] 纯文本查看 复制代码 void xTaskFlashTest( void * pvParameters)
{
int32_t iTime1, iTime2;
printf("正在擦除整个芯片\r\n");
iTime1 = xTaskGetTickCount(); /* 记下开始时间 */
sf_EraseChip();
iTime2 = xTaskGetTickCount(); /* 记下结束时间 */
printf("擦除串行Flash完成!, 耗时: %dms\r\n", iTime2 - iTime1);
while(1)
{
}
} 今天在调试W25Q128时候,开了一个任务用来测试擦写速度,任务优先级为1,按照历程上的现象SPI分频8的时候应该在50S左右擦完,
但是我在任务中擦除很快就擦完了,记录的时间是1600ms左右,再次复位就卡死(实则SPI在等待空闲位,因为任务调度前有读取ID的操作),后来和历程
一起测试了感觉是任务切换到导致的,就在擦除的时候加入了调度锁擦除正常了,但是还是不太清楚具体原因,是因为在擦除的时候任务切换导致读空闲
寄存器值没读到导致的么
[C] 纯文本查看 复制代码 static void sf_WaitForWriteEnd(void)
{
sf_SetCS(0); /* 使能片选 */
bsp_spiWrite1(CMD_RDSR); /* 发送命令, 读状态寄存器 */
while((bsp_spiRead1() & WIP_FLAG) == SET); /* 判断状态寄存器的忙标志位 */
sf_SetCS(1); /* 禁能片选 */
}
|