问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32303CEVAL的SD卡驱动无法再Freertos中正常使用

RTOS SD卡 国产芯片 单片机 嵌入式

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

wimimi2024-05-13
在粿机中使用sd_block_read/sd_block_write读写正常
下图是进入rtos前的粿机程序


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

在手册中我找到下面内容
这是程序检测错误时的依据,是sd卡响应相关的寄存器r1。检测到使用CMD16时产生命令响应超时错误
回答 +关注 0
913人浏览 2人回答问题 分享 举报
2 个回答
  • 裸机正常的话就是程序有问题啊
  • 图片在帖子发不出来在评论里发代码
    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);
        }
    }

您需要登录后才可以回复 登录 | 注册