这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » PDIUSBD12虚拟串口:给入门者(3)

共8条 1/1 1 跳转至

PDIUSBD12虚拟串口:给入门者(3)

菜鸟
2005-05-20 06:19:45     打赏

PDIUSBD12虚拟串口:给入门者(3)

下面对主要的文件作一下说明,主要的框架和前面的PDIUSBD12鼠标基本 一致,在前面描述过的文件这里不再赘述。

*mainloop.c: 实现USB的拔插操作usb_disconnect/usb_connect; 实现SETUP包的分析setup_handler; 下面的代码测试Host(PC)串口的接收速度,按下'x'键后开始向 串口发送数据,再按一次停止,注意找一个好的串口调试软件, 否则因为该“串口”速度太快,可能引起崩溃。 if(tx_flag) { if(!EP_FULL(5)) { Hal4D12_WriteEndpoint(5,64,s_tx+idx); if(idx>=1024UL*1024*1-64) idx=0; else idx+=64; } } 下面的代码测试串口状态线,uart_state请参考usbcdc11.pdf Page73,Page75 or search "SERIAL_STATE";运行测试程序 CDC_TestApp后,在Brk-D12的控制程序窗口中按下1/2/3/4数字 键,将会在CDC_TestApp窗口上看到状态线的变化。 case '1': // CD // simulate UART state case '2': // DSR case '3': // BREAK case '4': // RI uart_state[8]^=(0x01<<(s[0]-'1')); Hal4D12_ReadLastTransactionStatus(3); Hal4D12_WriteEndpoint(3,10,uart_state); *isr.c 注意在usb_isr()函数中,处理的顺序是先ep?_txdone,然后ep?_rxdone, 大家可以考虑一下为什么。 在ep0_rxdone()函数中,加了ep0_data_ok()函数,因为Host通过Endpoint0 设置串口通讯参数,如波特率等。 注意ep2_rxdone()函数的处理,这个函数显示Host通过“TXD”发送的数据, 这里用了一个宏EP_FULL(),因为Endpoint2(IN/OUT)是双缓冲的,但是只 中断一次,即如果Host成功发送了>64 (<=128)个字节,按照通常的做法, 从FIFO的前两个字节读出的数据长度只有64个,因而必须用EP_FULL判断一 次,看是否还有数据,如果有,再读一次。这也是一些网友不太注意这些 细节,而怀疑芯片是不是有问题,其实芯片没有问题,不过其说明手册有些 不清楚而已。 *chap_9.c 在这个文件中,添加了几个“Acm_”前缀的函数,这些函数的说明在规范中 很清楚,实现起来也比较简单。 *descp_cm.h 这个文件是描述符的定义,基本的描述符号与以前的类似,有几点要说明: 这里CDC实现的串口只是规范中的一个Model之一:Abstract Control Model, (通讯类可不只是串口)。从descp_cm.h中可以看出,其Interface有两个, 分别是Communication Class Interface和Data Class Interface,分别有 1个/2个端点。 下面的代码是一些功能设定(Functional Descriptor),具体意义可以看 规范的P35~页,有兴趣可以仔细阅读。 0x05, 0x24, 0x01, 0x00, 0x01,

0x04, 0x24, 0x02, 0x01,

0x05, 0x24, 0x06, 0x00, 0x01,

*NoStop_2k_Xp.inf 这个文件是安装时需要的,要改一下其中的Device ID和Vendor ID

*CDC_TestApp.rar 里面是串口测试程序,同样是VC6下的,很容易懂,不再细述 *以上程序旨在演示一个虚拟串口的实现,并未对该串口作速度的优化和全双工 的测试,因为这和USB技术关系不大,留给网友自己练手。如果你成功的实现了 这个虚拟串口,会对以后的实际应用有一定帮助,因为对串口操作的资料实在 太多了,你的想法因而得以快速实现。 通过前面USB鼠标/USB虚拟串口的实现,相信各位入门者对“描述符”有了深刻 的认识,“描述符”是一个USB设备的基础,一些花里胡哨的USB设备,实际上 就是在玩“描述符”。但是,你必须做好心理准备,因为后续的帖子,将介绍 如何实现一个Mass Storage设备(U盘/移动硬盘),这些设备的实现,需要繁琐 的协议,不过不要紧,记住,USB只是一个接口而已。 重申一下,最好制作一下Brk-D12的板子(其面积很小,跟其他板子作一个拼板, 没有多少钱:),加上器件,不会超过30RMB),在实现U盘的过程中,你会发现非 常的方便。




关键词: PDIUSBD12     虚拟     串口     入门     实现    

菜鸟
2006-03-14 18:18:00     打赏
2楼
斑竹,你的QQ号码是多少?有空我们交流一下。

菜鸟
2006-03-14 18:20:00     打赏
3楼
我的QQ是274052217

菜鸟
2006-03-17 05:26:00     打赏
4楼
十分感谢斑竹的辛勤劳动,从您的帖子中学到了很多USB虚拟串口的设计方法,但是我只是看到这片贴子的上面PDIUSBD12虚拟串口:给入门者(1),一直没看到(2),请问在哪里能看到PDIUSBD12虚拟串口:给入门者(2)这篇帖子,十分感谢!

菜鸟
2006-03-17 05:40:00     打赏
5楼
请问斑竹,这篇文章中的分析的代码在那里能找到阿?十分想看,能告诉一下吗? mail_shi@126.com

菜鸟
2006-08-22 23:35:00     打赏
6楼
NOSTOP,老大,非常喜欢您在这里发的每一个帖子,估计看过的老手或者新手都会有同感的。支持您用实际的行动老带动广大菜鸟学习USB。发现您这个帖子里的附件没有上传。不知道是不是意外?

菜鸟
2006-09-15 00:17:00     打赏
7楼
感谢版主的辛勤劳动. 感谢版主的辛勤劳动.

院士
2003-09-23 04:13:00     打赏
8楼
恩呢~~~~~~~~

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]