<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=EM-X270%3A_WinCE%3A_I2C_Sample</id>
	<title>EM-X270: WinCE: I2C Sample - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.mediawiki.compulab.com/w/index.php?action=history&amp;feed=atom&amp;title=EM-X270%3A_WinCE%3A_I2C_Sample"/>
	<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=EM-X270:_WinCE:_I2C_Sample&amp;action=history"/>
	<updated>2026-05-03T07:39:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://www.mediawiki.compulab.com/w/index.php?title=EM-X270:_WinCE:_I2C_Sample&amp;diff=944&amp;oldid=prev</id>
		<title>Mike at 11:44, 16 March 2010</title>
		<link rel="alternate" type="text/html" href="https://www.mediawiki.compulab.com/w/index.php?title=EM-X270:_WinCE:_I2C_Sample&amp;diff=944&amp;oldid=prev"/>
		<updated>2010-03-16T11:44:44Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Introduction = &lt;br /&gt;
This sample application demonstrates the I2C communication between EM-X270 and CAT9555 GPIO extender located on EB-X270. The CAT9555 datasheet is available at: [http://www.onsemi.com/pub_link/Collateral/CAT9555-D.PDF 9555.pdf].&lt;br /&gt;
&lt;br /&gt;
The I2C sample is located in the EM-X270 run-time image package in the {{Filename|\x270-em-wince6-img\Demo Applications\I2CSample}} folder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= I2C Sample =&lt;br /&gt;
The sample application performs the following actions:&lt;br /&gt;
* Read the configuration registers. Normal mode clock is used.&lt;br /&gt;
* Write registers. Set all pins, except for pin 0, to inputs.&lt;br /&gt;
* Read the registers to verify write.&lt;br /&gt;
* Read the output port register.&lt;br /&gt;
* Write the output port register. Configure pin 1 on P9 connector on the EB-X270 to be low.&lt;br /&gt;
&lt;br /&gt;
= Connecting Custom Device =&lt;br /&gt;
I2C physical interface:&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid rgb(85, 85, 85); border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Signal Name'''&lt;br /&gt;
| '''EB-X270'''&lt;br /&gt;
| '''EM-X270'''&lt;br /&gt;
|-&lt;br /&gt;
| SCL &lt;br /&gt;
| Pin 19 of U5&lt;br /&gt;
| Pin 132 on the CAMI&lt;br /&gt;
|-&lt;br /&gt;
| SDA&lt;br /&gt;
| Pin 20 of U5&lt;br /&gt;
| Pin 136 on the CAMI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= I2C Driver API =&lt;br /&gt;
The Windows CE demo image includes an I2C driver that allows interaction with I2C devices. &lt;br /&gt;
The I2C driver is a stream driver that may be accessed using the &amp;quot;I2C&amp;quot; prefix.&lt;br /&gt;
The following pseudo code describes the driver’s algorithm:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1.  Set the clock speed according to mClkSpeed&lt;br /&gt;
2.  FOR i=0 TO i=mTransaction-1&lt;br /&gt;
      IF (mOpCode[i] == I2C_OPCODE_WRITE) THEN&lt;br /&gt;
         FOR j=0 TO mTransLen[i]-1   &lt;br /&gt;
           write mBuffer[mBufferOffset[i]+j] to the bus.&lt;br /&gt;
      ELSE IF (mOpCode[i] ==  I2C_OPCODE_READ) THEN &lt;br /&gt;
         FOR j=0 TO mTransLen[i]-1&lt;br /&gt;
           read mTransLen[i] bytes from the bus into mBuffer[mBufferOffset[i]+j]&lt;br /&gt;
      ELSE “Fail – OpCode not supported”&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Data Types ==&lt;br /&gt;
{{Enum| HeadLevel = ==== | Enumname = PXA_I2C_SPEED_T |&lt;br /&gt;
Description = |  &lt;br /&gt;
Field1 = PXA_I2C_FAST_SPEED - use 400KHz clock|&lt;br /&gt;
Field2 = PXA_I2C_NORMAL_SPEED - use 100KHz clock|&lt;br /&gt;
Field3 =  |&lt;br /&gt;
Field4 =  |&lt;br /&gt;
Remarks =&lt;br /&gt;
}}&lt;br /&gt;
{{Enum| HeadLevel = ==== | Enumname = PXA_I2C_OPERATION_CODE |&lt;br /&gt;
Description = |  &lt;br /&gt;
Field1 = I2C_OPCODE_READ |&lt;br /&gt;
Field2 = I2C_OPCODE_WRITE |&lt;br /&gt;
Field3 = |&lt;br /&gt;
Field4 = |&lt;br /&gt;
Remarks = &lt;br /&gt;
}}&lt;br /&gt;
{{Struct| HeadLevel = ==== | Structname = I2CTRANS |&lt;br /&gt;
Description = |&lt;br /&gt;
Field1 = DWORD	mTransactions |&lt;br /&gt;
Fieldexp1 = Number f transactions to perform|&lt;br /&gt;
Field2 = [[#PXA_I2C_SPEED_T|PXA_I2C_SPEED_T]] mClkSpeed|&lt;br /&gt;
Fieldexp2 = |&lt;br /&gt;
Field3 = UCHAR	mDeviceAddr|&lt;br /&gt;
Fieldexp3 = 7 bit I2C address|&lt;br /&gt;
Field4 = [[#PXA_I2C_OPERATION_CODE|PXA_I2C_OPERATION_CODE]] *mOpCode|&lt;br /&gt;
Fieldexp4 = |&lt;br /&gt;
Field5 = DWORD	*mBufferOffset|&lt;br /&gt;
Fieldexp5 = The offset for the data in the array for each transaction|&lt;br /&gt;
Field6 = DWORD	*mTransLen|&lt;br /&gt;
Fieldexp6 = The length of each transaction|&lt;br /&gt;
Field7 = DWORD	mErrorCode|&lt;br /&gt;
Fieldexp7 = |&lt;br /&gt;
Field8 = UCHAR	*mBuffer|&lt;br /&gt;
Fieldexp8 = The buffer with the data for all the transactions|&lt;br /&gt;
MoreFields = |&lt;br /&gt;
Remarks = |&lt;br /&gt;
}}&lt;br /&gt;
== Functions ==&lt;br /&gt;
{{APIEx | HeadLevel = ==== | Signature = HANDLE I2CUserOpen() | &lt;br /&gt;
Description = Opens an instance of the I2C Driver.  |  &lt;br /&gt;
Return = Returns a handle that should be used to access the driver. Nonzero indicates success. |&lt;br /&gt;
Param1 = |&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx | HeadLevel = ==== | Signature = void I2CUserClose(HANDLE hDevice) | &lt;br /&gt;
Description = Closes the driver handle |  &lt;br /&gt;
Return = |&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
{{APIEx | HeadLevel = ==== | Signature = void I2CUserTransact(HANDLE hDevice, [[#I2CTRANS|I2CTRANS]]* pTrans) | &lt;br /&gt;
Description = Perform the I2C transaction |  &lt;br /&gt;
Return = TRUE on success|&lt;br /&gt;
Param1 = *hDevice - Handle to an open driver instance|&lt;br /&gt;
Param2 = *pTrans |&lt;br /&gt;
Param3 = |&lt;br /&gt;
Param4 = |&lt;br /&gt;
Remarks = }}&lt;br /&gt;
&lt;br /&gt;
[[Category:Windows CE|I2C Sample ]]&lt;br /&gt;
[[Category:EM-X270|WinCE: I2C Sample ]]&lt;/div&gt;</summary>
		<author><name>Mike</name></author>
		
	</entry>
</feed>