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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 2440裸機學(xué)習(xí)心得(下)

          2440裸機學(xué)習(xí)心得(下)

          作者: 時間:2016-11-29 來源:網(wǎng)絡(luò) 收藏
          NOR和NAND是現(xiàn)在市場上兩種主要的非易失閃存技術(shù)。Intel于1988年首先開發(fā)出NOR flash技術(shù),徹底改變了原先由EPROM和EEPROM一統(tǒng)天下的局面。
          NOR比較好操作,因為集成了系統(tǒng)地址線和數(shù)據(jù)線在芯片內(nèi),而NAND只有8個I/O,要操作,還需要結(jié)合相應(yīng)硬件,如2440里有的NAND控制器。
          14、基于OHCI的USB主機(僅做了枚舉)
          發(fā)現(xiàn)了一個很好的博客講這個的:http://lancelot.blog.51cto.com/393579/328233
          部分經(jīng)典內(nèi)容摘要:
          在OHCI規(guī)范中,最重要的幾個概念是端點(EndPoint - ED)、傳輸描述符(Transport Descriptor - TD)、主機控制器通信區(qū)(HCCA)。其中ED負(fù)責(zé)確定傳輸類型(控制傳輸、批量傳輸、同步傳輸和中斷傳輸)。TD確定傳輸參數(shù)。HCCA用于確定數(shù)據(jù)傳輸是否完畢。
          OHCI(基本流程)
          進行控制/批量傳輸?shù)闹饕幚砹鞒倘缦拢?/div>
          1、創(chuàng)建控制/批量傳輸?shù)腅D列表;
          2、創(chuàng)建ED下的TD列表;
          3、設(shè)置命令到相應(yīng)寄存器開始數(shù)據(jù)傳輸;
          4、在中斷處理程序中判斷數(shù)據(jù)傳輸是否結(jié)束;
          在OHCI層,主要完成如下功能:
          l通過控制端口讀寫數(shù)據(jù)(包含SETUP、DATA、STATUS等3個TD);
          l通過控制端口發(fā)送設(shè)置命令(沒有DATA的TD);
          l通過批量端口讀數(shù)據(jù);
          l通過批量端口寫數(shù)據(jù);
          l中斷處理程序;
          在OHCI的體系下,判斷數(shù)據(jù)是否傳輸完畢是需要通過中斷程序來判斷的,當(dāng)USB主機設(shè)置了HcControl和HcCommandStatus寄存器開始傳輸數(shù)據(jù)后,AM9200自動開始數(shù)據(jù)傳輸,并且定期的檢查HcDoneHead寄存器的內(nèi)容,并且將其轉(zhuǎn)移到HCCA.DoneHead。然后產(chǎn)生中斷,觸發(fā)中斷處理程序。
          在中斷處理程序中需要判斷當(dāng)前結(jié)束的TD是否是當(dāng)前命令的最后一個TD,這樣才能確保整個ED處理完畢。
          進行U盤的數(shù)據(jù)傳輸時需要通過批量傳輸端口收發(fā)數(shù)據(jù),所使用的協(xié)議為Mass Storage協(xié)議
          要學(xué)習(xí)的一種數(shù)據(jù)結(jié)構(gòu)與結(jié)構(gòu)體結(jié)合應(yīng)用的模式:
          聲明時:
          typedef struct _ED {
          …………
          } ED,*P_ED;
          __inline void CreateEd(unsigned int EDAddr,………….)
          {
          P_ED pED = (P_ED) EDAddr;//這個在函數(shù)中創(chuàng)建結(jié)構(gòu)體pED來初始化
          pED->Control =…………………….
          }
          調(diào)用時,因16字節(jié)對齊:
          __align(16) EDed;(聲明)
          CreateEd(
          (unsigned int) &ed,// ED Address
          ………….
          );
          簡單的USB設(shè)備枚舉,讀取描述符:(控制傳輸步驟)
          搞好最重要的3個數(shù)據(jù)結(jié)構(gòu):
          端點描述符ED,傳輸描述符TD和共享數(shù)據(jù)域HCCA
          由于HCCA只是創(chuàng)建一個空間域,不需要初始化
          而ED和TD在設(shè)備枚舉時需要不同初始化,故還要創(chuàng)建兩個
          初始化結(jié)構(gòu)體函數(shù):CreateEd和CreateGenTd
          初始化OCHI寄存器(僅限枚舉部分,不涉及中斷)
          復(fù)位,設(shè)置幀間隔,初始化HcDoneHead,設(shè)置HC為運行狀態(tài)
          寫HCCA(開拓一片域)
          檢測是否有USB設(shè)備
          設(shè)一定的時間檢測,如for(i=0;i<100000;i++)
          設(shè)備枚舉的5個過程:第一步,主機得到設(shè)備描述符
          第二步為設(shè)備分配地址
          第三步,主機用新的地址再次獲取設(shè)備描述符
          第四步,主機讀取設(shè)備全部配置描述符
          第五步,主機發(fā)送SETUP數(shù)據(jù)包,用以設(shè)置配置,允許所有端點進入工作狀態(tài)。
          注意:控制寫傳輸需要3個TD:第一個發(fā)送Setup包,第二個用于接收握手或零長度的數(shù)據(jù)包,第三個用于發(fā)送狀態(tài);
          控制讀傳輸需要4個TD:第一個發(fā)送Setup包,第二個用于接收數(shù)據(jù),第三個用于發(fā)送一個零長度的數(shù)據(jù)包,,第四個用于接收狀態(tài)
          具體有兩種方法判斷TD是否傳送完成:
          中斷法
          初始化好中斷寄存器rHcInterruptEnable |= (1<<1)|(1<<31);
          rHcInterruptStatus |= (1<<1);
          pISR_USBH = (int)USBH_interrupt;
          rINTMSK = ~BIT_USBH;
          當(dāng)有TD完成時,便進入中斷。
          如何判斷枚舉過程中每一步是否最后一個TD完成呢?
          可以通過TD創(chuàng)造函數(shù)中DelayInterrupt即DI變量設(shè)置來巧妙解決
          當(dāng)DI=0x7時,即使TD完成也不會進入中斷的,故可以只在每一階段最后的TD設(shè)為非0x7,其余的設(shè)為0x7,這樣進入中斷就代表是最后數(shù)據(jù)發(fā)送完成了
          2、狀態(tài)檢測法:
          可以通過rHcCommandStatus寄存器中第二位是否1來判斷Controllistfilled。
          當(dāng)其為1時,表示還有TD在隊列,沒發(fā)送完成
          為0時,表示無TD在隊列,全部發(fā)送完
          可以這樣檢測:while(rHcCommandStatus&&0x02)
          {
          Delay(50);
          }
          具體的UFI讀寫設(shè)備參考網(wǎng)上的吧(弄了很久,還沒弄成功)
          1、查詢
          2、讀余量
          3、讀寫扇區(qū)
          好啦,到這里,算是結(jié)束了,開始帶LINUX系統(tǒng)的真正學(xué)習(xí)啦,GO
          一切都會有新的開始。。。。。。。。。。

          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 2440v裸機學(xué)

          評論


          技術(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); })();