打印

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

[复制链接]
1126|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
裸机正常的话就是程序有问题啊

使用特权

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

本版积分规则

1

主题

2

帖子

0

粉丝