就是这段代码,发命令到SD卡,大家知道SD卡的命令有6个字节组成,命令的第1个字节可以通过将6位命令码与16进制码0x40进行或运算得到。如果命令需要,则在接下来的4个字节中提供一个32位的参数,最后1个字节包含了从第1个字节到第5个字节的CRC-7校验和。
如果是要读写SD卡扇区,那么第一个字节是读写扇区的命令码和0x40相与,中间4个字节的扇区地址,最后一个CRC。
问题就处在中间的4个字节,按照SD卡的规则,必须改成这样:
//发命令到SD卡
void SD_Command(unsigned char command, unsigned long argument, unsigned char CRC)
{
SD_Write(command|0x40);
SD_Write(((unsigned char *)&argument)[3]);
SD_Write(((unsigned char *)&argument)[2]);
SD_Write(((unsigned char *)&argument)[1]);
SD_Write(((unsigned char *)&argument)[0]);
SD_Write(CRC);
}
一个很小的Bug,绝对是故意的……
2.我用的屏分辨率是84*48,宽84不是8的倍数,现在的取模软件在生成图片数组的时候自动帮你补齐8的倍数,不知道说它人性化好还是画蛇添足好。所以我本来一张图是84*48/8=504个字节,现在转换出来是88*48/8=528个字节,这样就无语了。做处理的话太麻烦,不做处理那么显示出来的肯定是乱码,而且528字节超过了一个扇区的512字节,意味着存一个bin需要两个扇区……
于是我尝试着把图片裁剪成了80*48,这样就只有480个字节,能够一个扇区存下,少的几个字节在显示的时候跳过。(在用12864、320240等液晶的时候不会出现此类问题)
3.转换出来的6752个bin文件是按照视频截图的顺序一个一个排好的,只有按照顺序显示才会出现动画的效果。但是我在copy *.bin xx.bin的时候出现了一个问题,合并的时候不是按照顺序来的……这样的结果就是播放的时候屏幕乱闪,暂停就是一副完好的图片,因为顺序乱了……丝毫没有动画的效果……我急需要一个可以按顺序转bin的工具。 |