HID或USB的上、下位机之间相互读写时,并不是直接通信的,而是经过各自的buffer.
如下图所示:
上位机向下位机写数据:
step1: 当点击Writ HID按键后,上位机首先将要写的数据写入PC的驱动buffer中;
step2: 然后PC的驱动再将buffer中的数据写入下位机USB-SIE的buffer中,进而触发下位机的中断;
step3: 下位机的USB中断程序将SIEbuffer中的数据取出,最后在firmware中进行处理。
在USB trace中可以看到如下图所示
会有两个OUT包发出,第一个是上位机给驱动buffer,第二个是驱动buffer给下位机硬件buffer。
上位机Write HID的程序如下图:
上位机读取下位机数据:
step1: 下位机将要发送的数据准备好:
step2: 根据自己设定的发送条件进行判断,满足发送条件,将要发送的数据写入下位机自身的SIE buffer中;
step3: 上位机发出读取指令,驱动先从下位机SIE中取出数据,然后UI程序再从驱动中取出数据。
step1
step2
首先将要发送的数据准备好(IN_DATAh函数中),然后在主函数中判断发送条件,当条件满足时将准备好的数据发送到下位机SIE buffer中。
如下图所示:
此时上位机还没有读取数据,但下位机因已满足firmware自己编写的发送条件,已将待发送数据送至SIE buffer。所以会出现一个IN包。
上位机再按下Read HID按键后,数据被读至上位机,如下图所示:
此时第二个IN包表示数据传输至上位机。