SD卡初始化打印信息和winhex不一样
参照牙缝的博客http://www.cnblogs.com/yuphone/category/276816.html,从SD卡到TFT已经有图片了就是还有一些细节问题,慢慢解决。。。后面还有很多要做的,文件系统,摄像头,GUI。。。先严重感谢一下牙缝,哈哈,有你的博客前面调的很通畅,偷着乐。
说问题,初始化SD卡以后,读 CID 和 CSD 寄存器的信息,然后再读第0扇区512bytes的数据,如下:(我用的是128MB的SD卡)
寄存器信息:
第0扇区:
最后两个字节还是 55 AA 表示MBR的DPT结束了。
但我用 winhex 看的结果是:
问题(1):这是为什么咧?地址不对?应该不会,最后的结束字节对的到,那为什么读出来都是0了?我的SD卡128M 的太古老了?明天换个1G的试试。
问题(2):读SD卡数据的这个函数 void SD_CARD_Read_Data_LBA(u32 LBA,u16 n_bytes,u8 *buf);
//Read SD-CARD Data
SD_CARD_Read_Data_LBA(0,512,buf); 就调用这个函数,这个地址 LBA 也就是通过winhex看到的地址是物理地址还是逻辑地址 ?从字面上来看肯定是逻辑地址Logic Block Address。
这个地址的转换 推测 是逻辑地址转物理地址,这肯定是文件系统里面的东东,现在正在看。。。谁能帮我先解释一下,或者有好资料推荐一下。
//address conversation(logic address -> byte address)
sector = sector << 9; //sector = sector * 512
CMD[1] = ((sector & 0xFF000000) >> 24);
CMD[2] = ((sector & 0x00FF0000) >> 16);
CMD[3] = ((sector & 0x0000FF00) >> 8);
问题(3):用winhex看各个文件的地址,比如我放了三张 240*320 的图片进去了,显示如下:
牙缝的扇区地址的偏移量是304,我没搞明白。。。而我的正好是300,我更不明白了。直觉是 128M的SD卡估计有点老了。。。并且我按照地址去读图片出来显示也有那么一点不对,第一幅图上面有点确实,第二幅图又是第一幅图的下面一点加第二幅图的上面部分,估计是地址没搞对,还是文件系统啊。。。
Go on!