SDMMC Q&A
Q1: 插上TF卡的情况下偶尔出现异常打印mmcblk0: timed out sending r/w cmd command, card status 0x900,卡读写并没有出现异常,异常打印如下
[sdmmc]---Hal_SDMMC_SendCmdAndWaitProcess--1057--MIEEvent = 0--Trig_MIE_INTR = 6--MIE_EVENT[00] = 0x 40- MIE_INT_EN[01] = 0x 1b---SD_STS[0D] = 0x e40--
0x00001413CMD_25 (Arg: 0x030FB498)[Line: 1059]
[0x19, 0x00,0x00, 0x09,0x00, ] ---DumpReg--- [0x07][MIE_FUNC_CTL_REG]= 0x0004 [0x0B][SD_MODE_REG]= 0x0003 [0x0C][SD_CTL_REG]= 0x0038 [0x0F][DDR_MOD_REG]= 0x1000 [0x0D][SD_STS_REG]= 0x0F00 [gu16_MIEEvent_ForInt]= 0x0041 [0x00][MIE_EVENT_REG]= 0x0040 [0x03][MMA_ADDR_15_0_REG]= 0x3000 [0x04][MMA_ADDR_31_16_REG]= 0x038B [0x05][MMA_LEN_15_0_REG]= 0x0010 [0x06][MMA_LEN_31_16_REG]= 0x0000 [0x08][JOB_BLK_CNT]= 0x0001 [0x09][BLK_SIZE]= 0x0200 [0x38][DEBUG_BUS0]= 0x0000, 0x0000, 0x0000, 0x0000, [0x39][DEBUG_BUS1]= 0x0500, 0x0500, 0x0500, 0x0500, ------
[sdmmc_0] Err: #Cmd_25 (0x030FB498)=>(E: 0x0100)(S: 0x00000000)__(L:1059)(B:496/496)(I:0/1) mmcblk0: timed out sending r/w cmd command, card status 0x900 =>> PassPHs[17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, ] <<=
根据错误log,代表出错时data0线被拉低了,所以我们无法写入;而data0被拉低在协议上的解释是当卡busy时就会把data0拉低,以让主机不要再往卡里写数据。
出错了之后,kernel会有重写的机制,当卡脱离busy状态后,依旧是可以写入的。如果只是偶尔打印,像这种会有重写的就影响不会很大。
此打印更偏向于TF卡的问题,如果出现,可以尝试换TF试试。