beagleboard black 笔记 <3>
几个基于例程的实验,网络问题的解决
-
点亮板子上的灯,循环点亮,跑马灯效果。
-
点亮外部的灯,IO口控制。
-
基本的按键输入,简单的 Python 状态机。
通过这几个实验可以基本的了解一下 BBB 的 IO 口功能,但是这样并不能让我们完全了解到 BBB 的优势 以及与 类似基本的诸如 51 或是 STM32 不同之处,例如目前始终不能使用的 PWM 波功能。那么接下来才是真正跳入 BBB 的坑的过程吧。
使用PWM波功能
参考
Beaglebone Black PWM on Ubuntu
开始使用教程最多的 p9_14 pwm io 口
按照教程,发现在 /lib/firmware/ 目录下面只有一个 am33xx_pwm.dtbo 的驱动文件,却没有其他的IO口驱动。 【这里就很明显的体现出了这种跑系统的板子和STM32 的区别,之前一直以为他俩差不多,没有仔细研究过设备树,覆盖层之类的概念。】
编写一个覆盖层
可以自己为IO口编写一个,但是为了尽快看到实验效果,我直接 git 了一个。
git clone https://github.com/beagleboard/bb.org-overlays/tree/master/src/arm
进入目录,编译,移动驱动。
dtc -O dtb -o BB-PWM1-00A0.dtbo -b 0 -@ BB-PWM1-00A0.dts
mv -i BB-PWM1-00A0.dtbo /lib/firmware
添加到 slots 里面去。
echo am33xx_pwm > /sys/devices/platform/bone_capemgr/slotsecho BB-PWM1 > /sys/devices/platform/bone_capemgr/slots
查看,改变IO口属性?
cd /sys/devices/platform/ocp
config-pin -l P9.14
config-pin P9.14 pwm
cat ocp:P9_14_pinmux/state 查看属性
另外备注:在将cape-universaln插入槽中(slots)后,在 root@beaglebone:/sys/devices/platform/ocp/ocp:P9_14_pinmux 中将P9_14设置为pwm模式(#config-pin P9.14 pwm)后,需要在 /sys/class/pwm/pwmchip2中echo 0 > export, 这里为什么是pwmchip2,因为pwmchip2的地址0x4830_2000对应的是PWM1,echo 0是开启EHRPWM1A,echo 1是开启EHRPWM1B。具体地址映射可参见AM335x参考手册memory map部分。
我在使用时发现如下情况,应该改为 pwm3 后成功使用,其中原因留待解决。
可以使用,在文件夹路径
/sys/devices/platform/ocp/48302000.epwmss/48302200.pwm/pwm/pwmchip3/pwm0
或者
/sys/class/pwm/pwmchip3/pwm0
可以正常使用命令
echo 500 > duty_cycle
echo 10000 > polarity
echo 1 > enable
操作PWM用到duty(duty_ns)、period(period_ns)、polarity、run共四个参数,其中period就是频率参数(周期时间),duty为占空比,polarity为使能标志(1为使能,0为禁用),run 是执行命令(1为运行,0为关闭),period和duty的参数单位为纳秒(ns),1s=1000ms=1000000us=1000000000ns,所以period最大的取值范围为0—1000000000,而duty则取值0—period值之间
部分参数改变了,意义一样。
网络问题的解决
有时发现无法连接,打开网络设置发现提示系统与网络兼容,因为启用过锐捷【万恶】,解决方法:
cd /etc/NetworkManager
sudo mv NetworkManager.conf /home/[name]/
sudo NetworkManager //重启
完毕后你会发现网络恢复,正常使用,不要用锐捷了就。