1.WiringPi串口示例程序报错:No Such File or directory
香橙派虽然是一款性价比很高的Linux开发板,但是和树莓派相比,其开发文档、社区资源都相对匮乏,而且很多库都是从树莓派那移植过来的,比如控制IO的库:WiringPi,而这往往会导致一些错误的发生,比如这个让我头痛的串口错误:
分析错误的原因,不难发现问题出在/dev/ttyAMA0这,ls /dev后发现香橙派的ubuntu系统下居然没有这个设备:
于是我就开始在网络上搜索,然而给出的解决方案多是树莓派的,因为树莓派蓝牙串口会与硬件串口冲突,而boot/overlays里有个文件是可以恢复硬件串口的,但是对于香橙派,我只想说连这个文件夹都木有啊!
2.香橙派的串口设备dev/ttySx
经过一系列的折腾,终于搞明白香橙派串口设备在哪
cat /proc/tty/drivers
香橙派的硬件串口Uart的设备名称为ttySx,usb串口名称为ttyUSBx ,而不是树莓派的设备名称ttyAMA0!
但是新的问题又来了,为什么没有ttyS1,ttyS2,ttyS3?
3.修改香橙派硬件配置文件script.fex
多谢https://blog.csdn.net/renpeng009672/article/details/85100828这篇文章的答案,真是网上找了好久好久都没有找到解决办法,真是要吐槽香橙派技术文档真是少,系统也BUG很多!
香橙派硬件配置可以通过修改script.fex完成(类似树莓派raspi-config的操作)
香橙派使用的是全志的芯片,该类芯片的硬件配置可以参考这份H3芯片手册
http://www.doc88.com/p-9681502404051.html
具体的操作方法:
(1)下载sunxi-tools并编译(如果没有git指令需要安装git)
git clone git://github.com/linux-sunxi/sunxi-tools.git
cd sunxi-tools
make
(2)复制/media/boot/script.bin文件,并用bin2fex工具转换为fex
cp /media/boot/script.bin /media/boot/script.bin.bak
cp /media/boot/script.bin ./
./bin2fex script.bin > ./script.fex
(3)fex文件就是文本文件可以直接编辑,里面包含了各种硬件的配置信息,参照全志H3芯片的配置手册,简直发现了新天地,以后有机会探索一下这个文件,这里我们先解决串口问题
我的设备是orangepi-pc-plus,找到uart的相关项目
[uart0]
uart_used = 1
uart_port = 0
uart_type = 2
uart_tx = port:PA04<2><1><default><default>
uart_rx = port:PA05<2><1><default><default>[uart1]
uart_used = 0
uart_port = 1
uart_type = 4
uart_tx = port:PG06<2><1><default><default>
uart_rx = port:PG07<2><1><default><default>
uart_rts = port:PG08<2><1><default><default>
uart_cts = port:PG09<2><1><default><default>[uart2]
uart_used = 0
uart_port = 2
uart_type = 4
uart_tx = port:PA00<2><1><default><default>
uart_rx = port:PA01<2><1><default><default>
uart_rts = port:PA02<2><1><default><default>
uart_cts = port:PA03<2><1><default><default>[uart3]
uart_used = 0
uart_port = 3
uart_type = 4
uart_tx = port:PA13<3><1><default><default>
uart_rx = port:PA14<3><1><default><default>
uart_rts = port:PA15<3><1><default><default>
uart_cts = port:PA16<3><1><default><default>
对照手册的内容
uart1、2、3的used全部为0?????搞笑呢?????全部把串口屏蔽了,我还用啥啊。。。也不知道香橙派的工程师咋想的,全部打开,其中uart_port就是设备名称dev/ttySx中的x ,uart_type就是串口类型,我们一般就用TX/RX模式,所以其实给2就行,然后rts和cts都可以不用的,我们用;注释掉,修改后长这样:
[uart0]
uart_used = 1
uart_port = 0
uart_type = 2
uart_tx = port:PA04<2><1><default><default>
uart_rx = port:PA05<2><1><default><default>[uart1]
uart_used = 1
uart_port = 1
uart_type = 2
uart_tx = port:PG06<2><1><default><default>
uart_rx = port:PG07<2><1><default><default>
;uart_rts = port:PG08<2><1><default><default>
;uart_cts = port:PG09<2><1><default><default>[uart2]
uart_used = 1
uart_port = 2
uart_type = 2
uart_tx = port:PA00<2><1><default><default>
uart_rx = port:PA01<2><1><default><default>
;uart_rts = port:PA02<2><1><default><default>
;uart_cts = port:PA03<2><1><default><default>[uart3]
uart_used = 1
uart_port = 3
uart_type = 2
uart_tx = port:PA13<3><1><default><default>
uart_rx = port:PA14<3><1><default><default>
;uart_rts = port:PA15<3><1><default><default>
;uart_cts = port:PA16<3><1><default><default>
但是这里还要注意
配置中有一个关于GPIO的配置,要让引脚成为串口引脚,还得屏蔽GPIO的初始化设置
[gpio_para]
gpio_used = 1
gpio_num = 18
gpio_pin_1 = port:PA06<1><default><default><0>
gpio_pin_2 = port:PA13<1><default><default><0>
gpio_pin_3 = port:PA14<1><default><default><0>
gpio_pin_4 = port:PA01<1><default><default><0>
gpio_pin_5 = port:PD14<1><default><default><0>
gpio_pin_6 = port:PA00<1><default><default><0>
gpio_pin_7 = port:PA03<1><default><default><0>
gpio_pin_8 = port:PC04<1><default><default><0>
gpio_pin_9 = port:PC07<1><default><default><0>
gpio_pin_10 = port:PA02<1><default><default><0>
gpio_pin_11 = port:PA21<1><default><default><0>
gpio_pin_12 = port:PA07<1><default><default><0>
gpio_pin_13 = port:PA08<1><default><default><0>
gpio_pin_14 = port:PG08<1><default><default><0>
gpio_pin_15 = port:PA09<1><default><default><0>
gpio_pin_16 = port:PA10<1><default><default><0>
gpio_pin_17 = port:PG09<1><default><default><0>
gpio_pin_18 = port:PG06<1><default><default><0>
gpio_pin_19 = port:PG07<1><default><default><0>
找到串口的引脚,都给注释掉,然后总数变一下
[gpio_para]
gpio_used = 1
gpio_num = 14
gpio_pin_1 = port:PA06<1><default><default><0>
;gpio_pin_2 = port:PA13<1><default><default><0>
;gpio_pin_3 = port:PA14<1><default><default><0>
;gpio_pin_4 = port:PA01<1><default><default><0>
gpio_pin_5 = port:PD14<1><default><default><0>
;gpio_pin_6 = port:PA00<1><default><default><0>
gpio_pin_7 = port:PA03<1><default><default><0>
gpio_pin_8 = port:PC04<1><default><default><0>
gpio_pin_9 = port:PC07<1><default><default><0>
gpio_pin_10 = port:PA02<1><default><default><0>
gpio_pin_11 = port:PA21<1><default><default><0>
gpio_pin_12 = port:PA07<1><default><default><0>
gpio_pin_13 = port:PA08<1><default><default><0>
gpio_pin_14 = port:PG08<1><default><default><0>
gpio_pin_15 = port:PA09<1><default><default><0>
gpio_pin_16 = port:PA10<1><default><default><0>
gpio_pin_17 = port:PG09<1><default><default><0>
;gpio_pin_18 = port:PG06<1><default><default><0>
;gpio_pin_19 = port:PG07<1><default><default><0>
这里一定要把串口引脚找到,包括之前对uart的配置,可以参考香橙派的硬件手册
到此,script.fex就修改完毕了
(4)将修改过的script.fex转回script.bin并放回原处
./fex2bin script.fex > ./script.bin
cp ./script.bin /media/boot/
(5)最后,重启系统,就可以看到所有的串口了,测试也是没问题的
reboot