大家好!
最近我在用CH376芯片连接USB写TXT数据,但是无论是中断原地等待还是中断定时查询方式,有问题的都是一个地方,出现在ByteWrite在返回长度上。
UINT8CH376ByteWrite(PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount) /* 以字节为单位向当前位置写入数据块 */
{
UINT8s;
xWriteCH376Cmd(CMD2H_BYTE_WRITE) ;
xWriteCH376Data((UINT8) ReqCount) ;
xWriteCH376Data((UINT8) (ReqCount>>8) ) ;
xEndCH376Cmd() ;
if (RealCount) *RealCount = 0;
while (1) {
s = Wait376Interrupt() ;
if (s == USB_INT_DISK_WRITE) {
s = CH376WriteReqBlock(buf) ; /* 向内部指定缓冲区写入请求的数据块,返回长度 */
xWriteCH376Cmd(CMD0H_BYTE_WR_GO) ;
xEndCH376Cmd() ;
buf += s;
if (RealCount) *RealCount += s;
}
/*else if (s == USB_INT_SUCCESS) return(s) ;*/ /* 结束 */
else return(s) ; /* 错误 */
}
}
我根据上面这个例程中的函数,转化移植到我的单片机中,当进入while,只有一次机会收到USB_INT_DISK_WRITE(再次发xWriteCH376Cmd(CMD2H_BYTE_WRITE)等 并不会再收到),然后进入下个CH376WriteReqBlock,但是此时只会返回0x1E(也就是USB_INT_DISK_WRITE的值),这样的情况下,并不会真的写30个字节,而是只写了一个字节,就结束了。
不知道什么环节出了问题...
期间还发现一个问题,如果
xWriteCH376Cmd(CMD2H_BYTE_WRITE) ;
xWriteCH376Data((UINT8) ReqCount) ;
xWriteCH376Data((UINT8) (ReqCount>>8) )
与Wait376Interrupt() 之间放一个断点时间上不连续,那么只会收到0x14,怎么也收不到0x1E了。
我试过直接断点到CH376FileClose( TRUE ),还是只写了一个字节...