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.

I2C At u-boot level

Hello all,

I have connected a device to the beagle board Xm on the Expansion connector with the I2C2 (sda,scl).but i have found from the below link that there is  pull resistor problem on the Expansion connector

http://git.igep.es/?p=pub/scm/u-boot-arm.git;a=log;h=refs/tags/v2010.06-2


ARMV7: OMAP: I2C driver: Fix bug found in 37XX testing



On OMAP36/37XX the standard on chip pullups are not sufficient to

ensure proper i2c operation without external pullups or switching

to high speed mode and enabling special on chip pullups.



This is an issue for Beagle xM, which does not have external pullups

on the expansion board i2c lines.



The issue manifests itself as an AL (arbitration lost) error when

probing for a non-existent device (i.e. on a Beagle xM with no expansion

boards attached).  This issue does not occur on expansion boards that

include pullups or on Overo 37XX COM's since they include pull-ups.



This patch fixes the issue by checking for the AL bit in the i2c_probe

function.

 

i have also connected pull resistor for this but even though it is not working ...i am able to send few bytes but its failing after that .

so, can any one please suggest me ..

thanks in advance

Thanks ,

Ranjith.

  • Ranjith,

    I am able to get i2c2 working on camera expansion connector, but I am using it @400KHz. It works reliably for me. Is i2c transaction fails for you only when you move to higher rate? OR it fails always, irrespective of rate? you may want to cross check your pad configuration as well here.

    Thanks,

    Vaibhav

  • Vaibhav,

    Thanks for your response vaibhav .but me too using 400khz .but its taking only 4 byte after that its failing .I am also not sure in the parameters of i2c_write in the drivers.

    i2c_write (uchar chip, uint addr, int alen, uchar * buffer, int len);

    because am unable to understand what is the the addr in this?

    addr(regoffset) right?

    iam sending a 12  8bytes of data to by device using the i2c protocol but only 4 byte am able to send and rest are failing .could you please suggest me and also the (addr)specially.

    Thanks,

    Ranjith

  • addr should be the address of the register in the devices you want to write to