原创 S3c2410_SDIO_调试笔记<三>

2011-8-22 16:05 1866 10 10 分类: 消费电子
作者:下家山
 

每个链节点有三个域:

           第一个域: 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号写完,我要听听音乐了,上上网了。

 

 

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条