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