各位大侠:
大家好!感谢大家看我的帖子.
我有一块自己做的板子.AM3354. SDK版本为 SDK6.0.kernel版本为3.2(SDK中自带的).现在CAN是怎么弄也调不通.我的详细配置如下.
uboot(SDK自带的U-Boot 2013.01.01)中:
div_m4 = div_m4 & ~CLK_DIV_MASK;
div_m4 = div_m4 | COREPLL_M4;
writel(div_m4, &cmwkup->divm4dpllcore);
#define COREPLL_M4 10 /* CORE_CLKOUTM4 = 200 MHZ */
kernel中:
1引脚配置:
static struct pinmux_config d_can_gp_pin_mux[] = {
{"uart0_ctsn.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL},
{"uart0_rtsn.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},
{NULL, 0},
};
static struct pinmux_config d_can_ia_pin_mux[] = {
{"uart0_rxd.d_can0_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL},
{"uart0_txd.d_can0_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},
{NULL, 0},
};
这个配置和我的电路图上是一样的如下.
2.设置pinmux,并添加平台设备:
static void d_can_init(int evm_id, int profile)
{
setup_pin_mux(d_can_ia_pin_mux);
/* Instance Zero */
am33xx_d_can_init(0);
setup_pin_mux(d_can_gp_pin_mux);
/* Instance One */
am33xx_d_can_init(1);
}
3.放入初始化代码中.
static struct evm_dev_cfg gen_purp_evm_dev_cfg[] ={
...
{d_can_init, DEV_ON_BASEBOARD, PROFILE_ALL},
...
}
4.配置kernel
完全按照
进行配置.
5移植canutils工具到文件系统.. 得到 cansend candump canconfig等命令.
6.系统起机后.执行以下命令.
a. ip link set can0 type can bitrate 125000 triple-sampling on
同时,板子的can0口插上一个USBCAN-E-U.另一边USB插上电脑.并且打开测试软件.调好速度为125k.(此种方式在老的平台上(相对于AM335X平台)测试是正常的)
b.ip link set can0 up
c. ifconfig 可以看到如下信息
root@am335x-evm:~# ifconfig
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:52
d.执行 ip -d -s link show can0 得到如下信息
root@am335x-evm:~# ip -d -s link show can0
root@am335x-evm:~# ip -d -s link show can0
2: can0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT qlen 10
link/can
can <TRIPLE-SAMPLING> state STOPPED (berr-counter tx 0 rx 0) restart-ms 0
bitrate 125000 sample-point 0.875
tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 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
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 2 0 0
root@am335x-evm:~#
e.执行 cansend can0 -i 0x10 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88.
得到如下信息:
root@am335x-evm:~# cansend can0 -i 0x10 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
interface = can0, family = 29, type = 3, proto = 1
实际上包根本没发出去.我用示波器.对地量CPU的 TXD引脚.时钟是高电平.同样,用CAN测试软件给板子发.也是发送失败.
f.再打开回环测试功能.再进行发包.有发有收.正常
麻烦大家给点意见.在下感激不尽.谢谢

