Difference between revisions of "Component: I2C Master (Comms: Interface)"
(11 intermediate revisions by 2 users not shown) | |||
Line 16: | Line 16: | ||
==Component Source Code== | ==Component Source Code== | ||
+ | |||
+ | Please click here to download the component source project: [https://www.flowcode.co.uk/wiki/componentsource/FC_Comp_Source_I2C_Master.fcfx FC_Comp_Source_I2C_Master.fcfx] | ||
Please click here to view the component source code (Beta): [https://www.flowcode.co.uk/FlowchartView/?wfile=componentsource/FC_Comp_Source_I2C_Master.fcfx FC_Comp_Source_I2C_Master.fcfx] | Please click here to view the component source code (Beta): [https://www.flowcode.co.uk/FlowchartView/?wfile=componentsource/FC_Comp_Source_I2C_Master.fcfx FC_Comp_Source_I2C_Master.fcfx] | ||
==Detailed description== | ==Detailed description== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
Line 103: | Line 111: | ||
+ | |||
+ | Referring to the Transaction_Write macro. | ||
+ | To do a restart without a stop, instead of using just the number of bytes within the Length parameter, use 0x800 + total number of bytes to read. | ||
+ | |||
+ | In the I2CEEPROM.fcfx example as 2 bytes require reading with just a restart then instead of the length of 2, a length of 0x8002 is used. | ||
+ | |||
+ | [[File:I2CTransaction_Write_No_Stop.png]] | ||
+ | |||
+ | ==Examples== | ||
Line 109: | Line 126: | ||
− | |||
Line 124: | Line 140: | ||
Example file demonstrating how to read and write bytes from a generic I2C EEPROM device. | Example file demonstrating how to read and write bytes from a generic I2C EEPROM device. | ||
{{Fcfile|I2CEEPROM.fcfx|I2CEEPROM}} | {{Fcfile|I2CEEPROM.fcfx|I2CEEPROM}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===I2C Transaction Mode=== | ===I2C Transaction Mode=== | ||
− | + | Transaction mode can be used on all target devices. | |
If not using transaction mode then your code won't work on ARM or ESP. | If not using transaction mode then your code won't work on ARM or ESP. | ||
− | With transaction mode there are fewer component macros required than Non-transaction read/write mode. | + | With transaction mode, there are fewer component macros required than in Non-transaction read/write mode. |
− | Example file | + | The I2CEEPROM.fcfx Example file demonstrates how I2C transaction component macros can be used to write and read to the memory registers of an I2C external EEPROM |
+ | |||
+ | The I2C Transaction Example file demonstrates how I2C transaction component macros can be used to write and read to the minutes register of DS1307/DS3231 RTC. | ||
If simulation Mode within properties is set to Yes, then the minutes are read from your PC time via a dll. | If simulation Mode within properties is set to Yes, then the minutes are read from your PC time via a dll. | ||
You can expand using the dll to retrieve the whole date and time. | You can expand using the dll to retrieve the whole date and time. | ||
+ | |||
+ | |||
{{Fcfile|I2C Transaction Example.fcfx|I2C Transaction Example}} | {{Fcfile|I2C Transaction Example.fcfx|I2C Transaction Example}} | ||
Line 162: | Line 165: | ||
===I2C Address Scanner=== | ===I2C Address Scanner=== | ||
− | + | An I2C addresses can be determined by using an {{Fcfile|IC2_Address_Scanner.fcfx|IC2 Address Scanner}} | |
The I2C address to use is the one within the first set of square brackets. | The I2C address to use is the one within the first set of square brackets. | ||
Line 176: | Line 179: | ||
The sniffer will send data to your PC via UART to USB which can be read using serial terminal software. | The sniffer will send data to your PC via UART to USB which can be read using serial terminal software. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ==Macro reference== | ||
+ | ===GenericReadRegister=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''GenericReadRegister''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Function to perform a generic I2C read. The 7-bit device ID is automatically shifted up by one bit to make room for the read/write bit. Returns the data from the location specified. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
− | | width="90%" | | + | | width="90%" | Device_ID |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | 7-bit Device Address ID |
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
− | | width="90%" | | + | | width="90%" | Address |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
+ | | colspan="2" | | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
− | | width="90%" | | + | | width="90%" | AddressByteCount |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Specifies the number of address bytes, Range: 1 or 2 |
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
Line 263: | Line 212: | ||
+ | ===GenericWriteRegister=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
Line 296: | Line 246: | ||
− | + | ===Initialise=== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
Line 404: | Line 260: | ||
− | + | ===ReceiveByte=== | |
− | |||
− | == | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
Line 505: | Line 279: | ||
+ | ===Restart=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
Line 518: | Line 293: | ||
+ | ===Start=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Start''' |
|- | |- | ||
− | | colspan="2" | Outputs a | + | | colspan="2" | Outputs a start condition onto the I²C bus. |
|- | |- | ||
|- | |- | ||
Line 531: | Line 307: | ||
+ | ===Stop=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Stop''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Outputs a stop condition onto the I²C bus. |
|- | |- | ||
|- | |- | ||
− | + | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-void-icon.png]] - VOID | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9- | ||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
+ | ===Transaction_Initialise=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Transaction_Initialise''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Initialise the I2C interface to communicate with a Slave device at Address Returns 0 on fail, 1 on success |
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
− | | width="90%" | | + | | width="90%" | Address |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | 7-bit I2C Address without the shift for the R/W bit |
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
Line 572: | Line 340: | ||
+ | ===Transaction_Read=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Transaction_Read''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Attempt to read Length number of bytes from the I2C slave to the given Buffer. Ensure that the Buffer is large enough. Returns number of bytes read, caller should check that this matches requested Length |
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
− | | width="90%" | | + | | width="90%" | Buffer |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Buffer to store the incoming byte data |
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
− | | width="90%" | | + | | width="90%" | Length |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Number of bytes to read |
|- | |- | ||
− | + | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9- | ||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
+ | ===Transaction_Uninit=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
Line 618: | Line 378: | ||
+ | ===Transaction_Write=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''Transaction_Write''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Attempt to write Length number of bytes to the I2C slave from the given Buffer. Ensure that the Buffer is large enough. Returns the number of bytes written, the caller should check that this matches requested Length |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|- | |- | ||
Line 657: | Line 390: | ||
| width="90%" | Buffer | | width="90%" | Buffer | ||
|- | |- | ||
− | | colspan="2" | Buffer to | + | | colspan="2" | Buffer of bytes to write to the I2C |
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" | [[File:Fc9-u16-icon.png]] - UINT | ||
| width="90%" | Length | | width="90%" | Length | ||
|- | |- | ||
− | | colspan="2" | Number of bytes to | + | | colspan="2" | Number of bytes to send out, MS bit 0x8000 signifies no Stop if set |
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u16-icon.png]] - UINT | ||
Line 669: | Line 402: | ||
+ | ===TransmitByte=== | ||
{| class="wikitable" style="width:60%; background-color:#FFFFFF;" | {| class="wikitable" style="width:60%; background-color:#FFFFFF;" | ||
|- | |- | ||
| width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | | width="10%" align="center" style="background-color:#D8C9D8;" align="center" | [[File:Fc9-comp-macro.png]] | ||
− | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | ''' | + | | width="90%" style="background-color:#D8C9D8; color:#4B008D;" | '''TransmitByte''' |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Sends a byte on the I²C bus. Returns the acknowledge if any. 0 represents that data was acknowledged and 1 represents no acknowledge was detected. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|- | |- | ||
| width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" | [[File:Fc9-u8-icon.png]] - BYTE | ||
− | | width="90%" | | + | | width="90%" | Data |
|- | |- | ||
− | | colspan="2" | | + | | colspan="2" | Data byte to send on the I²C bus. |
|- | |- | ||
| width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | | width="10%" align="center" style="border-top: 2px solid #000;" | [[File:Fc9-u8-icon.png]] - BYTE | ||
| width="90%" style="border-top: 2px solid #000;" | ''Return'' | | width="90%" style="border-top: 2px solid #000;" | ''Return'' | ||
|} | |} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Latest revision as of 13:32, 17 May 2023
Author | Matrix Ltd. |
Version | 1.4 |
Category | Comms: Interface |
Contents
I2C Master component
Generic Two Wire I2C Communications Interface
Component Source Code
Please click here to download the component source project: FC_Comp_Source_I2C_Master.fcfx
Please click here to view the component source code (Beta): FC_Comp_Source_I2C_Master.fcfx
Detailed description
Overview
The I2C bus is a medium speed communications bus which is usually best suited for talking between devices situated on the same circuit board. Due to the high frequency digital nature of the bus care should be taken to keep tracks as short as possible and as far away as possible from other sources of noise. A typical I2C bus consists of two signals, data and clock. The I2C bus usually consists of a single master device and then one or more slave devices. The master device initiates all the communications and can only communicate with a single device on the bus at a time by sending a unique device address as the first byte.
Each I2C transaction consists of a start and a stop as well as one or more data bytes made up of 8 clock cycles allowing the 8-bits of each byte to be transferred. Each byte send is followed by an Ack (acknowledged) or a Nak (not acknowledged) from the receiving device.
Pull up resistors
The I2C bus usually requires pull up resistors in the range of 4.7K to 10K between the two I2C signals and VCC. Some I2C devices have the pull up resistors built in so as to avoid external components.
The pull up resistors can be useful when interfacing a 5V microcontroller to a 3V3 sensor as the pull up resistor can be connected to 3V3 to eliminate the need for voltage level shifting.
Start / Restart / Stop
The Start, Restart and Stop operations are each states which the bus can be put into using the I2C specification.
Generic Write Transaction
A generic write transaction to a memory device might look something like this:
Start
Send External Device Address Byte (Write mode)
Send Internal Address Byte
Send Data Byte
Stop
Generic Read Transaction
A generic read transaction to a memory device might look something like this:
Start
Send External Device Address Byte (Write mode)
Send Internal Address Byte
Restart
Send External Device Address Byte (Read mode)
Read Data Byte
Stop
Referring to the Transaction_Write macro.
To do a restart without a stop, instead of using just the number of bytes within the Length parameter, use 0x800 + total number of bytes to read.
In the I2CEEPROM.fcfx example as 2 bytes require reading with just a restart then instead of the length of 2, a length of 0x8002 is used.
Examples
More information on I2C can be found here,
Matrix Flowcode Blog: Simplified communications I2C and SPI
Generic I2C EEPROM
Example file demonstrating how to read and write bytes from a generic I2C EEPROM device.
I2CEEPROM
I2C Transaction Mode
Transaction mode can be used on all target devices.
If not using transaction mode then your code won't work on ARM or ESP.
With transaction mode, there are fewer component macros required than in Non-transaction read/write mode.
The I2CEEPROM.fcfx Example file demonstrates how I2C transaction component macros can be used to write and read to the memory registers of an I2C external EEPROM
The I2C Transaction Example file demonstrates how I2C transaction component macros can be used to write and read to the minutes register of DS1307/DS3231 RTC.
If simulation Mode within properties is set to Yes, then the minutes are read from your PC time via a dll.
You can expand using the dll to retrieve the whole date and time.
I2C Address Scanner
An I2C addresses can be determined by using an
IC2 Address Scanner
The I2C address to use is the one within the first set of square brackets.
For example, with my backpack display, the correct address to use is 0x3F [63]:
The other two Addresses i.e. 0x56 [86] and 0x68 [104] is for other connected devices, 24C32 EEPROM and DS3231 RTC respectively.
Note The I2c addresses scan will repeat every 5seconds.
The sniffer will send data to your PC via UART to USB which can be read using serial terminal software.
Macro reference
GenericReadRegister
GenericWriteRegister
Initialise
![]() |
Initialise |
Enables the I²C hardware and performs some initialization. Should be called at the start of the program or at least before any of the other I²C functions are called. | |
![]() |
Return |
ReceiveByte
![]() |
ReceiveByte |
Receives a byte from the I²C bus. | |
![]() |
Last |
Used to signify the last byte when streaming incoming data. 0=Not last byte, 1=Last Byte | |
![]() |
Return |
Restart
![]() |
Restart |
Outputs a restart condition onto the I²C bus. | |
![]() |
Return |
Start
![]() |
Start |
Outputs a start condition onto the I²C bus. | |
![]() |
Return |
Stop
![]() |
Stop |
Outputs a stop condition onto the I²C bus. | |
![]() |
Return |
Transaction_Initialise
Transaction_Read
Transaction_Uninit
![]() |
Transaction_Uninit |
Uninitialise the I2C interface | |
![]() |
Return |
Transaction_Write
TransmitByte