S3c2410_SDIO_調試筆記<三>

摘自:上海嵌入式索漫科技培訓教材        作者:下家山
 

每個鏈節點有三個域:

           第一個域: 00 byte,表示tuple code號,也即TPL_CODE Tuple code: CISTPL_xxx(各種代碼號見Table13-2);

           第二個域:01 byte,表示tuple body字節數,也即到下一個節點的偏移地址;

           第三個域:02~n+2 byte,表示tuple body內容;

7.jpg

有了這些知識,我們再來看我讀寫conexant wifi sdio card ID號的操作:

       步驟一:讀地址0x001000

              rSDICARG == 0x00200000;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x 00001021;                   

              解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001021:0x00001021的低8位表示從地址0x001000讀出來的值爲0x21,查看table13-2得知爲CISTPL_FUNCID

       步驟二:讀地址0x001001

              rSDICARG == 0x00200200;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001002;                               

             解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001002:0x00001002的低8位表示從地址0x001001讀出來的值爲0x02,根據table13-1可知CISTPL_FUNCID的tuple body大小爲2字節,讀出來的第一個tuple code號並不爲CISTPL_MANFID(0x20),而且知道其下一個節點的偏移量爲2,需要繼續讀。

       步驟三:讀地址0x001004

              rSDICARG == 0x00200800;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001022;                             

             解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001022:0x00001022的低8位表示從地址0x001004讀出來的值爲0x22,查看table13-2得知爲CISTPL_FUNCE

     步驟四:讀地址0x001005

              rSDICARG == 0x00200A00;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001004;                               

             解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001004:0x00001004的低8位表示從地址0x001005讀出來的值爲0x04,根據table13-1可知CISTPL_FUNCE的tuple body大小爲4字節,讀出來的第一個tuple code號並不爲CISTPL_MANFID(0x20),而且知道其下一個節點的偏移量爲4,需要繼續讀。

    步驟五:讀地址0x00100A

              rSDICARG == 0x 00201400;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001020;                             

             解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001020:0x00001020的低8位表示從地址0x00100A讀出來的值爲0x20,查看table13-2得知爲CISTPL_MANFID

     步驟五:讀地址0x00100C

              rSDICARG == 0x 00201800;

              rSDICCON == 0x00000B74;

              響應

              rSDICSTA == 0x00000A34;

              rSDIRSP0 == 0x00001013;                            

            解讀0x00000B74(略)

             解讀0x00000A34(略)

             解讀0x00001013:0x00001013的低8位表示從地址0x00100C讀出來的值爲0x13,因爲已得到CISTPL_MANFID節點號,根據Table13-1可直接讀出tuple body信息,故此時地址爲0x00100C,而非0x00100B。所以,讀出來的值0x13即爲conexant wifi sdio card ID號,這裏你也可以讀出0x00100B中的值,看CISTPL_MANFID的tuple body總共佔多少字節,即可以把其所有信息讀出來。

             其實,開始我並不知道,這0x13就爲conexant wifi sdio card ID 號,只是我把後續的三個字節讀出來才知道。這後續的三個字節是003826,這咋一看也不知道什麼東東,但是,在我看conexant提供的驅動代碼時,發現其fireware文件名爲03826.h,這樣我就猜出來了。你想想,這CIS裏不放些這樣的信息,放什麼信息呢?後來的操作,證明我的猜測是正確的,在探索真理的過程中,需要摸着石頭過河,既然是探索,就要邊走邊看,柳暗花明的好事是常有的!

   終於把如何讀ID號寫完,我要聽聽音樂了,上上網了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章