CH563 USB数据交互测试 目的:实验实现CH563通过USB接口和PC进行数据下载和上传。
测试前准备:
1. 演示开发板;
2. DEBUG372 的VisualStudio工程或测试程序;(使用VS2010编译后,该程序有BUG。)
3. CH563的CH563EVT\EXAM\USB\DEVICE\CH372 单片机程序。
测试开发环境:Win7 64bit, uVision4, VS2010.
一.测试过程
所有功能修改完毕后。
Step1:启动CH563演示板;
Step2:在PC的控制面板可以看到外部接口\USB CH372/CH375.
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps74B7.tmp.jpg
Step3: 启动DEBUG372.exe。然后点击“启动设备”;点击“下传”,将数据发送到MCU;点击“上传”,可以收到从MCU反馈回来的数据。结果如下图。 下传的6个字节的数据,上传后,每个字节的数据被增加了1.
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps74D7.tmp.jpg
这样就实现了数据上传和下载。
二.程序修改
下面介绍程序的修改。
使用VS2010 修改PC的程序,需要将显示函数改为:
void ShowUpdata(PCHAR addbuf,ULONG AddLen){//向上传数据框内添加数据
int TextLen;
TextLen = ::GetWindowTextLength(GetDlgItem(WndHandle,IDC_UPDATABuf));
if(TextLen>0){
char prestr[2048];
::GetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr,2048);
strncat_s(prestr,"\r\n",2);
strncat_s(prestr,addbuf,AddLen+1);
::SetDlgItemText(WndHandle,IDC_UPDATABuf,(PCHAR)prestr);
}
else{//当前数据框内没有数据
::SetDlgItemText(WndHandle,IDC_UPDATABuf,addbuf);
}
return;
}
原来的代码内存处理有问题。这个代码不是完美的,但是演示使用没问题。
使用uVision4修改单片机程序,修改的地方如下:
UINT8 USB_Recv_Buf[ 512 ]; //UINT32 USB_Recv_Buf[ 512/4 ]; /* USB设备数据接收缓冲区 */
UINT8 USB_Tran_Buf[ 512 ]; //UINT32 USB_Tran_Buf[ 512/4 ]; /* USB设备数据发送缓冲区 */
void USBDev_EP2_OUT_Deal( void )
{
UINT32 len;
#if MY_DEBUG_PRINTF
printf(" USBDev_EP2_OUT_Deal... \n");
#endif
/* 从下传缓冲区中提取数据 */
if( gUsbSpeed == USB_DEV_SPEED_HS ) /* 高速模式 */
{
len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 512, (PUINT8)USB_Recv_Buf ); /* 读取EP2_OUT包 */
}
else
{
len = USBDev_RD_FIFOx( USB_DMA_ACC_F2, 64, (PUINT8)USB_Recv_Buf ); /* 读取EP2_OUT包 */
}
/* 将数据取反后通过上传端点返回 */
gRecvLen = len;
for( len = 0; len < gRecvLen; len++ )
{
USB_Tran_Buf[ len ] = USB_Recv_Buf[ len ]+1; //USB_Tran_Buf[ len ] = ~USB_Recv_Buf[ len ];
}
USBDev_EP2_IN_Deal( );
}
将缓冲区的数据修改为UINT8, 缓冲区按照字节进行修改。
后续问题:在这种情况下,设备数据交互的速度如何,实在不知道如何测试。
Any question :QQ 67259275, mail:67259275@qq.com
|
|