HID Firmware修改 (HIDtoUARTExample)之二

1.      上位机向HID写数据时,每个包传输的第一个byte为写数据(OUT)report ID上、下位机必须一致

上位机配置位置:


下位机配置位置:




2.      HID向上位机返回数据时,每个包的第一个byte也必须是读数据(IN)report ID, 在下位机中,IN report ID的定义一定要和发送包的第一个byte相一致,否则读取错误。IN report ID与上位机无关





3.      下位机返回数据是通过调用SendPacket() 函数实现的

         SendPacket()函数的参数,是reportID,追进SendPacket函数内部看,可以看到,其发送原理是根据参数的report ID,调用对应的report handle函数(对应的report handle函数会将要发送的数据放入IN_PACKET[64] buffer中),然后将IN_PACKET内的数据(即要发送的数据)发出。

         如目前使用的reportID: IN_DATA,使用时就是SendPacket(IN_DATA),IN_DATA对应的report handle函数是IN_Data(),在IN_Data()中,将外部获取的数据赋值给IN_PACKET[64],代码如下:

void IN_Data (void)

{

         inti;

 

         IN_PACKET[0]= IN_DATA;

 

         for(i=1; i<64; i++)

                   IN_PACKET[i]= PERIPHERAL_READ_BUF[i-1];                  //PERIPHRAL_READ_BUF在main函数或其它函数中被赋值

                                                                                                                                   //PERIPHRAL_READ_BUF用作其它代码与HID lib的发送数据传输桥梁

                                                                                                                                   //这样可以把HID lib独立开

 

         IN_BUFFER.Ptr= IN_PACKET;

     IN_BUFFER.Length = IN_DATA_SIZE + 1;

}

 

注意:PERIPHERAL_READ_BUF就是自定义的外部接收数据存放buffer,为了与HID示例中HID操作的部分独立开,自己的程序可以对PERIPHERAL_READ_BUF进行赋值更改,发送时只要按HID示例的发送程序(SendPacket)操作就行。关键就是如上代码在IN_Data()函数中将两者联系起来。这样就可以把HID示例中,纯粹HID操作的部分独立出来,不用去管F340 的底层操作,这部分就可以做成lib。

自己的主函数中如要发送不同的数据,只要如下操作即可,

         //Read process

                            caseFPGA_R:

                            {

                                     for(cycCnt=0;cycCnt<64; cycCnt++)

                                     {

                                               PERIPHERAL_READ_BUF[cycCnt] = cycCnt +10;

                                     }        // PERIPHERAL_READ_BUF赋值可在任何需要的位置

 

                                SendPacket (IN_DATA);

                                     OUT_PACKET[1]= 0;

                                     break;

                            }

 

4.      SPI接口在FPGA中只有SPI3W和SPI4W两个chipaddress,而上位机和下位机之间的协议针对每种SPI接口都会定义一个chip address,各种SPI接口都可以转变成SPI3W和SPI4W这两种情况,FPGA通过设置拼接寄存器(0x11)完成。

         上位机在chipaddress下拉框中选择某种SPI接口后,就会在下拉框的消息函数中根据选择将FPGA配置成对应的拼接。

         在下位机中,各SPI读写的分支下,要将上位机传过来的chip address分别再设置回FPGASPI3W或SPI4W的chip address


参考:D:\Yifei\WorkPlace\Project\Driver_PG_HDMI2MIPI\Firmware                           readme

相关文章
相关标签/搜索