BeagleBone Black 打开CAN总线

来源:互联网 发布:普通话在线测试软件 编辑:程序博客网 时间:2024/06/05 23:38

SD卡版本:

     下载SD版本的系统,如Angstrom-Cloud9-IDE-GNOME-eglibc-ipk-v2012.12-beaglebone-2013.07.31.img
     烧写到SD上,把SD卡查到电脑上面,修改uEnv.txt文件,在后面添加上 capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN,从而禁用HDMI(因为该接口某些脚和和CAN冲突了),修改后的配置可能是optargs=quiet drm.debug=7 capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN。
     将SD卡查到BBB上面,从SD启动BBB;
     先用ifconfig -a 查看有没有can0接口,没有的话需要配置;
     为了查看是否已经识别CAN-Cape,可以使用dmesg | grep -i cape 查看cape的挂接情况,主要留意CAN总线的信息,可能会有failed to load firmware 'BB-BONE-SERL-01-00A2.dtbo',这说明已经识别CAN-Cape了,但是加载BB-BONE-SERL-01-00A2.dtbo(和CAN相关)失败
     如果加载失败的话,使用echo BB-BONE-SERL-01:00A2 >/sys/devices/bone_capemgr.*/slots强制加载上去,估计会出现not such file,说明/lib/firmware下面没有BB-BONE-SERL-01-00A2.dtbo。
     没有BB-BONE-SERL-01-00A2.dtbo的话,到/lib/firmware下面把BB-BONE-SERL-01-00A1.dts复制一份为BB-BONE-SERL-01-00A2.dts
          cp BB-BONE-SERL-01-00A1.dts BB-BONE-SERL-01-00A2.dts
     编译BB-BONE-SERL-01-00A2.dts为BB-BONE-SERL-01-00A2.dtbo:
          dtc -O dtb -@ BB-BONE-SERL-01-00A2.dts > BB-BONE-SERL-01-00A2.dtbo
     重启BBB。
     重启完成之后在使用ifconfig -a检查接口,如果看到can0的话那么说明已经能够使用CAN了。
     设置CAN总线属性:     
          ip link set can0 type can bitrate 125000 triple-sampling on
     开启回环(如果你们没有其他CAN设备的话就只能用回环大致测试一下了,如果你有CAN设备连接上BBB的话就不用回环了)
          ip link set can0 type can loopback on
     启动CAN总线
          ifconfig can0 up
     显示所有CAN上的通信数据
          candump can0
     重新打开一个进程测试CAN发送
          cansend can0 1 2 3 4 5 6 7 8
     到dump的进程看看有没有结果


     PS:
     有的时候发送会出错,可能是发送缓冲区不够的原因,下面的命令设置发送缓冲区长度为1000
          echo 1000 > /sys/class/net/can0/tx_queue_len
     

在eMMC系统上面开启CAN:
     最好用新的镜像(亲测BBB-eMMC-flasher-2013.08.21.img可以,更旧的系统不保证可以)更新系统(先写到sd卡上,在用sd卡升级emmc,具体升级emmc过程请看其它教程)。
     将emmc的第一分区挂载:mount /dev/mmcblk0p1 /media/mmc1/
     切到挂载点:cd /media/mmc1/
     修改uEnv.txt(也是加上禁用HDMI):vi uEnv.txt
     修改后的可能是这样的:optargs=quiet drm.debug=7 capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
     后面的步骤和上面SD卡的方式差不多,不过为了保险起见,我的做法是先把SD的方式配置好了,然后直接把SD卡的/lib/firmware完全复制到emmc系统上的/lib/firmware了。
     直接在emmc系统上编译dts的方式我没试过。

原创粉丝点击