OpenEdv-开源电子网
标题:
6ull的7寸屏 I2C读写问题,写寄存器无法判断是否成功
[打印本页]
作者:
cocosleep
时间:
2022-1-29 20:12
标题:
6ull的7寸屏 I2C读写问题,写寄存器无法判断是否成功
使用正点原子提供的源码 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
=
&
reg
;
/* 读取的首地址 */
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
}
作者:
myqf
时间:
2022-1-29 20:12
cocosleep 发表于 2022-1-29 22:32
已经解决,视频和教程都有问题 FT5426并没有中断配置寄存器 0xa4,默认就是中断模式,并不需要配置,而且在 ...
刚我也遇到一样的问题,问了店铺那边才知道现在的开发板是不用ft驱动了,更换gt驱动,一直以为我代码写错了!!!
作者:
cocosleep
时间:
2022-1-29 22:32
已经解决,视频和教程都有问题 FT5426并没有中断配置寄存器 0xa4,默认就是中断模式,并不需要配置,而且在 FT5x06 系列中,0xa4 也是只读寄存器,并不需要去配置,不知道视频和正点原子提供的源码中为什么要这么操作,而且居然还能设置进去值。
欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/)
Powered by Discuz! X3.4