Jump to content
Rei Vilo

[Energia Library] Software I2C Master for MSP430G2553

Recommended Posts



The first byte transmitted out on the I2C bus is a composition of the slave address and the read/write bit.


Since the read/write bit occupies the least significant bit position in this first byte, the address appears to be incorrect but it's okay.


For example, if the slave address = 0x04 and the R/W bit = 0 (write command) then the first byte looks like 0x08.


Here's a C code snippet to elaborate:

     * Start reading sensor by sending the START condition

     * Then write out the sensor I2C address + the Read Bit
     * (  I2C Address << 1)|READBIT
     * ( (0x28<<1) | 0x01 ) = 0x51
    i2c_out_byte( ( SLAVE_ADDRESS<<1 ) | READBIT  );

     * Now see if the sensor responded to the command by checking
     * the ACK bit.
    AckBit = i2c_readackbit();

Does that make sense?

Is that what you are seeing?



Share this post

Link to post
Share on other sites



yes it does. I just read the spec from Sensirion and they say1000,000 + R/W bit. In my working code I always started with 0x80 so my assumption was address is 0x80 (which is wrong).


Thanks for pointing me to it!


Have a nice weekend!

Share this post

Link to post
Share on other sites

@ArcticSaturn: Excellent!


Yeah, this detail tripped me up too when I first attempted I2C comms. That's why I commented my C code - to remind myself later on.


I hope you have a nice, warm weekend too!

Share this post

Link to post
Share on other sites

Hi Rei,

I try to use your library with my CC3200. I want to attach two vcnl4000 proximity sensors to te board. Because of the fixed I2C address I have to use a software interface.

I have a problem with your library. When a try to compile I get the following error:

C:\Users\myway\Documents\energia-0101E0015\hardware\cc3200\libraries\I2C_SoftwareLibrary\I2C_SoftwareLibrary.cpp: In function 'void delayI2Cms(uint16_t)':
C:\Users\myway\Documents\energia-0101E0015\hardware\cc3200\libraries\I2C_SoftwareLibrary\I2C_SoftwareLibrary.cpp:33:48: error: '__delay_cycles' was not declared in this scope
     while (delay--) __delay_cycles(TICKS_PER_MS);
C:\Users\myway\Documents\energia-0101E0015\hardware\cc3200\libraries\I2C_SoftwareLibrary\I2C_SoftwareLibrary.cpp: In function 'void delayI2Cus(uint16_t)':
C:\Users\myway\Documents\energia-0101E0015\hardware\cc3200\libraries\I2C_SoftwareLibrary\I2C_SoftwareLibrary.cpp:37:48: error: '__delay_cycles' was not declared in this scope
     while (delay--) __delay_cycles(TICKS_PER_US);

Actually I have no idea about the missing function "__delay_cycles".

Can you help me please?



Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now