This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335X can通信不能收发数据

Other Parts Discussed in Thread: AM3354, DRA756

各位大侠:

大家好!感谢大家看我的帖子.

我有一块自己做的板子.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.再打开回环测试功能.再进行发包.有发有收.正常

麻烦大家给点意见.在下感激不尽.谢谢