Connect with us

I2C on PSoC 5LP

Discussion in 'Microcontrollers, Programming and IoT' started by megawarp, Jan 22, 2018.

  1. megawarp

    megawarp

    2
    0
    Jan 22, 2018
    Hello everybody,
    I'm trying to realize a bridge I2C - SPI with a board that carries a PSoC 5LP. The board receives I2C packets from another board with Linux inside (commands like i2cset and i2cget) and converts them to SPI format towards a board with a camera sensor. The first board is a I2C master and the sensor is an SPI slave, so the PSoC implements an I2C slave and an SPI master.

    The problem I am facing with is that I don't understand how to correctly detect, in the PSoC, that I have received a get or a a set instruction. It doesn't seem to exist any interrupt callback that signal that event; there are some flags, though, that are set in a odd way and, it seems, not constant sequence. Due to this behaviour and because I check these status flags to detect the sets and gets, sometimes after a get instruction (correctly detected) it also catch a get instruction, thus performing an undesidered write on SPI.

    The pseudo code is the following:
    while(1)
    {
    if(write status flags are set)
    do spi write
    else if(read status flags are set)
    {
    do spi read
    copy data to i2c buffer
    }
    }

    Does anyone know how to correctly detect the i2c packets? I'm using PSoC Creator 4.1 as IDE.
    Thank you
     
  2. megawarp

    megawarp

    2
    0
    Jan 22, 2018
    I have found a workaround though not finding, I think, how that software object (I2C Slave) is meant to be used.

    I alredy performed a poll checking the status flags but there was the problem I specified in my previous post.

    The workaround is to add a futher check to detect the incoming write command using the buffer size functions.
    There are two functions indeed, one for the read buffer and one for the write buffer. Currently I check that SlaveGetReadBufSize returns zero because if it receives something but the read buffer is empty it must have been a write command.
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-