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.

Question about the I2C bus

Other Parts Discussed in Thread: AM3352

Hi, 

I have a question about the I2C bus.

In our system, there are two am3352 board  (board A and board B)connected with I2C. And in our program, the two am3352s was both set in "master transmitter". 

My Question:  What should be do in the situation as below?

When the "board A" generate "Start Condition"(I2C_IRQENABLE_SET.STT=1), the "board B" has generated the "Start Condition already, so the "board A" could not  generate it successfully, and the I2C_IRQENABLE_SET.STT does not become  "0".

In this situation, must I reset the I2C module?

I can not find any description about the step when the I2C_IRQENABLE_SET.STT does not become "0".

Thanks!

Yin

  • Please do not double-post. You have posted already the same question on this thread: http://e2e.ti.com/support/arm/sitara_arm/f/791/t/332386.aspx

  • Hi Biser Gatchev-XID 

    I am very sorry.

    I will delete this post . Is it right?

    Regards,

    Yin

  • No, you can leave it. Somebody may answer here instead.

  • The what you are talking about is called a "Multimaster i2c".

    If collision (two masters initiate transmission simultaneously), one of them detects the case and shall lose arbitration: shall stop driving the i2c bus.

    Then, normally a retransmission occur initiated by that master. The other one will not even notice the collision (see the i2c specification).

    Shall you reset something? This depends on your environment. Normally not.

  • Hi sviss

    Thanks for reply.

    In my case,  the arbitration lost interrupt was not detected. Because the two boards were not generate "Start Condition" simultaneously. 

    When the "board A" generate "Start Condition"(I2C_IRQENABLE_SET.STT=1), the "board B" has generated the "Start Condition already, so the "board A" could not  generate it successfully, and the I2C_IRQENABLE_SET.STT does not become  "0".

    I think that in this condition, the I2C_IRQENABLE_SET.STT should be reset to "1", let it to be a normal state. Is it correct?

    Is there any method  let the I2C_IRQENABLE_SET.STT to "1"?

     

    Thanks!

    Yin

     

     

  • Merging this into a thread that's already opened by the same user on the same subject.

  • Hi,

    Does anybody have any actual result about multimaster i2c?

    In another words, is there any actual result about the arbitration lost interrupt be detected?

    (I have to confirm that there is no bug about the arbitration lost interrupt. )

    Is the I2C module used in other device besides am335x?

    If yes, can  you tech me the name of device? 

     

    Thanks

    Yin

     

  • Yi Yin1 said:
    Is there any method  let the I2C_IRQENABLE_SET.STT to "1"? 

    Hi Yi Yin1,

    The Sitara has I2C_IRQENABLE_SET register (TRM 24.4.1.6). But I do not see anything called a STT there.

    I2C_CNT register has the bit named STT.

    If you described what you do and what you need, there would be better chance to give you a hint.

    Raw device programming? Linux driver?, Starterware?

    >>Is the I2C module used in other device besides am335x?

    Multimaster i2c is a requirement or ATCA (if you about this). Numerous implementations exist.