CustomHID_Data_Setup中有如下操作:
/*** GET_REPORT ***/
else if((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& RequestNo == GET_REPORT)
{
CopyRoutine = read_flash;
}
PC机发不停地发送读64字节的指令,控制传输,STM32收到指令后,就读64字节FLASH,并回传数据。
现在问题是,比如第一个64字节的块,全为0X11,第二个块全为0x22,依次类推。
读出的结果却是:第一块0x11,第二块还是0x11,第3块是0x33,第四块还是0x33
很明显,该显示0x22的时候,还显示了0x11,次序是对的,但是某些块占用了别的块的时间
具体情况是:读块的时间可能稍长。如果读块的时间相当短,不会出现这个问题。
看过香水老师的一些讲解,一、 SETUP DATA_IN(0) DATA_IN(1) DATA_IN(0) ...... STATUS_OUT(1)。现在这个SETUP实际是自动回复了ACK,然后进入了CustomHID_Data_Setup,再在CustomHID_Data_Setup里执行read_flash(),似乎read_flash()并没执行完,DATA_IN(0) 就已经开始了,所以总是出的上一次的数据。
请教香水老师,这具体是哪有问题?怎样解决呢? |