打印

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

[复制链接]
2970|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 (114.8 KB )

6863066418ba4b2464.png

使用特权

评论回复
板凳
埃娃| | 2024-5-15 22:05 | 只看该作者
裸机正常的话就是程序有问题啊

使用特权

评论回复
地板
4c1l| | 2024-6-30 23:29 | 只看该作者
可能是由于任务调度引起的时序问题或资源竞争问题

使用特权

评论回复
5
清芯芯清| | 2024-8-20 15:10 | 只看该作者
在GD32303CEVAL微控制器上使用FreeRTOS时,如果SD卡驱动无法正常工作,可能是任务优先级和调度问题

使用特权

评论回复
6
twinkhahale| | 2024-8-20 16:18 | 只看该作者
FreeRTOS的任务调度可能会影响SD卡驱动的执行。确保SD卡驱动任务的优先级设置合理,并且没有其他高优先级任务干扰其执行

使用特权

评论回复
7
suiziq| | 2024-8-20 17:20 | 只看该作者
SD卡驱动可能需要在中断或临界区中执行某些操作。确保正确处理中断和临界区,避免任务切换导致的数据不一致或竞争条件

使用特权

评论回复
8
teaccch| | 2024-8-20 18:25 | 只看该作者
确保SD卡驱动所需的资源(如DMA通道、GPIO引脚、SPI或SDIO接口)没有被其他任务或驱动占用

使用特权

评论回复
9
一切D都好| | 2024-8-20 19:31 | 只看该作者
SD卡操作对时序要求较高,确保驱动中的超时设置合理,并且能够正确处理超时情况。

使用特权

评论回复
10
yangxiaor520| | 2024-8-20 19:52 | 只看该作者
一个是写超时,一个是CRC校验错误。

使用特权

评论回复
11
星星点点didi| | 2024-8-20 20:37 | 只看该作者
确保SD卡驱动正确初始化和配置了SD卡接口,包括时钟频率、数据传输模式等

使用特权

评论回复
12
ewyu| | 2024-8-20 21:41 | 只看该作者
一般需要确保SD卡驱动能够正确处理错误情况,如CRC错误、通信错误等

使用特权

评论回复
13
hhdhy| | 2024-8-21 08:30 | 只看该作者
一定要保证SD卡驱动使用的内存(如缓冲区)分配正确,并且没有内存泄漏或越界访问

使用特权

评论回复
14
yuliangren| | 2024-8-21 10:12 | 只看该作者
检查FreeRTOS的配置,如堆大小、任务堆栈大小、系统时钟频率等,确保它们满足SD卡驱动的需求

使用特权

评论回复
15
yuliangren| | 2024-8-21 15:00 | 只看该作者
使用调试工具和日志输出,跟踪SD卡驱动的执行过程,找出问题所在。

使用特权

评论回复
16
classroom| | 2024-8-29 15:21 | 只看该作者
中断处理冲突吧

使用特权

评论回复
17
laocuo1142| | 2024-8-29 15:21 | 只看该作者
如果FreeRTOS中的其他任务占用了CPU资源或SD卡接口资源,可能会导致SD卡操作无法及时响应。

使用特权

评论回复
18
flycamelaaa| | 2024-8-29 15:22 | 只看该作者
是不是时序问题

使用特权

评论回复
19
powerantone| | 2024-8-29 15:22 | 只看该作者
SD卡驱动代码可能不完全兼容FreeRTOS的上下文切换机制,或者在某些特定条件下存在bug。

使用特权

评论回复
20
两只袜子| | 2024-8-29 16:00 | 只看该作者
检查FreeRTOS的中断上下文切换是否正确,并确认SD卡相关的中断处理程序没有被阻塞。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝