Difference between revisions of "Example i2c test"
m (→Test Options: Corrected punctuation and made sentence more clear.) |
m (Fixed formatting issues.) |
||
Line 1: | Line 1: | ||
− | {{todo| | + | {{todo|InProgress (11.14.13-13:25->JG+);(11.14.13-15:45->MD-);(01.30.14-16:20->BS+);(01.30.14-18:30->MD-);(11.10.2015-12:50->MD+)|Brian Serrano|project=oe 4,oe 5,md,InProgress,bs}} |
This is a guide to the <code>i2c_test</code> example project included in the EMAC OE SDK. | This is a guide to the <code>i2c_test</code> example project included in the EMAC OE SDK. | ||
Line 14: | Line 14: | ||
For information on opening the project from within Eclipse, please see, [[Importing the EMAC OE SDK Projects with Eclipse]]. Then, follow [[Using the EMAC OE SDK Projects with Eclipse]] for information on how to build, upload, and execute the example. | For information on opening the project from within Eclipse, please see, [[Importing the EMAC OE SDK Projects with Eclipse]]. Then, follow [[Using the EMAC OE SDK Projects with Eclipse]] for information on how to build, upload, and execute the example. | ||
+ | |||
+ | In OE 5, the project may be opened from within Qt Creator instead of Eclipse. | ||
Alternatively, the <code>Makefile</code> can be used with the <code>make</code> command from the command-line to build and upload the example. For more information on this method, please see, [[Using EMAC OE SDK Example Projects]]. | Alternatively, the <code>Makefile</code> can be used with the <code>make</code> command from the command-line to build and upload the example. For more information on this method, please see, [[Using EMAC OE SDK Example Projects]]. | ||
Line 25: | Line 27: | ||
The <code>i2c_test</code> program is executed from the console. It takes no parameters. | The <code>i2c_test</code> program is executed from the console. It takes no parameters. | ||
− | + | {{cli |./i2c_test}} | |
A menu will appear in the terminal: | A menu will appear in the terminal: | ||
− | < | + | |
+ | {{clop}}<nowiki> | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 36: | Line 39: | ||
e: Read 2 bytes from register | e: Read 2 bytes from register | ||
q: Quit | q: Quit | ||
− | </ | + | </nowiki> |
+ | {{closp}} | ||
Select a function (a,b,c,d,e) to test or q to quit. You will be prompted for read, write and register values as appropriate. Test results will be displayed in the terminal. | Select a function (a,b,c,d,e) to test or q to quit. You will be prompted for read, write and register values as appropriate. Test results will be displayed in the terminal. | ||
==== Test Options ==== | ==== Test Options ==== | ||
− | <cl> | + | <!--<cl>--> |
− | * '''Set Slave Address'''<br /> | + | * '''Set Slave Address'''<br />Press the ''A'' key to select the Set slave address function, then press ''Enter''. |
− | Press the ''A'' key to select the Set slave address function, then press ''Enter''. | + | {{clop | indent=1 }}<nowiki> |
− | < | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 59: | Line 62: | ||
Calling i2c_set_slave(3, 0x48) | Calling i2c_set_slave(3, 0x48) | ||
i2c_set_slave reports success | i2c_set_slave reports success | ||
− | </ | + | </nowiki> |
− | The slave address receives the clock and responds when addressed by the master. | + | {{closp}} |
+ | <p style="margin-left:2%;"> | ||
+ | The slave address receives the clock and responds when addressed by the master.</p> | ||
− | This function is to set the slave address of the <code>I²C</code> device. This only need to be done once to initialize the address and then each time that a new device is addressed. | + | <p style="margin-left:2%;">This function is to set the slave address of the <code>I²C</code> device. This only need to be done once to initialize the address and then each time that a new device is addressed.</p> |
− | * '''Write byte to register'''<br /> | + | * '''Write byte to register'''<br />Press the ''B'' key to select the Write byte to register function, then press ''Enter'' |
− | Press the ''B'' key to select the Write byte to register function, then press ''Enter'' | + | {{clop | indent=1 }}<nowiki> |
− | < | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 81: | Line 85: | ||
Calling i2c_write_cmd(3, 0x1, 0xAA) | Calling i2c_write_cmd(3, 0x1, 0xAA) | ||
i2c_write_cmd reports success | i2c_write_cmd reports success | ||
− | </ | + | </nowiki> |
− | This function uses the Linux <code>write</code> system call to write one byte to the selected register on the <code>I²C</code> device. | + | {{closp}} |
+ | |||
+ | <p style="margin-left:2%;">This function uses the Linux <code>write</code> system call to write one byte to the selected register on the <code>I²C</code> device. </p> | ||
− | * '''Write 2 bytes to register'''<br /> | + | * '''Write 2 bytes to register'''<br />Press the ''C'' key to select the Write 2 bytes to register function, then press ''Enter''. |
− | Press the ''C'' key to select the Write 2 bytes to register function, then press ''Enter''. | + | {{clop | indent=1 }}<nowiki> |
− | < | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 101: | Line 106: | ||
Calling i2c_write_cmd2(3, 0x1, 0xAABB) | Calling i2c_write_cmd2(3, 0x1, 0xAABB) | ||
i2c_write_cmd2 reports success | i2c_write_cmd2 reports success | ||
− | </ | + | </nowiki> |
− | + | {{closp}} | |
− | * ''' Read byte from register '''<br /> | + | <p style="margin-left:2%;">This function uses the same system call as the previous option, but writes 2 bytes to a register instead of just one.</p> |
− | Press the ''D'' key to select the Read byte from register function, then press ''Enter''. | + | |
− | < | + | * ''' Read byte from register '''<br />Press the ''D'' key to select the Read byte from register function, then press ''Enter''. |
+ | {{clop | indent=1 }}<nowiki> | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 121: | Line 127: | ||
i2c_read_reg reports success | i2c_read_reg reports success | ||
Read value 0xB | Read value 0xB | ||
− | </ | + | </nowiki> |
− | + | {{closp}} | |
− | * '''Read 2 bytes from register'''<br /> | + | <p style="margin-left:2%;">This function uses the Linux <code>read</code> system call to read a byte to the selected register on the <code>I²C</code> device.</p> |
− | Press the ''E'' key to select the Read 2 bytes from register function, then press ''Enter''. | + | |
− | < | + | * '''Read 2 bytes from register'''<br />Press the ''E'' key to select the Read 2 bytes from register function, then press ''Enter''. |
+ | {{clop | indent=1 }}<nowiki> | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 141: | Line 148: | ||
i2c_read_reg2 reports success | i2c_read_reg2 reports success | ||
Read value 0xB0B | Read value 0xB0B | ||
− | </ | + | </nowiki> |
− | + | {{closp}} | |
− | + | <p style="margin-left:2%;">This function uses the same system call as the previous option, but shifts to the right.</p> | |
− | *'''Quit'''<br /> | + | <p style="margin-left:2%;">The <code>i2c_test</code> example writes a byte to a selected register. The register then reads the byte, shifts the byte 8 bits to the right and then reads the address to the selected register on the <code>I²C</code> device. </p> |
− | Press the ''Q'' key to quit out of the <code>i2c_test</code> example, then press ''Enter''. | + | |
− | < | + | *'''Quit'''<br />Press the ''Q'' key to quit out of the <code>i2c_test</code> example, then press ''Enter''. |
+ | {{clop | indent=1 }}<nowiki> | ||
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 158: | Line 166: | ||
>> q | >> q | ||
Quiting... | Quiting... | ||
− | </ | + | </nowiki> |
− | This function | + | {{closp}} |
− | </cl> | + | |
+ | <p style="margin-left:2%;">This function exits you out of the <code>i2c_test</code> example on the <code>I²C</code> device.</p> | ||
+ | <!--</cl>--> | ||
== Real-World Example == | == Real-World Example == | ||
Line 172: | Line 182: | ||
Just like before, the <code>i2c_test</code> program is executed from the console. It takes no parameters. | Just like before, the <code>i2c_test</code> program is executed from the console. It takes no parameters. | ||
− | + | {{cli |./i2c_test}} | |
A menu will appear in the terminal: | A menu will appear in the terminal: | ||
− | < | + | {{clop}}<nowiki> |
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 183: | Line 193: | ||
e: Read 2 bytes from register | e: Read 2 bytes from register | ||
q: Quit | q: Quit | ||
− | </ | + | </nowiki> |
+ | {{closp}} | ||
==== Test Options ==== | ==== Test Options ==== | ||
− | * '''Set Slave Address'''<br /> | + | * '''Set Slave Address'''<br />Press the ''A'' key to select the Set slave address function, then press ''Enter''. |
− | Press the ''A'' key to select the Set slave address function, then press ''Enter''. | ||
The RTC Clock slave address in binary is 1010001 (58 in Hexadecimal). | The RTC Clock slave address in binary is 1010001 (58 in Hexadecimal). | ||
− | {{ | + | {{note | The slave address must be shifted to the right one bit. }} |
− | < | + | {{clop}}<nowiki> |
Select a function to test: | Select a function to test: | ||
a: Set slave address | a: Set slave address | ||
Line 208: | Line 218: | ||
Calling i2c_set_slave(3, 0x48) | Calling i2c_set_slave(3, 0x48) | ||
i2c_set_slave reports success | i2c_set_slave reports success | ||
− | </ | + | </nowiki> |
+ | {{closp}} | ||
== Summary == | == Summary == | ||
The <code>i2c_test</code> C example project writes and reads bytes to a selected register on the <code>I²C</code> device. | The <code>i2c_test</code> C example project writes and reads bytes to a selected register on the <code>I²C</code> device. |
Revision as of 12:51, 10 November 2015
This is a guide to the i2c_test
example project included in the EMAC OE SDK.
I²C
is a two wire serial interface used to connect to a variety of sensor and I/O devices. The interface uses only two bi-directional open-drain I/Os, Serial Data Line (SDA) and Serial Clock (SCL), to communicate to devices based on an address encoded within the data transmission. SDA is a data signal which sends and receives serially transmitted data. SCL is a clock signal which is used to determine when to latch data from the SDA line.
This procedure provides an overview of how to compile and run the i2c_test
C example project. This is an example test interface for reading/writing to the Linux I²C
device interface. It is only relevant if the I²C
device interface is enabled and an external I²C
device is connected to the bus. It assumes familiarity with the C programming language and is intended to be used by experienced programmers who are looking to learn the EMAC SDK.
For more information about the protocol see the following page: http://en.wikipedia.org/wiki/I²C
The i2c_test
project builds one executable: i2c_test
.
Contents
Opening, Building, and Uploading the Project Files
For information on opening the project from within Eclipse, please see, Importing the EMAC OE SDK Projects with Eclipse. Then, follow Using the EMAC OE SDK Projects with Eclipse for information on how to build, upload, and execute the example.
In OE 5, the project may be opened from within Qt Creator instead of Eclipse.
Alternatively, the Makefile
can be used with the make
command from the command-line to build and upload the example. For more information on this method, please see, Using EMAC OE SDK Example Projects.
Usage and Behavior
Hardware Requirements
The i2c_test
C example project will run on any EMAC carrier board which has an I²C
interface (see also the EMAC I²C Programming page).
Using i2c_test
The i2c_test
program is executed from the console. It takes no parameters.
root
@
som9x25
:
~
#
./i2c_test
A menu will appear in the terminal:
Select a function (a,b,c,d,e) to test or q to quit. You will be prompted for read, write and register values as appropriate. Test results will be displayed in the terminal.
Test Options
- Set Slave Address
Press the A key to select the Set slave address function, then press Enter.
The slave address receives the clock and responds when addressed by the master.
This function is to set the slave address of the I²C
device. This only need to be done once to initialize the address and then each time that a new device is addressed.
- Write byte to register
Press the B key to select the Write byte to register function, then press Enter
This function uses the Linux write
system call to write one byte to the selected register on the I²C
device.
- Write 2 bytes to register
Press the C key to select the Write 2 bytes to register function, then press Enter.
This function uses the same system call as the previous option, but writes 2 bytes to a register instead of just one.
- Read byte from register
Press the D key to select the Read byte from register function, then press Enter.
This function uses the Linux read
system call to read a byte to the selected register on the I²C
device.
- Read 2 bytes from register
Press the E key to select the Read 2 bytes from register function, then press Enter.
This function uses the same system call as the previous option, but shifts to the right.
The i2c_test
example writes a byte to a selected register. The register then reads the byte, shifts the byte 8 bits to the right and then reads the address to the selected register on the I²C
device.
- Quit
Press the Q key to quit out of thei2c_test
example, then press Enter.
This function exits you out of the i2c_test
example on the I²C
device.
Real-World Example
Hardware Requirements
The i2c_test
C Real-World example project will be running on an EMAC SOM-210ES carrier board. This example will be communicating with the RTC clock on the SOM-3517M.
For more information about the RTC Clock see the following page for the data sheet: http://www.nxp.com/documents/data_sheet/PCA8565.pdf
Using Real-World Example i2c_test
Just like before, the i2c_test
program is executed from the console. It takes no parameters.
root
@
som9x25
:
~
#
./i2c_test
A menu will appear in the terminal:
Test Options
- Set Slave Address
Press the A key to select the Set slave address function, then press Enter.
The RTC Clock slave address in binary is 1010001 (58 in Hexadecimal).
NOTE |
The slave address must be shifted to the right one bit. |
Summary
The i2c_test
C example project writes and reads bytes to a selected register on the I²C
device.