各位大神,荔枝派Zero V3s如何使用uart1,uart2, 我项目中要用到两个用户串口。
请教我应该从哪里入手?
离线
对了, 我用的不是camdroid坑卓,而是 4.13-y主线内核
请大侠不吝赐教
离线
https://www.kancloud.cn/lichee/lpi0/327885
http://bbs.ilichee.cc/t/enabling-uart2-kernel/182
hi, you should modify those files to enable uart2:
sun8i-v3s.dtsi:
uart0_pins_a: uart0@0 { pins = “PB8”, “PB9”;function = “uart0”;bias-pull-up; };
uart1_pins_a: uart1@0 { pins = “PE21”, “PE22”;function = “uart1”;bias-pull-up; };
uart2_pins_a: uart2@0 { pins = “PB0”, “PB1”;function = “uart2”;bias-pull-up; };
sun8i-v3s-licheepi-zero.dts:
&uart0 { pinctrl-0 = <&uart0_pins_a>;pinctrl-names = “default”;status = “okay”; };
&uart1 { pinctrl-0 = <&uart1_pins_a>;pinctrl-names = “default”;status = “okay”; };
&uart2 { pinctrl-0 = <&uart2_pins_a>;pinctrl-names = “default”;status = “okay”; };
看下这个能不能帮到你。
在线
https://www.kancloud.cn/lichee/lpi0/327885
http://bbs.ilichee.cc/t/enabling-uart2-kernel/182hi, you should modify those files to enable uart2:
sun8i-v3s.dtsi:
uart0_pins_a: uart0@0 { pins = “PB8”, “PB9”;function = “uart0”;bias-pull-up; };
uart1_pins_a: uart1@0 { pins = “PE21”, “PE22”;function = “uart1”;bias-pull-up; };
uart2_pins_a: uart2@0 { pins = “PB0”, “PB1”;function = “uart2”;bias-pull-up; };
sun8i-v3s-licheepi-zero.dts:
&uart0 { pinctrl-0 = <&uart0_pins_a>;pinctrl-names = “default”;status = “okay”; };
&uart1 { pinctrl-0 = <&uart1_pins_a>;pinctrl-names = “default”;status = “okay”; };
&uart2 { pinctrl-0 = <&uart2_pins_a>;pinctrl-names = “default”;status = “okay”; };看下这个能不能帮到你。
坑哥!来寻求帮助了 设备树我已经改了,我只添加了串口2。改了之后还是不能成功,我写了个程序来打开ttyS2 能打开成功,但是读和写都是失败的。麻烦指点一下呢。大伙都是怎样做的呢?
离线
如何失败的?请提供详细信息
我这边通过UART1操作加密芯片是正常的, UART2暂时还没有测试。
你可以先试一试UART1, 我保证UART1是绝对可以用的。
问题已经解决了。我在硬件上操作的是串口2 因为串口1引脚有触摸芯片,所以我选择串口。大伙都是把三个串口的设备树都配置,我怕影响触摸芯片的。我只配置的串口0和串口2,按照正常思维逻辑我设备树配置好了然后操作ttyS2文件就可以操作串口2了 事实不是这样的,我们应该操作ttyS1 。关于为什么估计要研究udev之类的了,太深奥了。暂时不去学习它。
离线
晕哥 说:如何失败的?请提供详细信息
我这边通过UART1操作加密芯片是正常的, UART2暂时还没有测试。
你可以先试一试UART1, 我保证UART1是绝对可以用的。问题已经解决了。我在硬件上操作的是串口2 因为串口1引脚有触摸芯片,所以我选择串口。大伙都是把三个串口的设备树都配置,我怕影响触摸芯片的。我只配置的串口0和串口2,按照正常思维逻辑我设备树配置好了然后操作ttyS2文件就可以操作串口2了 事实不是这样的,我们应该操作ttyS1 。关于为什么估计要研究udev之类的了,太深奥了。暂时不去学习它。
感觉我没有看明白.
离线
1066950103 说:晕哥 说:如何失败的?请提供详细信息
我这边通过UART1操作加密芯片是正常的, UART2暂时还没有测试。
你可以先试一试UART1, 我保证UART1是绝对可以用的。问题已经解决了。我在硬件上操作的是串口2 因为串口1引脚有触摸芯片,所以我选择串口。大伙都是把三个串口的设备树都配置,我怕影响触摸芯片的。我只配置的串口0和串口2,按照正常思维逻辑我设备树配置好了然后操作ttyS2文件就可以操作串口2了 事实不是这样的,我们应该操作ttyS1 。关于为什么估计要研究udev之类的了,太深奥了。暂时不去学习它。
感觉我没有看明白.
就是串口号ttys0-2是根据你当前设备树里面来的,不完全是根据板子的丝印编号来的。比如设备树里面只有串口0和串口2 那么串口0是ttyS0 串口2就是ttyS1。
离线
我现在也是想使用开发板上面的串口0和串口2,但是为什么在dev下面ttyS0和ttyS1都有,也能打开,但是使用的时候就会说我标准输入输出错误。求大佬指点。
离线
你列一下串口设备文件:
# ls /dev/ttyS* -l
crw-rw---- 1 root root 4, 64 Jul 19 07:32 /dev/ttyS0
crw-rw---- 1 root root 4, 65 Jul 31 15:02 /dev/ttyS1
crw-rw---- 1 root root 4, 66 Jul 31 15:02 /dev/ttyS2
看是不是 64, 65, 66 这样?
还有设备树有没有开启 uart0, uart1 ?
最重要的问题来了, 你不在在串口终端下开启当前的 串口tty,
比如你的串口终端是 ttyS0, 那么不能在这个串口下再次通过任何应用程序打开 ttyS0.
曲线做法是你改一下bootargs, 把默认串口定位到别的串口,比如 ttyS1,
然后在这个控制台下打开 ttyS0.
在线
我现在串口下面的是这个样子。
# ls /dev/ttyS* -l
crw------- 1 root root 4, 64 Jan 1 00:00 /dev/ttyS0
crw------- 1 root root 4, 65 Jan 1 00:00 /dev/ttyS1
crw------- 1 root root 4, 66 Jan 1 00:00 /dev/ttyS2
crw------- 1 root root 4, 67 Jan 1 00:00 /dev/ttyS3
crw------- 1 root root 4, 68 Jan 1 00:00 /dev/ttyS4
crw------- 1 root root 4, 69 Jan 1 00:00 /dev/ttyS5
crw------- 1 root root 4, 70 Jan 1 00:00 /dev/ttyS6
crw------- 1 root root 4, 71 Jan 1 00:00 /dev/ttyS7
您说的设备树有没有开启 uart0, uart1是指在内核中配置串口吗?如果是的话应该在内核的什么地方配置啊?
终端默认的是ttyS0这个我倒是知道,因为我试了一下使用ttyS0确实可以使用,但是终端就用不了了。
我现在想使用芯片上的uart2,来测试我的串口程序是否可用,外接出来的引脚已经找到了,但是就是打开ttyS1的时候可以打开fd_tty = open("/dev/ttyS1", O_RDWR)可以,但是读或写fd_tty的时候提示标准输出输入错误。
# ls /dev/ttyS2
/dev/ttyS2
# ./uart-test /dev/ttyS1
tcsetattr fd: Input/output error
SetupSerial 1: Input/output error
Set Parity Error
离线
那我这边也是测试了 UART1, UART2,设备树都是正确的,串口也打开了,就是跟上位机,读写,波特率设置115200的时候,是乱码。
9600的时候,没这个问题。
离线