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 i2c 问题,出现 omap_i2c omap_i2c.2: timeout waiting for bus ready,sda,scl没有波形

Other Parts Discussed in Thread: AM3354

新添加了I2C-1,使用E17和E18脚,两个管脚都上拉4.7K电阻到3.3V

PINMUX如下:

{"uart0_ctsn.i2c1_sda", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
AM33XX_PULL_UP | AM33XX_INPUT_EN},


{"uart0_rtsn.i2c1_scl", OMAP_MUX_MODE3 | AM33XX_SLEWCTRL_SLOW |
AM33XX_PULL_UP | AM33XX_INPUT_EN},

root@am335x-evm:~# cat /sys/kernel/debug/omap_mux/uart0_ctsn
name: uart0_ctsn.i2c1_sda (0x44e10968/0x968 = 0x0073), b NA, t NA
mode: OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP | AM33XX_SLEWCTRL_SLOW
signals: uart0_ctsn | NA | d_can1_tx | i2c1_sda | spi1_d0 | NA | NA | gpio1_8


root@am335x-evm:~# cat /sys/kernel/debug/omap_mux/uart0_rtsn
name: uart0_rtsn.i2c1_scl (0x44e1096c/0x96c = 0x0073), b NA, t NA
mode: OMAP_MUX_MODE3 | AM33XX_PIN_INPUT_PULLUP | AM33XX_SLEWCTRL_SLOW
signals: uart0_rtsn | NA | d_can1_rx | i2c1_scl | spi1_d1 | spi1_cs0 | NA | gpio
1_9

总线上只连接了一个FT5526芯片,

static struct i2c_board_info __initdata am335x_i2c1_boardinfo[] = {

{
I2C_BOARD_INFO("ft5x0x_ts", 0x38),
},

};

修改PINMUX会变成controler timeout。

  • 使用i2cdetect -y -r 2也是提示超时,没有波形出现。

    root@am335x-evm:~# i2cdetect -r -y 2
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: [ 159.523868] omap_i2c omap_i2c.2: timeout waiting for bus ready
    -- [ 160.543860] omap_i2c omap_i2c.2: timeout waiting for bus ready
    -- [ 161.563859] omap_i2c omap_i2c.2: timeout waiting for bus ready
    -- [ 162.583854] omap_i2c omap_i2c.2: timeout waiting for bus ready
    -- ^C[ 163.603855] omap_i2c omap_i2c.2: timeout waiting for bus ready

    是不是还有哪里需要修改呢。

  • 这个是初始化函数

    static void __init am335x_evm_i2c1_init(void)
    {
    setup_pin_mux(i2c1_pin_mux);

    gpio_request(GPIO_TO_PIN(3,7),"SCR_RST");  //复位
    gpio_direction_output(GPIO_TO_PIN(3,7), 1);     //中断

    omap_register_i2c_bus(2, 100, am335x_i2c1_boardinfo,
    ARRAY_SIZE(am335x_i2c1_boardinfo));


    }

  • 只是想先确认一点,你的硬件上设计上,I2C的这个接口用4.7K电阻上拉了吗?

  • 我也觉得可能是上拉电阻不合适造成的,有可能上拉弱了,带不起来

  • 我的情况是断电重启I2C工作正常,但是按reset或者软重启后,就会

    -- [ 2562.535034] omap_i2c omap_i2c.2: timeout waiting for bus ready

    这个错误

    我的芯片是AM3354

  • I2C 2这个总线上接了什么设备?

  • SGTL5000的声卡芯片

    调试STGL5000的语言模块的时候,碰到了一个问题,在系统断电重启的时候,语音模块工作很好,但是在语音模块播报过语言后,按reset按键或者软件重启的时候,STGL5000的语音模块调用I2C驱动的时候碰到了如下的问题。
    系统芯片:AM3354

    重启后错误LOG
    [    3.020166]  mmcblk1boot1: unknown partition table
    [    3.027546]  mmcblk1boot0: unknown partition table
    [    3.811152] omap_i2c omap_i2c.2: controller timed out
    [    4.831136] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [    5.851353] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [    5.857655] ##sgtl5000_set_power_regs
    [    6.881132] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [    7.901127] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [    8.921126] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [    9.941125] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   10.961128] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   11.981125] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   13.001126] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   14.021125] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   15.041126] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   16.061117] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   17.081127] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   18.101125] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   19.121126] omap_i2c omap_i2c.2: timeout waiting for bus ready
    [   19.127327] ##sgtl5000_set_bias_level
    [   19.132080] sgtl5000 2-000a: Failed to add route HPLOUT->Headphone Jack
    [   19.139111] sgtl5000 2-000a: dapm: unknown pin MONO_LOUT
    [   19.144807] sgtl5000 2-000a: dapm: unknown pin HPLCOM
    [   19.150170] sgtl5000 2-000a: dapm: unknown pin HPRCOM
    [   19.156943] asoc: sgtl5000 <-> davinci-mcasp.0 mapping ok
    [   19.164363] ALSA device list:
    [   19.167519]   #0: AM335X EVM

    断电重启正确的log信息:
    cpuidle: using governor ladder
    [    2.667617] cpuidle: using governor menu
    [    2.677040] usbcore: registered new interface driver usbhid
    [    2.683042] usbhid: USB HID core driver
    [    2.688021] logger: created 256K log 'log_main'
    [    2.693156] logger: created 256K log 'log_events'
    [    2.698385] logger: created 256K log 'log_radio'
    [    2.703584] logger: created 256K log 'log_system'
    [    2.709739] usbcore: registered new interface driver snd-usb-audio
    [    2.717323] ##sgtl5000_modinit
    [    2.720656] ##sgtl5000_i2c_probe
    [    2.724138] client->dev is 
    [    2.727160] ret is 0
    [    2.729476] ##end sgtl5000_i2c_probe
    [    2.734549] ##sgtl5000_probe
    [    2.737669] ##sgtl5000_enable_regulators
    [    2.741900] _regulator_get: 2-000a supply VDDA not found, using dummy regulator
    [    2.749761] _regulator_get: 2-000a supply VDDIO not found, using dummy regulator
    [    2.757739] _regulator_get: 2-000a supply VDDD not found, using dummy regulator
    [    2.766988] sgtl5000 2-000a: sgtl5000 revision 17
    [    2.772210] ##sgtl5000_replace_vddd_with_ldo
    [    2.776742] ##ldo_regulator_register
    [    2.780913] print_constraints: 2-000a: 850 <--> 1600 mV at 1200 mV normal 
    [    2.788362] _regulator_get: 2-000a supply VDDA not found, using dummy regulator
    [    2.796233] _regulator_get: 2-000a supply VDDIO not found, using dummy regulator
    [    2.804294] sgtl5000 2-000a: Using internal LDO instead of VDDD
    [    2.813906] ##sgtl5000_set_power_regs
    [    2.827279] ##sgtl5000_set_bias_level
    [    2.831930] sgtl5000 2-000a: Failed to add route HPLOUT->Headphone Jack
    [    2.838974] sgtl5000 2-000a: dapm: unknown pin MONO_LOUT
    [    2.844660] sgtl5000 2-000a: dapm: unknown pin HPLCOM
    [    2.850021] sgtl5000 2-000a: dapm: unknown pin HPRCOM
    [    2.857017] asoc: sgtl5000 <-> davinci-mcasp.0 mapping ok
    [    2.864558] ALSA device list:
    [    2.867716]   #0: AM335X EVM
    [    2.870770] oprofile: hardware counters not available
    [    2.876181] oprofile: using timer interrupt.

    STGL5000的电路图如下,连接的AM3354芯片的SPI0和I2C1(第二路I2C总线)
    STGL5000的移植代码
    static struct pinmux_config i2c1_pin_mux[] = {
    {"spi0_d1.i2c1_sda",    OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    {"spi0_cs0.i2c1_scl",   OMAP_MUX_MODE2 | AM33XX_SLEWCTRL_SLOW |
    AM33XX_PULL_ENBL | AM33XX_INPUT_EN},
    {NULL, 0},
    };
    static struct i2c_board_info am335x_i2c1_boardinfo[] = {
    {
    I2C_BOARD_INFO("sgtl5000", 0x0A),
    },
    };

    static void i2c1_init(int evm_id, int profile)
    {
    setup_pin_mux(i2c1_pin_mux);
    omap_register_i2c_bus(2, 100, am335x_i2c1_boardinfo,
      ARRAY_SIZE(am335x_i2c1_boardinfo));
    return;
    }
  • 应该是设置完SGTL5000之后,芯片切换到了某种状态,软件复位AM335x也要reset一下SGTL5000。

  • SGTL5000芯片没有Reset引脚,这是SGTL5000的资料

    http://wenku.baidu.com/link?url=kjzLhROnfTZcqDxawDJpryFmLSsar-jQdXqWk5tNQThMzMHgmLmKFfZgxTn8e7l-1XGqjzr2OPzT5snZJhpOTVBaDBxP8mV-mWTcptBMeCa

  • 这个资料我看了,很不详细啊。

    如果是有I2C的接口,芯片内部应该是有寄存器的,但是没看到资料里有描述。

    如果CPU重启后不能和这颗芯片正常通信,要看是不是这颗芯片有模式切换。

x 出现错误。请重试或与管理员联系。
x 出现错误。请重试或与管理员联系。