GD32303CEVAL的SD卡驱动无法再Freertos中正常使用

[复制链接]
3689|19
 楼主| wimimi 发表于 2024-5-13 11:38 | 显示全部楼层 |阅读模式
在粿机中使用sd_block_read/sd_block_write读写正常
下图是进入rtos前的粿机程序


进入rtos后读写时产生错误,产生两种错误1是SD_CMD_RESP_TIMEOUT,这个错误在写的时候产生,二是SD_COM_CRC_ERROR,这个错误在读的时候产生,rtos中也不是完全无法读写,有小概率可以正常读写

在手册中我找到下面内容
这是程序检测错误时的依据,是sd卡响应相关的寄存器r1。检测到使用CMD16时产生命令响应超时错误
 楼主| wimimi 发表于 2024-5-13 11:43 | 显示全部楼层
图片在帖子发不出来在评论里发代码
int main()
{
        char str[50] = "";
sd_error_enum sd_error;
        nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0);
        nvic_irq_enable(SDIO_IRQn, 0, 0);
        gpio_config();
        uart_config();
        tim7_init();
        gd_eval_lcd_init();
        sd_config();
                                sd_error=sd_block_write(buff_write, 100*512, 512);
                        printf("W:%d\t",(int)sd_error);
                        sd_error=sd_block_read(buff_read, 100*512, 512);
                        printf("R:%d\t",(int)sd_error);
        FreeRtos_Init();

        while (1)
        {
        }
}


void StartDefault_task(void *pvParameters)
{
    lcd_line_info info = {0};
                                        sd_error_enum sd_error;
    uint32_t index = 0;
    int time = 0;
    KeyInit();
    //xTimerStart(hkeyTimer,0);
    for (;;)
    {
                        portENTER_CRITICAL();
                        sd_error=sd_block_write(buff_write, 100*512, 512);
                        printf("rtosW:%d\t",(int)sd_error);
                        sd_error=sd_block_read(buff_read, 100*512, 512);
                        printf("rtosR:%d\t",(int)sd_error);
                        portEXIT_CRITICAL();
      vTaskDelay(500);
    }
}
6863066418ba4b2464.png
埃娃 发表于 2024-5-15 22:05 | 显示全部楼层
裸机正常的话就是程序有问题啊
4c1l 发表于 2024-6-30 23:29 | 显示全部楼层
可能是由于任务调度引起的时序问题或资源竞争问题
清芯芯清 发表于 2024-8-20 15:10 | 显示全部楼层
在GD32303CEVAL微控制器上使用FreeRTOS时,如果SD卡驱动无法正常工作,可能是任务优先级和调度问题
twinkhahale 发表于 2024-8-20 16:18 | 显示全部楼层
FreeRTOS的任务调度可能会影响SD卡驱动的执行。确保SD卡驱动任务的优先级设置合理,并且没有其他高优先级任务干扰其执行
suiziq 发表于 2024-8-20 17:20 | 显示全部楼层
SD卡驱动可能需要在中断或临界区中执行某些操作。确保正确处理中断和临界区,避免任务切换导致的数据不一致或竞争条件
teaccch 发表于 2024-8-20 18:25 | 显示全部楼层
确保SD卡驱动所需的资源(如DMA通道、GPIO引脚、SPI或SDIO接口)没有被其他任务或驱动占用
一切D都好 发表于 2024-8-20 19:31 | 显示全部楼层
SD卡操作对时序要求较高,确保驱动中的超时设置合理,并且能够正确处理超时情况。
yangxiaor520 发表于 2024-8-20 19:52 来自手机 | 显示全部楼层
一个是写超时,一个是CRC校验错误。
星星点点didi 发表于 2024-8-20 20:37 | 显示全部楼层
确保SD卡驱动正确初始化和配置了SD卡接口,包括时钟频率、数据传输模式等
ewyu 发表于 2024-8-20 21:41 | 显示全部楼层
一般需要确保SD卡驱动能够正确处理错误情况,如CRC错误、通信错误等
hhdhy 发表于 2024-8-21 08:30 | 显示全部楼层
一定要保证SD卡驱动使用的内存(如缓冲区)分配正确,并且没有内存泄漏或越界访问
yuliangren 发表于 2024-8-21 10:12 | 显示全部楼层
检查FreeRTOS的配置,如堆大小、任务堆栈大小、系统时钟频率等,确保它们满足SD卡驱动的需求
yuliangren 发表于 2024-8-21 15:00 | 显示全部楼层
使用调试工具和日志输出,跟踪SD卡驱动的执行过程,找出问题所在。

classroom 发表于 2024-8-29 15:21 | 显示全部楼层
中断处理冲突吧
laocuo1142 发表于 2024-8-29 15:21 | 显示全部楼层
如果FreeRTOS中的其他任务占用了CPU资源或SD卡接口资源,可能会导致SD卡操作无法及时响应。
flycamelaaa 发表于 2024-8-29 15:22 | 显示全部楼层
是不是时序问题
powerantone 发表于 2024-8-29 15:22 | 显示全部楼层
SD卡驱动代码可能不完全兼容FreeRTOS的上下文切换机制,或者在某些特定条件下存在bug。
两只袜子 发表于 2024-8-29 16:00 | 显示全部楼层
检查FreeRTOS的中断上下文切换是否正确,并确认SD卡相关的中断处理程序没有被阻塞。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部