以前在系统上加上USB功能,基本上是用USB转串口使用PL2303这样的芯片。或者使用USB HOST芯片如CH376这样的芯片。主要原因是不愿意编PC端的驱动程序。最近发现微软在WINDOWS上实现了一个USBSER 的CDC类。意思是当USB设备连接到系统时,将USB虚拟成一个WINDOWS下的串口。这样不用编别的驱动。原来的串口功能的应用程序都可以直接使用。我最先看到的是在STM32上实现的
nuvoton提供的程序中NUC100SeriesBSP_CMSIS.zip 中Smpl_VCOM也实现了这个功能。nuvoton提供的代码并没有太多的解释。正好我有一块新唐的NUC120的板子。刚好可以试一试。
smpl_vcom的基本功能是将USB虚拟为串口,利用NUC120上的另一个串口,实现从真实串口到虚拟串口之间的双向通信。我的板子上没有把串口接出来,当然不能直接用这个程序。
将程序稍稍修改了一下。
while(gu32RxSize==0)
DrvUSB_DataIn(BULK_IN_EP_NUM, "MASI-ISAM",strlen("MASI-ISAM"));
/* Process the Bulk out data */
if(gu32RxSize)
{
gu32RxSize = 0;
/* Ready to get next BULK out */
DrvUSB_DataOutTrigger(BULK_OUT_EP_NUM, BULK_EP_MXPLD);
}
当USB收到数据后,发一些东西出去。
一直用串口的思维来看USB。其实完全不对。串口通信只要设置好波特率数据位等参数,就可以收发了。USB却是一个总线方式的。是基于包和协议的。粗粗地可以这样理解。
USB 通信是一个HOST 连上若干个DEVICE。 按现在的USB2.0协议,一个HOST可以最多有127个device. PC机上有些鼠标,键盘,打印机,摄头,网卡都可以是USB device,127个应该足够了。
每个device可以有几个ENDPOINT,翻译成端口吧。各个端口可以有不同的作用。
不断连载中
southcreek 2012-6-2 10:42
用户377235 2012-5-19 11:46
gu32RxSize这个是代表什么呢?
用户741296 2008-12-9 16:41