不知道如何可以让电容屏触摸起来, 因为电阻屏直接用tslilb就可以了
离线
裸奔的话,xboot群文件有人分享
离线
你的是什么驱动芯片?gt911?
我这里在内核中配置了FT5X06 我用的是这个系列的
然后我I2C用的是PB8 和Pb9
离线
那现在驱动了吗?启动log有没有成功的信息? /dev/input/ 目录下面eventX设备?
打印的信息 在/dev/input里面有一个event0
但是从这个打印信息来看 好像还是I2C0在起作用啊
最近编辑记录 无情一刀 (2018-11-14 09:32:48)
离线
对,看起来 I2C1 根本没有起作用, 记得 I2C引脚(PB8, PB9)要上拉哦.
再不行只能先接 I2C0了。
I2C0现在没法接了 测试了下是中断没有起来 我现在中断脚用的是PB3 现在就是不知道中断脚不知道是在哪里配置
离线
那进 FT5X06 中断程序, 看 request_irq 中断申请通过了没有, 跟踪一下这几行代码,看看什么情况.
你说的这个request_irq 是指那个文件里面的 I2C-core.c里面没有你说的这个函数
在配置里面我吧那个NS2009的去掉了 选择的是那个FT5X06 发现在/dev/input中没有那个event那个设备
离线
https://github.com/torvalds/linux/blob/master/drivers/input/touchscreen/edt-ft5x06.c
https://github.com/Lichee-Pi/linux/blob/zero-4.13.y/drivers/input/touchscreen/edt-ft5x06.c
跟踪一下这个:
error = devm_request_threaded_irq(&client->dev, client->irq,
NULL, edt_ft5x06_ts_isr, irq_flags,
client->name, tsdata);
离线
https://github.com/torvalds/linux/blob/master/drivers/input/touchscreen/edt-ft5x06.c
https://github.com/Lichee-Pi/linux/blob/zero-4.13.y/drivers/input/touchscreen/edt-ft5x06.c跟踪一下这个:
error = devm_request_threaded_irq(&client->dev, client->irq,
NULL, edt_ft5x06_ts_isr, irq_flags,
client->name, tsdata);
现在是FT5x06是有一个复位脚我接到PB2管脚 在时序中 要一个10ms时间的拉低 ,就是这个程序在内核里面有写 吗 还是配置这个管脚就可以;
离线
晕哥 说:https://github.com/torvalds/linux/blob/master/drivers/input/touchscreen/edt-ft5x06.c
https://github.com/Lichee-Pi/linux/blob/zero-4.13.y/drivers/input/touchscreen/edt-ft5x06.c跟踪一下这个:
error = devm_request_threaded_irq(&client->dev, client->irq,
NULL, edt_ft5x06_ts_isr, irq_flags,
client->name, tsdata);现在是FT5x06是有一个复位脚我接到PB2管脚 在时序中 要一个10ms时间的拉低 ,就是这个程序在内核里面有写 吗 还是配置这个管脚就可以;
tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
"reset", GPIOD_OUT_HIGH);
if (IS_ERR(tsdata->reset_gpio)) {
error = PTR_ERR(tsdata->reset_gpio);
dev_err(&client->dev,
"Failed to request GPIO reset pin, error %d\n", error);
return error;
}
可能需要在 dts 提供复位引脚
离线
这样写的可以吗
离线
https://whycan.cn/files/members/1116/I2C.png
应该写在 FT5X06 里面, 还得在request reset/irq 那里加调试语句,看看有没有执行。
我这个真不知道怎么去定义了 因为还要有名字 这个我不是很懂
离线
这是在里面添加的reset脚
在Edt-ft5x06.c中这个函数中edt_ft5x06_ts_probe加了打印 根本就没有进来
离线
得找下在那里调用设备树读写函数, 确认是 "resets"?在哪个文件里面写的 "resets" ?
这个驱动我也没有弄过,也只能一步一步跟踪.
我改为reset了
tsdata->reset_gpio = devm_gpiod_get_optional(&client->dev,
"reset", GPIOD_OUT_HIGH);
现在就是配置了这些了 在/dev中都没有看到input;
最近编辑记录 无情一刀 (2018-11-14 17:48:57)
离线
获取gpio函数devm_gpiod_get_optional(): https://blog.csdn.net/kris_fei/article/details/78932904
例如在显示驱动看到的去查找名字为”enable”的gpio
panel-simple.c:panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", 0);
在使用mipi屏幕的主dts就有enable pin的定义
rk3399-firefly-mipi.dts:enable-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
所以你应该改成这样:
reset-gpios:
然后看下 devm_gpiod_get_optional 是否执行成功,等你好消息.
离线
现在就是这个函数edt_ft5x06_ts_probe根本就没有进去 所以还是这里配置的有问题 没有匹配到
离线
现在是进到这个函数edt_ft5x06_ts_probe
但是在这里 这里出现错误了touchscreen probe failed 还要查下edt_ft5x06_ts_identify这个函数里面有什么没有配置
error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
if (error) {
dev_err(&client->dev, "touchscreen probe failed\n");
return error;
}
离线
现在是进到这个函数edt_ft5x06_ts_probe
但是在这里 这里出现错误了touchscreen probe failed 还要查下edt_ft5x06_ts_identify这个函数里面有什么没有配置
error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
if (error) {
dev_err(&client->dev, "touchscreen probe failed\n");
return error;
}
上面是不是去掉空格, 就可以进入这里?
这里看起来是校验 ft5306 里面的固件版本?
跟进去看看吧
离线
无情一刀 说:现在是进到这个函数edt_ft5x06_ts_probe
但是在这里 这里出现错误了touchscreen probe failed 还要查下edt_ft5x06_ts_identify这个函数里面有什么没有配置
error = edt_ft5x06_ts_identify(client, tsdata, fw_version);
if (error) {
dev_err(&client->dev, "touchscreen probe failed\n");
return error;
}上面是不是去掉空格, 就可以进入这里?
这里看起来是校验 ft5306 里面的固件版本?
跟进去看看吧
是的 还有那个横岗
离线
一进来去读取触摸信息就报错了 但是我那个触摸的芯片的地址 也是对的额
离线
无情一刀 说:一进来去读取触摸信息就报错了 但是我那个触摸的芯片的地址 也是对的额
逻辑分析仪抓i2c,再跟进那个probe函数
现在交硬件的抓I2C 现在就是连reset有拉低了 这管脚正常 ,至于其他的时序 还抓不到
离线
离线
有上拉 刚上电的时候是高电平的 dts里面那个地址 是对的 0x38
最近编辑记录 无情一刀 (2018-11-15 15:56:59)
离线
https://github.com/ev3dev/i2c-tools/tree/ev3dev-stretch/tools
https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/
i2cutils 工具了解一下,
用 i2cdetect 命令可以遍历总线上所有的i2c设备,
把逻辑分析仪挂总线上面可以抓到 i2cdetect 命令发出来的数据.
或者把 ns2009 飞线到这组 i2c1 上面, 然后看是否能把 ns2009驱动起来,
用于判断硬件软件环境是否正常.
离线
https://github.com/ev3dev/i2c-tools/tree/ev3dev-stretch/tools
https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/i2cutils 工具了解一下,
用 i2cdetect 命令可以遍历总线上所有的i2c设备,
把逻辑分析仪挂总线上面可以抓到 i2cdetect 命令发出来的数据.或者把 ns2009 飞线到这组 i2c1 上面, 然后看是否能把 ns2009驱动起来,
用于判断硬件软件环境是否正常.
就是在里面也定义了串口0 定义的也是P8P9和这个I2C重复了 但是我没有接串口0 这样有影响吗
离线
晕哥 说:https://github.com/ev3dev/i2c-tools/tree/ev3dev-stretch/tools
https://kernel.googlesource.com/pub/scm/utils/i2c-tools/i2c-tools/i2cutils 工具了解一下,
用 i2cdetect 命令可以遍历总线上所有的i2c设备,
把逻辑分析仪挂总线上面可以抓到 i2cdetect 命令发出来的数据.或者把 ns2009 飞线到这组 i2c1 上面, 然后看是否能把 ns2009驱动起来,
用于判断硬件软件环境是否正常.就是在里面也定义了串口0 定义的也是P8P9和这个I2C重复了 但是我没有接串口0 这样有影响吗
有影响,不能这么复用.
离线
我在uboot和内核将配置串口0 全部屏蔽了 还是一样的结果
离线
我在uboot和内核将配置串口0 全部屏蔽了 还是一样的结果
按晕哥31楼的方法,i2cdetect+逻辑分析仪。
离线
现在I2C0 和1 都有 我用工具看1的时候
离线
无情一刀 说:现在I2C0 和1 都有 我用工具看1的时候
https://whycan.cn/files/members/1116/tool.png设备树里面移除 FT5036的驱动,然后再用 i2cdetect 搜索一下,看能否找到 FT5036 在对应的地址里面.
还有把那个内核信息屏蔽一下, 否则数据都看不清了。
他出现这样的打印说明是检测到了I2C1?
离线
晕哥 说:无情一刀 说:现在I2C0 和1 都有 我用工具看1的时候
https://whycan.cn/files/members/1116/tool.png设备树里面移除 FT5036的驱动,然后再用 i2cdetect 搜索一下,看能否找到 FT5036 在对应的地址里面.
还有把那个内核信息屏蔽一下, 否则数据都看不清了。
他出现这样的打印说明是检测到了I2C1?
驱动出错了, 要跟踪一下.
搜了一下全志的I2C使用的真是Marvell 的IP:
I2C: mv64xxx compatible logic, port done by Maxime
http://linux-sunxi.org/User:Wens
离线
不是很明白你说的这里
搜了一下全志的I2C使用的真是Marvell 的IP:
离线
现在一直是在request irq就报报错
离线
前面那个问题怎么解决的?
error = devm_request_threaded_irq(&client->dev, client->irq,
NULL, edt_ft5x06_ts_isr, irq_flags,
client->name, tsdata);
if (error) {
dev_err(&client->dev, "Unable to request touchscreen IRQ.\n");
return error;
}
这里申请中断出错了, 搜一下错误号 -16 是神马错误.
感觉是你的 dts 配错了,
贴出来看下.
离线
离线
这里是一直就有的 没有改
离线
如果我设置的是pb3为中断管脚 我这里要怎么去修改了 下图是GPX1-6为中断脚
离线
根据这个帖子: http://bbs.ilichee.cc/t/how-to-assign-gpio-interrupt-solved/172
我总结了一下:
&i2c1 {
status = “okay”;edt_ft5x06: edt_ft5206@38 {
compatible = "edt,edt-ft5206";
reg = <0x38>;
interrupt-parent = <&pio>;
interrupts = <1 3 IRQ_TYPE_EDGE_FALLING>; /* PB3 */
touchscreen-size-x = <800>;
touchscreen-size-y = <480>;
status = "okay";
};
};
打开文件 : drivers/pinctrl/sunxi/pinctrl-sun8i-v3s.c
原来内容:
static const struct sunxi_pinctrl_desc sun8i_v3s_pinctrl_data = {
.pins = sun8i_v3s_pins,
.npins = ARRAY_SIZE(sun8i_v3s_pins),
.irq_banks = 2,
.irq_read_needs_mux = true
};
需要改成这样:
static const struct sunxi_pinctrl_desc sun8i_v3s_pinctrl_data = {
.pins = sun8i_v3s_pins,
.npins = ARRAY_SIZE(sun8i_v3s_pins),
.irq_banks = 2,
.irq_bank_base = 1,
.irq_read_needs_mux = true
};
添加 .irq_bank_base = 1,
最后那个楼主说问题解决了.
离线
36楼那个问题怎么解决的?
因为我他那里是读取数据 我在probe中暂时不要读取数据
所以我我就这句话先屏蔽掉edt_ft5x06_ts_identify
离线
现在就是IRQ一直弄不上去 还是出现失败
离线
这是在内核dtsi中配置的i2c1 这里对那个dts有影响吗
离线
问下这个函数的源码是在哪里哦哦
devm_request_threaded_irq
离线
改配置的也都配置 还是一样的身躯中断不了
离线
为什么这个回调函数一直没有执行过了 路过的大神
离线
edt_ft5x06_ts_isr 要中断才会执行,你手动拉低那个中断引脚看不会执行?
我拉低了还是没有进去
离线
现在就是没有在/dev/下面没有看到input
离线
我现在想先创建input 就是申请中断放在最后 就想着看看能不能出现input 在dev下 也还是没有出现
离线
无情一刀 说:我现在想先创建input 就是申请中断放在最后 就想着看看能不能出现input 在dev下 也还是没有出现
https://whycan.cn/files/members/1116/12.pngi2cdetect能找到设备吗?先确定硬件是不是正常
可以找到设备
最近编辑记录 无情一刀 (2018-11-19 16:58:27)
离线
看起来硬件没什么问题,软件得用心慢慢调了。
离线
后面弄好了 主要是因为在dts中配置中断管脚的时候 配置了 一直关联不到代码 相当于在代码中去调用dts中的中断配置时候申请不上 (这点现在还有疑惑 )
后面实在没有问题办法就在代码直接指定中断管脚申请中断,
离线
大神最终咋整的?有详细点的思路不.....
离线
大神最终咋整的?有详细点的思路不.....
哈哈 我当时主要是ft触摸芯片一直挂不上中断,你配置就按照我上面的配置为文件 ,
然后在代码中直接加入申请中断 后面就这样跑起来了 ,哈哈 一直都纳闷 为什么在配置文件中直接定义了中断管脚不可以, 还有什么不懂的可以加我QQ 1003676315
最近编辑记录 无情一刀 (2019-04-02 11:23:23)
离线
转自: https://whycan.cn/t_2360.html#p17976
在店主的耐心教导之下, 终于搞定 FT5336 电容触摸屏:
1. 店主建议修改电阻:
R15 --> 1.5K
R16 --> 1.5K
R29 --> 3.3K
我实际修改:
R15 --> 1.2K
R16 --> 1.2K
R29 --> 3.7K
2. 断开 R23 电阻, R21与R23的交叉点飞线到核心板的 PWM0(PB4), 这样FT5336的中断脚就是 EINT4, 复位脚是 PE23.
3. dts 修改:
&i2c0 {
status = "okay";ft6x06@38 {
compatible = "focaltech,ft6236";
reg = <0x38>;
interrupt-parent = <&pio>;
interrupts = <1 4 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&pio 4 23 GPIO_ACTIVE_LOW>;
touchscreen-size-x = <480>;
touchscreen-size-y = <854>;
touchscreen-inverted-x;
touchscreen-swapped-x-y;
};};
4. 驱动添加:
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
5. Linux 启动 log 信息:
[ 1.161482] i2c /dev entries driver
[ 1.494509] input: EP0110M09 as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0038/input/input1
离线
转自: https://whycan.cn/t_2360.html#p17976
https://whycan.cn/files/members/3/QQ20190421194526.jpg
在店主的耐心教导之下, 终于搞定 FT5336 电容触摸屏:
1. 店主建议修改电阻:
R15 --> 1.5K
R16 --> 1.5K
R29 --> 3.3K我实际修改:
R15 --> 1.2K
R16 --> 1.2K
R29 --> 3.7K2. 断开 R23 电阻, R21与R23的交叉点飞线到核心板的 PWM0(PB4), 这样FT5336的中断脚就是 EINT4, 复位脚是 PE23.
3. dts 修改:
&i2c0 {
status = "okay";ft6x06@38 {
compatible = "focaltech,ft6236";
reg = <0x38>;
interrupt-parent = <&pio>;
interrupts = <1 4 IRQ_TYPE_EDGE_FALLING>;
reset-gpios = <&pio 4 23 GPIO_ACTIVE_LOW>;
touchscreen-size-x = <480>;
touchscreen-size-y = <854>;
touchscreen-inverted-x;
touchscreen-swapped-x-y;
};};
4. 驱动添加:
CONFIG_TOUCHSCREEN_EDT_FT5X06=y
5. Linux 启动 log 信息:
[ 1.161482] i2c /dev entries driver
[ 1.494509] input: EP0110M09 as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0038/input/input1
晕哥 麻烦你把这个你配置的 interrupt-parent = <&pio>;贴出来我对比下 ,
我以前配置和也是和你一样的 ,我以前一直申请不了中断是不是和那几个电阻有关系了
离线
pio 就在 sun8i-v3s.dtsi 里面定义了
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/sun8i-v3s.dtsi
pio: pinctrl@1c20800 {
compatible = "allwinner,sun8i-v3s-pinctrl";
reg = <0x01c20800 0x400>;
interrupts = <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
clock-names = "apb", "hosc", "losc";
gpio-controller;
#gpio-cells = <3>;
interrupt-controller;
#interrupt-cells = <3>;
i2c0_pins: i2c0-pins {
pins = "PB6", "PB7";
function = "i2c0";
};
uart0_pb_pins: uart0-pb-pins {
pins = "PB8", "PB9";
function = "uart0";
};
mmc0_pins: mmc0-pins {
pins = "PF0", "PF1", "PF2", "PF3",
"PF4", "PF5";
function = "mmc0";
drive-strength = <30>;
bias-pull-up;
};
mmc1_pins: mmc1-pins {
pins = "PG0", "PG1", "PG2", "PG3",
"PG4", "PG5";
function = "mmc1";
drive-strength = <30>;
bias-pull-up;
};
spi0_pins: spi0-pins {
pins = "PC0", "PC1", "PC2", "PC3";
function = "spi0";
};
};
离线
看 发现没有区别了 为什么我以前那样配置就是中断不起来哦哦 ,
离线
想请教一下 内核启动后 i2c显示这些东西 是我内核没配置好吗
[ 2.880959] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
[ 2.887524] Goodix-TS 0-0014: i2c test failed attempt 1: -110
[ 5.040934] i2c i2c-0: mv64xxx: I2C bus locked, block: 1, time_left: 0
[ 5.047478] Goodix-TS 0-0014: i2c test failed attempt 2: -110
[ 5.090934] Goodix-TS 0-0014: I2C communication failure: -110
[ 5.096809] Goodix-TS: probe of 0-0014 failed with error -110
离线
也可能是 I2C 没有上拉.
晕哥是指电路上的问题吗 我用也是lichee 的底板 看原理图好像没有没有上拉的问题?
离线
谢谢晕哥 不好意思 我忘记说了 我用的是nano的板子,文档中I2C如下:
实际是照官方文档添加设备树来的,只是说/dev 下没有input这个文件夹,内核中是直接勾选的触屏,应该也不存在文档中有加载模块的问题。如果说出现I2C bus lock 是不是也会导致/dev/input 不存在?
看控制台输出感觉i2c接口是没有问题的,不过以防万一还是测了下,上电后 SDA SCK是可以被拉高的,是我设备树改得有问题吗
离线
也有可能是别的情况, 不放心就用逻辑分析仪抓一下信号, 看CPU是否发出了 I2C 信号。
好 我试试
离线
也有可能是别的情况, 不放心就用逻辑分析仪抓一下信号, 看CPU是否发出了 I2C 信号。
晕哥 如果i2cdetect -y -r 0 也是显示 i2c bus lock 呢?
感觉是cpu就没有发出i2c信号是吧?好像确实没抓到东西
离线
一开始用PE22作为中断脚申请不到,后面改成PB3就可以了
input: generic ft5x06 (82) as /devices/platform/soc/1c2ac00.i2c/i2c-0/0-0038/input/input1
离线