TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335X DCAN驱动问题

最近移植can驱动遇到一点问题,一直没有解决,请大神们帮忙看一下

硬件:利尔达的一块am335x单板,can总线使用iso1050收发器,芯片一端使用的单板的3.3v,另一端外接的5v电源,看单板原理发现can0接的引脚是uart1_ctsn和uart1_rtsn,回环不成功,与一个stm32的板子进行can测试也不成功

以下是我的步骤:

1:进入mach_omap2目录修改mux33xx.c文件,修改后:        

_AM33XX_MUXENTRY(UART1_CTSN, 0,

                   "uart1_ctsn", NULL, "d_can0_tx", "i2c2_sda",

                   "spi1_cs0", NULL, NULL, "gpio0_12"),

_AM33XX_MUXENTRY(UART1_RTSN, 0,

                   "uart1_rtsn", NULL, "d_can0_rx", "i2c2_scl",

                   "spi1_cs1", NULL, NULL, "gpio0_13"),

2:修改board-am335xevm.c: 

static struct pinmux_config d_can_wxudong_pin_mux[] = {

         {"uart1_ctsn.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL},

         {"uart1_rtsn.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},

         {NULL, 0},

};

static void d_can_init(int evm_id, int profile)

{

         lsd_dbg(LSD_DBG,"Enter board init:%s\n",__FUNCTION__);

         switch (evm_id) {

         case LOW_COST_EVM:

                   setup_pin_mux(d_can_wxudong_pin_mux);

                   am33xx_d_can_init(0);

                   break;

}

}

 static struct evm_dev_cfg beaglebone_dev_cfg[] = {

{d_can_init,      DEV_ON_BASEBOARD, PROFILE_NONE},

         {NULL, 0, 0},

};

添加d_can_init函数

3:配置内核后使用ifconfig -a查看can设备,发现可以找到can0设备,然后移植ip和canutils工具

4:使用一下命令测试can0的回环模式

设置波特率和模式:canconfig can0 bitrate 1000000 ctrlmode tripple-sampling on loopback on

开启CAN总线:canconfig can0 start

发送2字节数据:cansend can0 -i 0x01 0x02 0x03 

查看数据:candump can0

问题是执行完candump can0查看不到数据,只显示interface = can0, family = 29, type = 3, proto = 1

查看细节后$ip -d -s link show can0显示一下细节,发现发送和接受各有一个包2个字节,是不是意味着已经回环成功了?但candump不显示

can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEF
AULT qlen 10
link/can
can <LOOPBACK,TRIPLE-SAMPLING> state ERROR-ACTIVE (berr-counter tx 0 rx 0) r
estart-ms 0
bitrate 1000000 sample-point 0.750
tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1
d_can: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
clock 24000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0
RX: bytes packets errors dropped overrun mcast
2 1 0 0 0 0
TX: bytes packets errors dropped carrier collsns
2 1 0 0 0 0

后来接上stm32(已经烧好接收程序)直接用tripple-sampling模式去掉loopback模式,发现发送失败,接收到一个8字节的错误包,数据发送不出去。

Yaoming Qin:

关于利尔达的板子和代码,我们这边不知道具体的配置了,这里,我能给的建议:

1. 查看下硬件是不是和pinmux一致

2. 关于linux部分,可以考虑参考 http://processors.wiki.ti.com/index.php/AM335X_DCAN_Driver_Guide ,当然,可能需要挂载ti发布的文件系统方便点。

jialin huang:

回复 xudong wang3:

你好,我现在也是遇到你的那个问题,回环测试没有问题。发送没有波形,同时运行发送命令发送数据之后,运行ip -d -s link show can0,同样看到没有显示发送了数据,现象如下:

root@am335x-evm:~# ip -d -s link show can02: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10link/can promiscuity 0 can <LISTEN-ONLY,TRIPLE-SAMPLING> state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0 bitrate 500000 sample-point 0.875 tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1clock 24000000re-started bus-errors arbit-lost error-warn error-pass bus-off0 0 0 0 0 0 RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 16 0 0

卡了我好久了,麻烦帮我分析一下。谢谢了

cen miao:

回复 jialin huang:

jialin huang:你好。我现在也遇到相同的问题了,请问这个问题你解决了吗,如何解决的?谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » AM335X DCAN驱动问题
分享到: 更多 (0)