原创 USB学习二:读取ID值

2008-7-15 18:46 7900 12 17 分类: 通信

USB学习二:读取ID<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


       题记:熟悉了PDIUSBD12的硬件电路后,就应该进入USB的软件编程部分了。我想大家在初学USB时都会遇到和我一样的困惑:拿起USB协议的相关文档埋头苦看,看半天还是什么又枚举又配置的看是看了,可是回头来好像什么都不懂;理论不行咱就动手吧,可是一找参考程序,可苦了咱,一上来就是一大堆的共同体,谁记得了啊,看了这个就忘了那个,到头来和看书好像一个效果。貌似很复杂很庞大的USB驱动,呵呵,我们不能一次性消化你,我就肢解了你再消化!那么第一个软件程序就来个最简单的(圈圈都给我们写好了程序了,还愁什么),对,就读取D12ID值。


 


       先了解下什么是ID(特权同学也是现学现卖,不好意思了):


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图


       我也不是弄得特别懂,反正最后读出来的ID=0x1012那就对了。


       还得做个说明,我用的不是圈圈的USB板子,外围电路搭的也不一样,而是如笔记一里把D12做外部RAM扩展用了。另外,由于手头串口线恩多就是没有一条合适的,所以通过串口精灵显示的部分就简单的改由1602LCD显示ID值了。但是基本的思路都是相通的,要的就是这个!


       贴个主程序:


 


///////////////////////////////////////////////


//函数:main


//说明:主程序


//入口:无


//返回:无


///////////////////////////////////////////////


void main(void)


{


       init_lcd1602();             //初始化lcd1602


       while(1)


       {    


              display_id(read_d12_id()); //读取并显示ID


       }


}


 


       主程序一贴就知道这个实验会是超级简单(入门嘛呵呵)。重点是来看USB的读写指令数据部分的驱动程序。


 


先看宏定义:


/*D12寄存器的地址分配*/


/*xdata ----> 可寻址片外ram (64k地址范围:0000H-FFFFH)*/


#define D12_DATA            0xEFF0  //偶数是数据地址


#define D12_COMMAND            0xEFF1  //奇数是命令地址


 


       上面为什么如此定义呢,因为笔记一里提到过,D12是被做外部RAM扩展了,P0口接的是D128bit数据端口,而CS_N被接到了P2.4口,所以寻址时CS_N一定必须为低,也即P2=EFP2P1就构成了外部RAM的地址。


 


///////////////////////////////////////////////


//函数:write_d12


//说明:把数据或者命令送入D12


//入口:uint addr:送入D12的地址 D12_DATA或者D12_COMMAND


//            uchar dat:送入D12的数据或者指令


//返回:无


///////////////////////////////////////////////


void write_d12(uint addr, uchar dat)


{


       *((uchar xdata *) addr) = dat;   


//addr就是外部RAM的地址,把dat赋给这个地址即可


}


 


///////////////////////////////////////////////


//函数:read_d12


//说明:从D12读出数据


//入口:uint addr:送入D12的地址


//返回:uchar *addr:返回一字节数据


///////////////////////////////////////////////


uchar read_d12(uint addr)


{


       return *((uchar xdata *) addr);


                     //返回addr这个外部RAM上的数据,addr只能是D12_DATA


}


 


       再来看读取ID这个程序是如何实现的:


 


///////////////////////////////////////////////


//函数:read_d12_id


//说明:从D12读出其ID


//入口:无


//返回:uint id:USBID


///////////////////////////////////////////////


uint read_d12_id(void)


{


       uchar idtem1=0,idtem2=0;


       uint id="0";


       write_d12(D12_COMMAND,0xfd);      //发送读取ID的指令


       idtem1 = read_d12(D12_DATA);            //读第一个字节


       idtem2 = read_d12(D12_DATA);            //读第二个字节


       id = idtem1+(idtem2*256);               //把连个字节赋给一个uint型变量


       return id; //返回读出的ID


}


 


       显示效果:



点击看大图 


       挺简单的程序,但是在这个程序中,可以明白单片机是如何往D12写指令,然后紧跟着再读或者写数据。在这个基础上,要实现一个完整的USB通讯,还要继续在写指令和读写数据上做文章,在对D12初始化后,重点是在于读取D12中断寄存器然后对其进行相应的操作。


 


 

文章评论5条评论)

登录后参与讨论

ilove314_323192455 2011-3-8 21:24

以赛亚书是《圣经》中的一卷。你可以到这个链接看看:http://www.recoveryversion.com.tw/gb/bible_menu.php

用户241034 2011-3-8 16:18

拿里有这本书!能不能给个链接! 没怎么看懂!想研究研究!

ilove314_323192455 2010-8-10 22:06

是的,谢谢提醒

用户403143 2010-8-10 13:29

《创世纪》应为《创世记》的笔误

ilove314_323192455 2010-8-10 12:56

纠正一个词,圣经能够带给人的比“道理”更贴切的是“真理”。

用户1584993 2010-8-10 09:58

航航哥送的圣经一直都还没有开始看,希望我看的时候能够从中领悟些道理吧,其实人还是需要有信仰的

用户212728 2009-9-20 15:52

看了你的三篇文章,才对usb底层有了一定的了解,前几天看程序根本就不知道从哪入手 文章确实适合新手学习!谢谢你!我会接着加油的

ilove314_323192455 2008-10-3 07:47

呵呵,谢谢支持,最近忙别的了,没有空继续USB了

jizzll_617398179 2008-10-2 21:31

最近没有玩USB了么?还想跟你混哦,因为你从新手的角度分析,能让人深入

ilove314_323192455 2008-7-16 07:04

不好意思啊,圈圈的板子我一次没焊成功,而且没有usb加长线调试很不方便,等有空了慢慢再调试
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
5
12
关闭 站长推荐上一条 /2 下一条