【RISC-V MCU CH32V103测评】USB设备从模式测试
[复制链接]
CH32V103CT6上有USB接口,理论上可以进行USB设备的通讯。USB设备分“主模式”和“从模式”两种。主模式主要是读取设备的数据,如USB盘等操作。从模式在开发中十分常用。如:我们可以做一个设备和PC主机通讯。本次就是对CH32V103的从USB模式进行测试。但是wch的文档真的是“十分的匮乏”,哎!真是无奈啊!所以只好用STM32的资料为参考进行测试。
首先,开始研究wch的原始例程C:\CH32V103EVT\EVT\EXAM\USB\USBHD\DEVICE。这个程序过于的简单,很多功能都没有加入,就连最起码的上电测试都没有。只是实现了一个设备自举而已。
void USBHD_IRQHandler (void)
{
USB_DevTransProcess();
}
主要的代码就是这个中断函数USBHD_IRQHandler,这个是整个程序的根本。其中的USB_DevTransProcess()函数中就是一个switch写的一个“状态机”,中断发生时通过各种状态来完成任务。
程序是根据如:#define R8_USB_INT_FG (*((PUINT8V)(0x40023406))) // USB interrupt flag
程序根据这些标记进行相应的处理,wch连包装都懒得做,直接就在程序中用。不过这样也好代码比较简洁。这些标记在主程序当中也是可以使用地。我比较担心这些标记可能在中断完成后会失效,所以就自己加了一个状态机变量。
while(1)
{
if (bDeviceState != 0)
{
printf(" USB EP Test %d\r\n",bDeviceState);
bDeviceState = 0;
}
}
为了测试方便,我把USB端点和状态打印出来。然后在改造一下代码。
我将程序该改造了一下,把发送和接收的数据打印了出来。
可以看到发送的数据和接收的数据一样,说明测试成功。下面我把测试的过程和一些注意的事项说一下。
1、wch提供的源程序,在windows系统联机以后,会自动安装成CH372/CH375类型的驱动。而不是windows 通用的驱动程序。
2、为了测试通讯代码,我使用了自己熟悉的C#代码。但是这些代码需要将设备的驱动改成厂家自定义的,这个当然是必须的,没有谁不希望驱动是自己的。
所以我使用一个开源的USB驱动工具zadig-2.5.exe对程序进行改造。
过程十分的简单,就是选择好“你的设备”,然后替换成需要的驱动,我这里使用的是WINUSB驱动,因为这个驱动比较熟悉而已没有特别的用意。修改好之后,找到ch10x.inf
之后从这个文件中拷贝出 DeviceGUID ,一会PC程序需要该GUID来启动设备。
[Strings]
DeviceName = "CH10x"
VendorName = "WinChipHead"
SourceName = "CH10x Install Disk"
DeviceID = "VID_4348&PID_5537"
DeviceGUID = "{894B4750-1311-4101-9566-757754FEE942}"
3、打开VS2015生成一个C#程序,我使用了MadWizard的WinUSBNet库,所以要在项目中将WinUSBNet库引入。
程序中利用WINUSB函数将数据发出去。整个测试完成
|