采用STM32F103+CH374T,寄存器写入0x55,读出的值也是0x55,写入0xAA,读出的值也是0xAA,不知道是硬件问题还是软件问题。
参考的CH375代码,是不是和CH374对应的CMD_CHECK_EXIST定义地址不一样?
2011-20120929XD
/* CH375初始化代码 */
uint8_t mInitCH375Host( void ) /* 初始化CH375 */
{
uint8_t i,s,res;
uint8_t sssBuf[256];
delay_ms(50); /* 上电后至少延时50ms操作 */
CH374_PORT_INIT( ); /* 接口硬件初始化 */
//Write374Byte( CMD_CHECK_EXIST, 0x65 );/* 测试单片机与CH375之间的通讯接口 */
//res = Read374Byte(CMD_CHECK_EXIST);
//Write374Byte( CMD_CHECK_EXIST,0x65 ); /* 测试单片机与CH375之间的通讯接口 */
//前64个寄存器值都读一遍并显示
for(i=0;i!=32;i++)
{
s=Read374Byte(i);
itoa(s,sssBuf,10);
TextOut(i*24,1, FONT_GB16X16,sssBuf);
}
for(i=0;i!=32;i++)
{
s=Read374Byte(i+32);
itoa(s,sssBuf,10);
TextOut(i*24,20, FONT_GB16X16,sssBuf);
}
Write374Byte( CMD_CHECK_EXIST,0x55 ); /* 测试单片机与CH375之间的通讯接口 */
res = Read374Byte(CMD_CHECK_EXIST);
{
TextOut(200,40, FONT_GB16X16, "CMD_CHECK_EXIST=");
itoa(res,sssBuf,10);
TextOut(340,40, FONT_GB16X16, sssBuf);
}
Write374Byte( CMD_CHECK_EXIST,0xAA ); /* 测试单片机与CH375之间的通讯接口 */
res = Read374Byte(CMD_CHECK_EXIST);
{
TextOut(400,40, FONT_GB16X16, "CMD_CHECK_EXIST=");
itoa(res,sssBuf,10);
TextOut(540,40, FONT_GB16X16, sssBuf);
}
Write374Byte( CMD_SET_USB_MODE, 0x06 ); /* 设备USB工作模式 */
res = Read374Byte(CMD_SET_USB_MODE);
if ( res == CMD_RET_SUCCESS ) return( USB_INT_SUCCESS );
else
{
TextOut(200,60, FONT_GB16X16, "CMD_SET_USB_MODE=");
itoa(res,sssBuf,10);
TextOut(340,60, FONT_GB16X16, sssBuf);
return( ERR_USB_UNKNOWN ); /* 设置模式错误 */
}
}
374和375是不一样的。CMD_CHECK_EXIST是命令码,375内部是含有固件的。374是基于内部寄存器的读写实现USB主机设备的操作。故374不可以使用CMD_CHECK_EXIST。
至于374如何实现主设功能,可参考CH374DS1.PDF,CH374DS2.PDF手册,以及CH374EVT提供的例程源码