对CH376S进行复写测试,主要是为了验证读写函数是否正常使用,测试发现写入CHECK_EXIST命令以后再写入数据0xaa,然后进行读取,读到的数据还是0xaa.测试失败。命令的返回值应该是写入值的按位取反才对,也就是读到的数据应该是0x55。请问这可能是什么原因造成的??
xWriteCH376Cmd(CHECK_EXIST); //发送命令
xWriteCH376Data(0xaa); //写入数据0xaa
temp = xReadCH376Data(); //读取写入数据取反结果,即0xaa取反应为0x55
if(temp == 0x55) printf("测试工作状态:成功\n");//打印测试结果
else printf("测试工作状态:失败%d\n",temp);
你用的是什么通讯接口?发送命令的时序对不对?一般命令执行时间是1.5us,等待1.5us再读数据看看。
并口进行通信,我的时钟频率是160M
void xWriteCH376Cmd(unsigned char command)
{
//A0
PIO_USB_A0=1;
//DB DIR output
PIO_USB_DB_DIR=0xff;
PIO_USB_DB=command;
delay();
PIO_USB_CS=0;
PIO_USB_WR=0;
delay();
PIO_USB_WR=1;
PIO_USB_CS=1;
}
/*
* === FUNCTION ========================================================
* Name: delay
* Description:
* =======================================================================
*/
void delay(void)
{
int i;
for(i=0;i<100;i++);
}
/*
* === FUNCTION ========================================================
* Name: xWriteCH376Data
* Description:
* =======================================================================
*/
void xWriteCH376Data(unsigned char data)
{
//A0
PIO_USB_A0=0;
//DB DIR output
PIO_USB_DB_DIR=0xff;
PIO_USB_DB=data;
delay();
PIO_USB_CS=0;
PIO_USB_WR=0;
delay();
PIO_USB_WR=1;
PIO_USB_CS=1;
}
/*
* === FUNCTION ========================================================
* Name: xReadCH376Data
* Description:
* =======================================================================
*/
unsigned char xReadCH376Data(void)
{
unsigned char data=0;
//A0
PIO_USB_A0=0;
//DB DIR output
PIO_USB_DB_DIR=0;
PIO_USB_CS=0;
PIO_USB_RD=0;
delay();
data=PIO_USB_DB;
delay();
PIO_USB_RD=1;
PIO_USB_CS=1;
return data;
}
读写函数如下
你的读写函数开头最好初始化一下,例如加上CS=1,RD=1,WR=1;另外你把时钟速度放慢一点事实,我之前说过一条命令响应时间至少1.5us,这个你要保证。