新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2022-1-28
- 在线时间
- 6 小时
|
1金钱
使用正点原子提供的源码 ft5x06.c 文件,在下面的代码中加入打印后,发现返回值始终是 0,根本不像视频可以读到中断模式寄存器的值。怀疑这里的操作根本连 I2C 写都没成功,现在根本没办法判断对 ft5406 的操作是否成功,对两个寄存器的读都是 0 值,不管写入什么样的值:
/* 4,初始化FT5X06 */
ft5x06_write_reg(&ft5x06, FT5x06_DEVICE_MODE_REG, 0); /* 进入正常模式 */
ft5x06_write_reg(&ft5x06, FT5426_IDG_MODE_REG, 1); /* FT5426中断模式 */
ret = ft5x06_read_reg(&ft5x06, FT5426_IDG_MODE_REG);
printk("ret = %#x", ret);
I2C 读写代码是正点原子原装的,代码如下:
static int ft5x06_read_regs(struct ft5x06_dev *dev, u8 reg, void *val, int len)
{
int ret;
struct i2c_msg msg[2];
struct i2c_client *client = (struct i2c_client *)dev->client;
/* msg[0]为发送要读取的首地址 */
msg[0].addr = client->addr; /* ft5x06地址 */
msg[0].flags = 0; /* 标记为发送数据 */
msg[0].buf = ® /* 读取的首地址 */
msg[0].len = 1; /* reg长度*/
/* msg[1]读取数据 */
msg[1].addr = client->addr; /* ft5x06地址 */
msg[1].flags = I2C_M_RD; /* 标记为读取数据*/
msg[1].buf = val; /* 读取数据缓冲区 */
msg[1].len = len; /* 要读取的数据长度*/
ret = i2c_transfer(client->adapter, msg, 2);
if(ret == 2) {
ret = 0;
} else {
ret = -EREMOTEIO;
}
return ret;
}
static unsigned char ft5x06_read_reg(struct ft5x06_dev *dev, u8 reg)
{
u8 data = 0;
ft5x06_read_regs(dev, reg, &data, 1);
return data;
#if 0
struct i2c_client *client = (struct i2c_client *)dev->client;
return i2c_smbus_read_byte_data(client, reg);
#endif
}
|
|