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.

Am3352 DCAN驱动问题



公司自己开发的单板,带双网口、双CAN。内核linux-3.2.0-psp04.06.00.11

pinmux配置:

static struct pinmux_config d_can_gp_pin_mux[] = {

 {"uart1_rxd.d_can1_tx", OMAP_MUX_MODE2 | AM33XX_PULL_ENBL},

 {"uart1_txd.d_can1_rx", OMAP_MUX_MODE2 | AM33XX_PIN_INPUT_PULLUP},

 {NULL, 0},

};

static struct pinmux_config d_can_ia_pin_mux[] = {

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

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

  {NULL, 0},

};

系统启动后CAN1通讯正常,CAN0收发都不通。

用USBCAN连接单板调试,刚上电时,K15引脚上的波形正常,但是系统出现下面的打印信息后,信号低电平由0V变成2V。

[    1.603250] can: controller area network core (rev 20090105 abi 8)

 [    1.609873] NET: Registered protocol family 29

 [    1.614619] can: raw protocol (rev 20090105)

 [    1.619120] can: broadcast manager protocol (rev 20090105 t)

 [    1.625137] Registering the dns_resolver key type

[    1.630177] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3

 [    1.638265] ThumbEE CPU extension supported.

在早先的一款只支持单网口的单板上,双CAN口工作都没有问题。新开发的单板因为要支持双网口,进行过一次内核升级。

请问这一故障有没有可能是受双网口影响产生的?

是否需要修改驱动?

  • 是不是管脚分配冲突啊,你看DCAN0占用了mii的管脚:

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

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

  • 管脚没有冲突,用的rmii:

    static struct pinmux_config rmii1_pin_mux[] = {

     {"mii1_crs.rmii1_crs_dv", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},

     {"mii1_rxerr.rmii1_rxerr", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},

     {"mii1_txen.rmii1_txen", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},

     {"mii1_txd1.rmii1_txd1", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},

     {"mii1_txd0.rmii1_txd0", OMAP_MUX_MODE1 | AM33XX_PIN_OUTPUT},

     {"mii1_rxd1.rmii1_rxd1", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},  

    {"mii1_rxd0.rmii1_rxd0", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},

     {"rmii1_refclk.rmii1_refclk", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLDOWN},

     {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},  

    {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},   

       {NULL, 0},

    };

     static struct pinmux_config rmii2_pin_mux[] = {

     {"gpmc_a9.rmii2_crs_dv", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},  

    {"gpmc_wpn.rmii2_rxerr", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},  

    {"gpmc_a0.rmii2_txen", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},

     {"gpmc_a4.rmii2_txd1", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},

     {"gpmc_a5.rmii2_txd0", OMAP_MUX_MODE3 | AM33XX_PIN_OUTPUT},

     {"gpmc_a10.rmii2_rxd1", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},  

    {"gpmc_a11.rmii2_rxd0", OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLDOWN},

     {"mii1_col.rmii2_refclk", OMAP_MUX_MODE1 | AM33XX_PIN_INPUT_PULLDOWN},

     {"mdio_data.mdio_data", OMAP_MUX_MODE0 | AM33XX_PIN_INPUT_PULLUP},

     {"mdio_clk.mdio_clk", OMAP_MUX_MODE0 | AM33XX_PIN_OUTPUT_PULLUP},   

      {NULL, 0},

     };