TOP

使用USB低速設備如何傳送大于8位元組的資料給主機?

USB 協定規定USB低速設備一次最大傳送8Byte,而向游戲控制器一類設備傳送資料時,可能需要一次傳送更多位元組,這就需要分多次傳送。
例如如果傳送10Byte,用戶可以使用以下方式:
BTS1 UE1R.4                                  //判斷是否有USB 端點1請求?
JMP Main_Loop                               //沒有端點1請求,跳到主程序
                                                    //有端點1請求
EP1_WR_RAM_addr_set #0x8         //寫端點1FIFO地址
EP1_WR_RAM_data Buffer0            //寫數據到FIFO
EP1_WR_RAM_addr_set #0x9         //FIFO address + 1
EP1_WR_RAM_data Buffer1            //寫數據到FIFO
EP1_WR_RAM_addr_set #0xA
EP1_WR_RAM_data Buffer2
EP1_WR_RAM_addr_set #0xB
EP1_WR_RAM_data Buffer3
EP1_WR_RAM_addr_set #0xC ;
EP1_WR_RAM_data Buffer4
EP1_WR_RAM_addr_set #0xD
EP1_WR_RAM_data Buffer5
EP1_WR_RAM_addr_set #0xE
EP1_WR_RAM_data Buffer6
EP1_WR_RAM_addr_set #0xF
EP1_WR_RAM_data Buffer7

MOV A,#88H                            //寫完8位元組到FIFO,傳送8Byte
MOV UE1R,A
Wait:
BTS1 UE1R.4                             //等待主機請求
JMP Wait
EP1_WR_RAM_addr_set #0x8     //寫端點1FIFO地址
EP1_WR_RAM_data Buffer8        //寫第9Byte數據到FIFO
EP1_WR_RAM_addr_set #0x9    //FIFO address + 1
EP1_WR_RAM_data Buffer9       //寫第10Byte數據到FIFO

MOV A,#82H                            //寫完2位元組到FIFO,傳送2Byte
MOV UE1R,A
Main_Loop:
.........................................