關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > U盤SoC的設(shè)計與實現(xiàn)

U盤SoC的設(shè)計與實現(xiàn)

作者: 時間:2013-05-16 來源:網(wǎng)絡(luò) 收藏

控制傳輸?shù)膶崿F(xiàn):
SETUP階段:從圖4中可看出,當(dāng)token_valid_i、Pid_setup、ep0_sel有效時,表明收到一個有效的令牌包,udc_as_o被拉高,表示開始數(shù)據(jù)傳送,轉(zhuǎn)入ctrl_setup_stage狀態(tài),此時cpu把device_bufok_i信號拉高,隨后開始接收數(shù)據(jù),在setup階段8個字節(jié)的標(biāo)準(zhǔn)請求數(shù)據(jù)接收完成后,send_hdsk_pkt_o信號變高,表示數(shù)據(jù)接收正確,要求發(fā)送一個ACK的握手包。

本文引用地址:http://butianyuan.cn/article/159369.htm

f.JPG


DATA階段:數(shù)據(jù)階段是可選的,并且數(shù)據(jù)階段的傳送方向可以是IN或OUT。以IN為例來介紹,當(dāng)Pid_in、token_valid_i、ep0_sel有效時,udc_as_o被拉高,表示開始數(shù)據(jù)傳送,轉(zhuǎn)入ctrl_in_stage_empty,接著轉(zhuǎn)入ctrl_in_stage狀態(tài),CPU將device_bufok_i拉高,表示開始接收數(shù)據(jù),等待數(shù)據(jù)傳完后,send_hdsk_pkt_o信號變高,表示數(shù)據(jù)接收正確,并將toggle機制翻轉(zhuǎn),要求打包模塊發(fā)送一個ACK的握手包。
STATUS階段:STATUS階段也分為STATUS IN和STATUS OUT兩種情況。在STATUS OUT階段,接受到HOST發(fā)送過來的空數(shù)據(jù)包后,狀態(tài)機會將send_hdsk_pkt_o信號拉高,發(fā)送ACK包給HOST。其狀態(tài)機同SETUP狀態(tài)機類似。
中斷、批量、同步傳輸?shù)腎N實現(xiàn):在硬件設(shè)計上,中斷、批量和同步3種傳輸方式的處理都是一樣的,只是在系統(tǒng)配置時,各傳輸方式對應(yīng)的端點不同。下面以3種傳輸方式的IN傳輸來介紹。圖5為3種傳輸方式的IN傳輸?shù)臓顟B(tài)機。

g.JPG


從上圖可看出,在收到IN令牌后,狀態(tài)機將tide_as_o拉高,表示開始傳送數(shù)據(jù),轉(zhuǎn)入In_transfer_empty狀態(tài),再轉(zhuǎn)入In_transfer狀態(tài),cpu若能傳送數(shù)據(jù),則把device_buf_ok_i信號置高,開始接收數(shù)據(jù),等待數(shù)據(jù)傳送完畢時,狀態(tài)機會將send_data_pkt_o拉高,將此信號送至打包模塊,從而將所需要的數(shù)據(jù)發(fā)送給HOST。
2.1.5 打包模塊
本模塊接收從SIE傳來的控制信號,根據(jù)協(xié)議,產(chǎn)生所需要的包傳送給發(fā)送模塊。
2.1.6 tx模塊
tx模塊是總線發(fā)送模塊。它將打包模塊發(fā)送過來的包信息,進(jìn)行并串轉(zhuǎn)換,位填充,NRZI編碼后,將數(shù)據(jù)發(fā)送給主機。此模塊同rx模塊類似,不再贅述。
2.2 8051CPU
此設(shè)計中的CPU為一個驗證過的IP核。它包含:1個8位中央處理器、1個片內(nèi)振蕩器及時鐘電路、4 KB ROM程序存儲器、128B RAM數(shù)據(jù)存儲器、可尋址64 KB外部數(shù)據(jù)存儲器和64 KB外部程序存儲器的控制電路、32條可編程的I/O線(4個8位并行I/O接口)、2個16位的定時,計數(shù)器、1個可編程全雙工串行接口、5個中斷源、2個優(yōu)先級嵌套中斷結(jié)構(gòu)。將的通信請求接入到CPU的一個外部中斷接口上,當(dāng)的通信請求到來時,系統(tǒng)會產(chǎn)生一個中斷,轉(zhuǎn)入中斷服務(wù)程序。
此外,還需要設(shè)計一個CPU的固件firmware,實現(xiàn)USBCORE的上電初始化過程(向UDC_Control中的控制寄存器和狀態(tài)寄存器寫入初始數(shù)據(jù))、USB CORE中斷處理并完成USB傳輸事務(wù)、使設(shè)備擺脫異常狀態(tài)等功能。
2.3 UDC_Control
UDC_Control模塊位于CPU和USB CORE之間,它完成CPU對USB通信的控制和數(shù)據(jù)的讀寫操作。UDC_CTRL模塊中設(shè)有22個特殊功能寄存器,來完成USB通信。
USB_INT1和USB_INT2為中斷寄存器,其各個位分別表示USB通信的9種中斷請求(剩下的位為保留位),但USBCORE一次只能向CPU提供一個中斷信號,這兩個USB_INT寄存器供軟件在進(jìn)入中斷后查詢是USB的何種中斷。EP0_CTRL、EP0_INFIFO_DATA、EPO_INFIFO_CNT、EP0_OUTFIFO_ DATA、EP0_OUTFIFO_CNT這5個寄存器都是與Endpoint0相關(guān)的,Endpoint0是由一個輸入端點和一個輸出端點組成,用來實現(xiàn)控制傳輸。所有支持USB標(biāo)準(zhǔn)請求和Class定義的請求都通過這個端點來處理。其中EP0_CTRL用來對Endpoint0的傳輸進(jìn)行控制,當(dāng)CPU要向USB主機傳送數(shù)據(jù)時,就會將數(shù)據(jù)寫入EP0_INFIFO_DATA,EP0_INFIFO_CNT是CPU向EP0_INFIFO_DATA中寫入數(shù)據(jù)的字節(jié)數(shù)。EP0_OUT,Endpoint1,Endpoint2,Endpoint3,Endpoint4的寄存器情況類似,在此不再多做介紹。UDC_STATUS和DEVICE_CTRL是接口狀態(tài)和控制寄存器,對CPU和USB CORE的通信進(jìn)行監(jiān)控。
2.4 NandFlash
針對NandFlash讀寫的特點,特別是其可隨機讀,但無法隨機寫的問題,需要通過設(shè)置緩沖區(qū)來解決。在與USB Host進(jìn)行數(shù)據(jù)交換的過程中,最小的單位是扇區(qū):512字節(jié)。由于NandFlash在寫之前必須先擦除,而一擦又必須擦一個Block,因此在擦除某Block之前必須保存同一個Block中有關(guān)扇區(qū)的數(shù)據(jù)。因此,如果每收到一個扇區(qū)的內(nèi)容就進(jìn)行一次擦、保存、寫的操作,系統(tǒng)任務(wù)將十分繁重,無法及時響應(yīng)USB Host端的請求。因此,在系統(tǒng)中設(shè)置32K的緩沖區(qū),每完一次數(shù)據(jù)傳輸后,記下本次要寫的開始扇區(qū)和總扇區(qū)數(shù),將本次要寫的數(shù)據(jù)涉及的扇區(qū)以外的數(shù)據(jù)從NandFlash中讀出來,存放在緩沖區(qū)中對應(yīng)位置,然后擦除一個Block,再將緩沖區(qū)中內(nèi)容一次全部重新寫入NandFlash。



關(guān)鍵詞: U盤 片上系統(tǒng) USB Verilog HDL

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉