我正在使用MAX77651设备在I2c中编程FT4222。我想能在登记簿上写字。
我能够阅读寄存器,所以我知道我没有任何硬件问题。要在寄存器中阅读,我这样做:我首先发送我想要读的寄存器,然后我只读里面的内容。
为了写,我试图把我想写的寄存器发送到我想写的地方,然后我发送我想要放在寄存器中的数据。但是,当我通过阅读检查之后,我没有得到预期的结果。
下面是我尝试写和读的程序的一部分:
uint8 resultat=0x11;
uint8 *p_resultat=&resultat;
int chiffre = 8;
uint16 bytesToWrite2 = 1;
uint16 bytesWritten2=1;
uint8 valeur= 0x06; // Adress of register
uint8 *p_valeur=&valeur;
uint16 slaveAddr = 0x48;
// ***** reading test of 0x06 : expected value : 0xFF
FT4222_I2CMaster_Write(ftHandle,slaveAddr,p_valeur,
bytesToWrite2,&bytesWritten);
chiffre = FT4222_I2CMaster_Read(ftHandle,slaveAddr,p_resultat,1, &bytesRead);
printf("The content of the register %02X is : %02X \n " , valeur , resultat);
printf("reading success if : %d = 0 \n " , chiffre);
//********** Writting test to the register 0x40
***********************************************//
valeur = 0x40;
FT4222_I2CMaster_Write(ftHandle,slaveAddr,p_valeur,
bytesToWrite2,&bytesWritten);
valeur = 0x1F;
FT4222_I2CMaster_Write(ftHandle,slaveAddr,p_valeur,
bytesToWrite2,&bytesWritten);
//*************** Reading of the register 0x40
*******************************************//
valeur= 0x40;
FT4222_I2CMaster_Write(ftHandle,slaveAddr,p_valeur,
bytesToWrite2,&bytesWritten);
chiffre = FT4222_I2CMaster_Read(ftHandle,
slaveAddr,p_resultat,1, &bytesRead);
printf("The content of the register %02X
is : %02X \n " , valeur , resultat);
printf("reading success if : %d = 0 \n " , chiffre);该代码应该在寄存器0x40中显示1F,但事实并非如此,以下是我得到的:
The content of the register 06 is : FF
reading success if : 0 = 0
The content of the register 40 is : 00
reading success if : 0 = 0 我的问题很简单,我应该怎么做,按照什么顺序,才能在登记簿上写好?
Ps:我没有把我的全部代码,因为它主要是关于FT4222的配置,并包括,没有相关的解决我的问题。
发布于 2017-11-06 19:04:48
请参阅MAX77651数据表第76页中的“写入单个寄存器”一节。
写入字节协议如下:
您正在尝试用两个连续调用FT4222_I2CMaster_Write()的方式写入内部寄存器。您期望第一次写入选择寄存器地址,第二次写入加载数据。但这不是它的工作方式。每次对FT4222_I2CMaster_Write()的调用都会发送一个开始和停止,因此您的连续呼叫将导致寄存器地址和数据之间的停止/启动。相反,您应该对FT4222_I2CMaster_Write()进行一次调用,并提供注册地址和数据。也许是这样的。
uint8_t buf[2];
buf[0] = register_addr;
buf[1] = data;
FT4222_I2CMaster_Write(ftHandle, slaveAddr, buf, 2, &bytesWritten);顺便说一句,你的阅读可能也不正确。请参阅MAX77651数据表的“从单个寄存器中读取”部分。您可能需要实现一个寄存器读取,调用FT4222_I2CMaster_WriteEx(),然后是FT4222_I2CMaster_ReadEx(),如LibFT4222用户指南第32页中的“I组合消息支持”示例所示。
https://stackoverflow.com/questions/47138737
复制相似问题