am335x  can调试过程

 

TI官方提供的《AM335X DCAN Driver Guide.pdf》文档非常好,按照上面的介绍就可以把CAN驱动添加到内核中。突然发现TI官方提供的文件质量都很高,baidu搜到的很多资料根本就不能用。
怎么配置内核,怎么把CAN驱动添加内核就不写了,这个简单,如果是定制的核心板,很可能要配置CAN引脚,我调试的过程中出现了好几次错误,都是PIN配置有问题导致的。下面说一下调试过程,
 首先把d_can_init()初始化函数添加到beagleboneblack_dev_cfg配置中去,
static struct evm_dev_cfg beagleboneblack_dev_cfg[] = {
              ....................................................
{d_can_init,    DEV_ON_DGHTR_BRD, PROFILE_1},
{NULL, 0, 0},
}
我直接添加到最后,但是编译内核,下载之后,ifconfig -a还是没有can显示,在启动信息中查找,也没有找到CAN初始化的任何信息,我就感觉是d_can_init()没有运行, 经过一番 “插入打印信息”的调试,发现确实没有执行CAN初始化,把参数修改为下面就可以了。
static struct evm_dev_cfg beagleboneblack_dev_cfg[] = {
              ....................................................
{d_can_init,    DEV_ON_BASEBOARD, PROFILE_1},    //willow add
{NULL, 0, 0},
}
本来到这里就应该顺利的把CAN调试成功了,但是我这个板子的硬件设备比较变态,CAN0居然用了2个很奇怪的引脚,这2个引脚在TI的配置文件中就没有,修改如下 ,把CAN功能的选项加进去。
    /*_AM33XX_MUXENTRY(MII1_TXD3, 0,
        "mii1_txd3", NULL, "rgmii1_td3", NULL,
        "mcasp1_fsx", "mmc2_dat1", "mcasp0_fsr", "gpio0_16"),
    _AM33XX_MUXENTRY(MII1_TXD2, 0,
        "mii1_txd2", NULL, "rgmii1_td2", NULL,
        "mcasp1_axr0", "mmc2_dat2", "mcasp0_ahclkx", "gpio0_17"),*/
    _AM33XX_MUXENTRY(MII1_TXD3, 0,        /* willow change for can0 */
        "mii1_txd3", "d_can0_tx", "rgmii1_td3", NULL,
        "mcasp1_fsx", "mmc2_dat1", "mcasp0_fsr", "gpio0_16"),
    _AM33XX_MUXENTRY(MII1_TXD2, 0,
        "mii1_txd2", "d_can0_rx", "rgmii1_td2", NULL,
        "mcasp1_axr0", "mmc2_dat2", "mcasp0_ahclkx", "gpio0_17"),
下面这个地址也要修改,下面修改的时候,我高看TI的软件了,其实也是大意了,这个地方也能显示出个人的悟性,mii1_txd3.d_can0_tx这是sourceinsight里是找不到定义的,但是我猜mii1_txd3指配置的第1项,也就是这个PIN的名字,.d_can0_tx指此Pin应该配置成哪个功能,

"mii1_txd2", "d_can0_rx", "rgmii1_td2", NULL, "mcasp1_axr0", "mmc2_dat2", "mcasp0_ahclkx", "gpio0_17"
既然这个功能是配置中是按顺序排列 的,那么直接找到d_can0_tx在配置中所在的位置,直接赋值不就行了,这是我想当然的,其实配置成哪个功能,OMAP_MUX_MODE1它说了算,
static struct pinmux_config d_can_ia_pin_mux[] = {
    {"mii1_txd3.d_can0_tx", OMAP_MUX_MODE1 | AM33XX_PULL_ENBL},        /*willow change mode1*/
    {"mii1_txd2.d_can0_rx", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLUP},
    {NULL, 0},
};
按上面的修改之后就可以了,
下面是调试过程中用到的命令,看字面意思就明白含义,顺利就能测试通过。
canconfig can0 bitrate 500000 ctrlmode ctrlmode triple-sampling on
canconfig can0 stop
canconfig can0 start
canconfig can0 ctrlmode loopback on
candump can0 &
cansend can0 -i 0x800 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 -e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值