最近移植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:你好。我现在也遇到相同的问题了,请问这个问题你解决了吗,如何解决的?谢谢!