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.

CCS/AM3358: Difference between I2C and PRUSS-I2C

Part Number: AM3358

Tool/software: Code Composer Studio

I see two driver I2C and PRUSS-I2C f/w for AM3358.

  • One is driver from ARM side, the other is driver from PRU-ICSS side.

  • does pdk_am335x_1_0_15 support I2C? does pdk_am335x_1_0_15 support HSI2C? Thanks

    StarterWare 02.00.01.01 User Guide said

    HSI2C

    Introduction

    The HSI2C component is in complaint with the Philips Semiconductors Inter-IC bus (I2C-bus) specification version 2.1. The HSI2C module supports only Fast mode (up to 400 kbps) of operation.HSI2C can be configured to multiple master-transmitters and slave-receivers mode and multiple slave-transmitters and master-receivers mode.HSI2C also could be configured to generate DMA events to the DMA controller for transfer of data. The HSI2C driver library exports a set of APIs to configure and use HSI2C module for data transfers. The APIs are exported in /include/hsi2c.h

    • Features Not Supported
      • High speed data transfer
  • Part Number: AM3358

    Tool/software: Code Composer Studio

    StarterWare 02.00.01.01 User Guide didn't mentionI2C. It said

    HSI2C

    Introduction

    The HSI2C component is in complaint with the Philips Semiconductors Inter-IC bus (I2C-bus) specification version 2.1. The HSI2C module supports only Fast mode (up to 400 kbps) of operation.HSI2C can be configured to multiple master-transmitters and slave-receivers mode and multiple slave-transmitters and master-receivers mode.HSI2C also could be configured to generate DMA events to the DMA controller for transfer of data. The HSI2C driver library exports a set of APIs to configure and use HSI2C module for data transfers. The APIs are exported in /include/hsi2c.h

    • Features Not Supported
      • High speed data transfer
  • Anping,

    As Biser indicated, the I2C driver uses the HW I2C module on the chip and provides a driver for application developers to program the interface and design I2C protocol to interact with I2C slave devices using the ARM. The PRU-ICSS I2C is a software/firmware implementation for the I2C interface using PRU GPIO pins that allows users to use this software implementation of the I2C module to allow control of I2C slave from PRU as well as for use cases that require more UARTs that provided on the SOC.

    The HW version of the driver or the I2C driver (not PRU firmware version) support HSI2C (speeds from 10kbps/400 kbps and 3.4 Mbps)  for PRU I2C Firmware supported spec, the design document indicates that upto 1Mbps has been tested. I would recommend that you look at chapter 2 Feature set of the I2C SW implementation design document located at:

    pdk_amxx_x_x_xx\packages\ti\drv\i2c\firmware\icss_i2c\docs\I2C_FW_DESIGN_GUIDE.pdf

    Hope this helps.

    Regards,

    Rahul

    PS: Starterware package is obsolete and not meant to be used for new development as it is not under active development outside of boot and board support for the am335x/am437x devices.

  • Hi Rahul

          I don't understand your reply!

    StarterWare 02.00.01.01 User Guide doesn't mention I2C.

    does pdk_am335x_1_0_15 support I2C?

    StarterWare 02.00.01.01 User Guide said Features Not Supported about HSI2C

    does pdk_am335x_1_0_15 support HSI2C?

  • Anping,

    Yes, pdk_am335x_1_0_15 supports HSI2C mode both using the Hw based peripheral and using ICSS firmware.

    Starterware document should not be referred in this context as that is an obsolete package. Processor SDK RTOS I2C document is provided here:

    http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_device_drv.html#i2c

    Hope this clarifies the response.

    Regards,

    Rahul

  • Hi Rahul

         What is non-interrupt based blocking modes? Can you give a example? Thanks

    I2C_MODE_BLOCKING: By default, driver operates in blocking mode. In blocking mode, a Task’s code execution is blocked until transaction is complete. This ensures only one transaction operates at a given time. Driver supports both interrupt or non-interrupt based blocking modes.