求助CH376 从内存缓冲区读取FAT_DIR_INFO数据块错误

unsigned char CH376ReadBlock( unsigned char * buf )

{

   unsigned char s, l;

   xWriteCH376Cmd( CMD01_RD_USB_DATA0 );//0x27

   s = l = xReadCH376Data( ); /* 后续数据长度 */  

   if ( l ) 

   {

      do 

      {

         *buf = xReadCH376Data( );

         buf ++;

      } while ( -- l );

   }

   xEndCH376Cmd( );

   return( s );

}



CH376ReadBlock(GlobalBuf);/* 从内存缓冲区读取FAT_DIR_INFO数据块,返回长度总是sizeof(FAT_DIR_INFO) */

CH376EndDirInfo( );            /* 获取完FAT_DIR_INFO结构 */


if ( ( GlobalBuf[11] & ATTR_LONG_NAME_MASK ) != ATTR_LONG_NAME || GlobalBuf[13] != GlobalBuf[32] ) /* 类型错误或者校验和错误 */

{  

   s = ERR_LONG_NAME_ERR;          

   //break;    /* 没有直接返回是因为如果是打开了根目录那么必须要关闭后才能返回 */

}


PIC24EP256GU814 十六位单片机SPI方式调用CH376ReadBlock(GlobalBuf) 返回GlobalBuf[11] = 0x35,GlobalBuf[13] = 0x00,GlobalBuf[32] = 0x2c,类型错误或者校验和错误

GlobalBuf存放的是FAT_DIR_INFO,sizeof(FAT_DIR_INFO)是32个字节,所以不知道GlobalBuf[32]代表什么?GlobalBuf[13]是长文件目录项的校验和位,指令CMD_DIR_INFO_READ是获取长文件名对应短文件名的目录项,并且校验和是通过复杂的公式计算出来的,还是说你的GlobalBuf[32]变量就是你根据短文件名计算得到的校验和?

RTX截图未命名.png


谢谢大神的回复,由于单片机现在用的是16位单片机,所以GlobalBuf中数据不是像8位单片机一样,全是8位的数据,而是16位的,所以原来8位单片机中GlobalBuf[11]就该是现在GlobalBuf[5]的高8位,GlobalBuf[13]就该是现在GlobalBuf[6]的高8位


只有登录才能回复,可以选择微信账号登录