代码:soft_check_self的时候主动发送也就是去读IIC读0X8F,返回值如果是154那就是好的按键板
uint8_t cy3116_verification( void )
{
uint8_t id =0;
cy3116_read(tranPort,DEVICE_ADDR<<1,0x8f ,&id , 1);
if( id != 154)
{
return FALSE;
}
return TRUE;
}
看datasheet:
继续看IIC函数:
cy3116_read(tranPort,DEVICE_ADDR<<1,0x8f ,&id , 1);
static uint8_t cy3116_read(void* port,uint8_t slaveAdr,uint16_t subAdr,uint8_t *buff,uint16_t bufLen)
第一个参数是:指定STM32里面的哪一路IIC的
第二个参数是:器件的地址#define DEVICE_ADDR (0x37u)//-----------------------------U代表无符号整数
为什么<<1?
第三个参数是:器件内部的地址,已经知道了ID号是0x8f
后面2个是一个数组。
现在分析问题2
参考以前的代码:
_I2C_send_byte((__HTK_DEVICE_ADDR<<1)|0) ) // 发送器件地址+写命令
_I2C_send_byte((__HTK_DEVICE_ADDR<<1)|1) ) // 发送器件地址+读命令
所以你明白了 这个器件和以前的是读写是反的!!!!
那么最后一个问题是:地址怎么确定的?
找了这个 默认值的地方 55就是0x37吧
看看
void touch_key_config( void )
{
uint8_t saveCmd = 0x02;
uint8_t resert = 0xFF;
if( cy3116_verification() != TRUE)
{
log_err("触摸芯片加载错误\n");
return;
}
HAL_IWDG_Refresh(&hiwdg);
cy3116_write(tranPort , DEVICE_ADDR ,0x00,CY8CMBR3116_config,128);
sys_delay(100);
HAL_IWDG_Refresh(&hiwdg);
cy3116_write(tranPort , DEVICE_ADDR ,0x86,&saveCmd,1);
sys_delay(100);
HAL_IWDG_Refresh(&hiwdg);
cy3116_write(tranPort , DEVICE_ADDR ,0x86,&resert,1);
sys_delay(100);
HAL_IWDG_Refresh(&hiwdg);
}
cy3116_write(tranPort , DEVICE_ADDR ,0x00,CY8CMBR3116_config,128);
cy3116_write(tranPort , DEVICE_ADDR ,0x86,&saveCmd,1);
写了很多信息进去。地址看上面的。