目录
问题现象:
在uboot命令行下输入sf probe后,发现程序走到上图中的位置就挂掉了。
问题原因:
追踪代码发现是在下面这行打印中挂掉的。
查看flash的datasheet可知,opcode为0x05是读状态寄存器,且SO会输出状态寄存器的S0~S7位,也就是一个字节的数据;同时,op->data.nbytes是发送/接收的数据字节数,可以看到num = 0x1,说明状态寄存器输出的就是1个字节的数据。
但是因为op->data.buf.in的强转类型为uint32_t *,也就是unsigned int *,是4个字节的数据,所以可能是由于地址越界导致非法地址的访问才挂掉,于是将强转类型改为u8 *(unsigned char *),输出格式改为0x%x即可解决问题。
更好的改法是判断op->data.nbytes的大小来决定强转的类型,配合输出的格式,这样可以使不同opcode的打印数据信息完整;例如opcode = ox9f时,是读取flash的device id,之前data打印是0xc81860c8,改成u8 *后,data打印为0xc8,感官上可能会觉得打印信息不完整。
改完后经验证sf probe成功。