<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/159369.htm

          f.JPG


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

          g.JPG


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



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

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();