基于USB總線(xiàn)的ADSP-TS101S鏈路口加載
圖4 中的FIFO負責對輸出數據進(jìn)行緩沖,當輸入數據的速率高于Link Port時(shí)鐘的頻率時(shí),Link Port的數據可以先存在FIFO數據中,當存入一定數量以后,再以L(fǎng)ink Port的時(shí)鐘把數據讀出。當輸入數據的速率低于Link Port的時(shí)鐘數率的時(shí)候,Link Port的數據同樣可以先存在FIFO中,當存入整數倍的4字數據量后,再以L(fǎng)ink Port的時(shí)鐘的數率發(fā)送出去。
圖4中的控制模塊是Link Port發(fā)送模塊的關(guān)鍵模塊,主要負責產(chǎn)生讀FIFO的讀使能信號和Link Port的發(fā)送時(shí)鐘根據Link Port發(fā)送的時(shí)序特點(diǎn),使用狀態(tài)機來(lái)實(shí)現數據流的控制。當Link Port沒(méi)有工作時(shí),保持等待狀態(tài)。需要傳輸數據時(shí),首先檢查L(cháng)xCLKIN是否為高電平,若是,則說(shuō)明接收端為接收模式并且接收緩沖器為空,可以初始化一次發(fā)送,否則要等待。開(kāi)始傳輸數據時(shí),數據首先被寫(xiě)入FIFO中,當判斷
到FIFO的輸出信號EMPTY為高時(shí),將處于默認高電平的LxCLKOUT信號拉低,在經(jīng)過(guò)6個(gè)時(shí)鐘周期的低電平后(在此期間檢測LxCLKIN是否一直為高電平),LxCLKOUT拉高形成第一個(gè)LINK時(shí)鐘上升沿,這個(gè)時(shí)候應該在數據線(xiàn)上產(chǎn)生FIFO內的第一個(gè)輸出數據。LxCLKOUT下一周期拉低,第2個(gè)數據輸出,這樣經(jīng)過(guò)16個(gè)時(shí)鐘周期以后表示一次4字傳輸完畢。然后檢測FIFO中剩余的數據FIFO_RDATA_COUNT,若大于4則繼續上面的傳輸操作,否則,說(shuō)明FIFO中只剩最后一個(gè)4字,這次傳輸LxCLKOUT的最后一個(gè)時(shí)鐘上升沿產(chǎn)生以后,不再變低,一直保持高電平。然后,把本模塊中的所有臨時(shí)寄存器和FIFO復位。在產(chǎn)生完足夠長(cháng)度脈沖長(cháng)度的清零信號后狀態(tài)機重新進(jìn)入等待狀態(tài)。
3.2 USB接口模塊
USB接口模塊采用FPGA控制USB協(xié)議解析芯片來(lái)實(shí)現。其實(shí)現框圖如圖5所示。本文引用地址:http://dyxdggzs.com/article/202238.htm
本方案中,USB2.0協(xié)議解析芯片選用CYPRESS公司的CY7C68013A,它將一個(gè)USB外設所需的所有功能集成在一塊芯片上。芯片提供了3種傳輸數據的方式,文中選擇從FIFO(SlaveFIFO)模式。在SlaveFIFO模式下,8051微控制器不在數據的傳輸通路上,只負責設備的初始化和相應主機的控制傳輸請求,高速大批量的數據傳輸通過(guò)外部的主控者通過(guò)SlaveFIFO接口直接將數據填充到FX2LP的端點(diǎn)中(或者從里面讀出),然后由硬件控制將數據傳輸給主機。
Slave FIFO的讀寫(xiě)方式有兩種:同步讀寫(xiě)以IFCLK為時(shí)鐘,IFCLK可以外部輸入,也可以使用內部的30 MHz或者48 MHz時(shí)鐘;異步讀寫(xiě)時(shí)IFCLK信號無(wú)效,只需要提供讀寫(xiě)信號即可進(jìn)行數據讀寫(xiě)。本文選擇同步讀寫(xiě)。
FPGA采用Xilinx公司的XC3S1000。FPGA在其內部建立2個(gè)雙口RAM,來(lái)緩存收發(fā)數據;并與協(xié)議解析芯片的各控制信號相連,實(shí)現對其的讀寫(xiě)控制。文中僅使用這個(gè)芯片的接收邏輯實(shí)現加載文件的USB總線(xiàn)傳輸,發(fā)送邏輯只用來(lái)做輔助調試和狀態(tài)監測。
評論