| 1 | {{{#!html |
| 2 | <div id="wikipage" class="trac-content"><p> |
| 3 | </p><div class="wiki-toc"> |
| 4 | <ol> |
| 5 | <li> |
| 6 | <a href="#VentanaDigitalIOandI2C">Ventana Digital IO and I2C</a> |
| 7 | </li> |
| 8 | <li> |
| 9 | <a href="#DIOandI2CMapping">DIO and I2C Mapping</a> |
| 10 | </li> |
| 11 | <li> |
| 12 | <a href="#SoftwareGPIOConfiguration">Software GPIO Configuration</a> |
| 13 | </li> |
| 14 | <li> |
| 15 | <a href="#ConfiguringGPIOHardware">Configuring GPIO Hardware</a> |
| 16 | </li> |
| 17 | <li> |
| 18 | <a href="#ConfiguringPWMHardware">Configuring PWM Hardware</a> |
| 19 | </li> |
| 20 | <li> |
| 21 | <a href="#Externaloroff-boardI2Csupport">External or off-board I2C support</a> |
| 22 | <ol> |
| 23 | <li> |
| 24 | <a href="#AccessingI2Contheboard">Accessing I2C on the board</a> |
| 25 | <ol> |
| 26 | <li> |
| 27 | <a href="#I2CattheDIOconnector">I2C at the DIO connector</a> |
| 28 | </li> |
| 29 | <li> |
| 30 | <a href="#I2ConHDMIoutput">I2C on HDMI output</a> |
| 31 | </li> |
| 32 | </ol> |
| 33 | </li> |
| 34 | </ol> |
| 35 | </li> |
| 36 | <li> |
| 37 | <a href="#AccessingI2CFromCCode">Accessing I2C From C Code</a> |
| 38 | </li> |
| 39 | <li> |
| 40 | <a href="#Usefullinks">Useful links</a> |
| 41 | </li> |
| 42 | </ol> |
| 43 | </div><p> |
| 44 | </p> |
| 45 | <h1 id="VentanaDigitalIOandI2C">Ventana Digital IO and I2C</h1> |
| 46 | <p> |
| 47 | The intent of this page is to provide information about Ventana single board computers off-board digital IO signals including I2C |
| 48 | </p> |
| 49 | <p> |
| 50 | <span class="wikianchor" id="mapping"></span> |
| 51 | </p> |
| 52 | <h1 id="DIOandI2CMapping">DIO and I2C Mapping</h1> |
| 53 | <p> |
| 54 | Ventana baseboards provide 4 digital IO signals to a connector. The IMX6 has 7 GPIO blocks having 32 GPIO's each which get mapped to gpio0 - through gpio 223. The various ventana product hardware manuals contain a table of what pins on the Digital IO connector routes to what IMX6 GPIO. In some cases these signals can be pinmux'd internally to one of four IMX6 PWM's. |
| 55 | </p> |
| 56 | <p> |
| 57 | Ventana GPIO Mapping: |
| 58 | </p> |
| 59 | <table class="wiki"> |
| 60 | <tr><th> <strong>Board</strong> </th><th> <strong>DIO</strong><sub>(1)</sub> </th><th> <strong>Connector</strong><sub>(2)</sub> </th><th> <strong>IMX6_PAD</strong><sub>(3)</sub> </th><th> <strong>IMX6 GPIO</strong><sub>(4)</sub> </th><th> </th><th> <strong>linux gpio</strong><sub>(5)</sub> </th><th> <strong>linux PWM</strong><sub>(6)</sub> </th><th> <strong>I2C</strong><sub>(7)</sub> |
| 61 | </th></tr><tr><td> GW51xx </td><td> DIO0 </td><td> J11.5 </td><td> PAD_SD1_DATA0 </td><td> GPIO1_IO16 </td><td> </td><td> gpio-16 </td><td> - </td><td> - |
| 62 | </td></tr><tr><td> GW51xx </td><td> DIO1 </td><td> J11.7 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> - |
| 63 | </td></tr><tr><td> GW51xx </td><td> DIO2 </td><td> J11.6 </td><td> PAD_SD1_DATA1 </td><td> GPIO1_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 64 | </td></tr><tr><td> GW51xx </td><td> DIO3 </td><td> J11.8 </td><td> PAD_SD1_CMD </td><td> GPIO1_IO18 </td><td> </td><td> gpio-18 </td><td> PWM4 </td><td> - |
| 65 | </td></tr><tr><td> |
| 66 | </td></tr><tr><td> GW52xx </td><td> DIO0 </td><td> J4.1 </td><td> PAD_SD1_DATA0 </td><td> GPIO1_IO16 </td><td> </td><td> gpio-16 </td><td> - </td><td> i2c-2 SDA <sub>(9)</sub> |
| 67 | </td></tr><tr><td> GW52xx </td><td> DIO1 </td><td> J4.2 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> i2c-2 SCL <sub>(9)</sub> |
| 68 | </td></tr><tr><td> GW52xx </td><td> DIO2 </td><td> J4.3 </td><td> PAD_SD1_DATA1 </td><td> GPIO1_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 69 | </td></tr><tr><td> GW52xx </td><td> DIO3 </td><td> J4.4 </td><td> PAD_SD1_CLK </td><td> GPIO1_IO20 </td><td> </td><td> gpio-20 </td><td> - </td><td> - |
| 70 | </td></tr><tr><td> |
| 71 | </td></tr><tr><td> GW53xx </td><td> DIO0 </td><td> J4.1 </td><td> PAD_SD1_DATA0 </td><td> GPIO1_IO16 </td><td> </td><td> gpio-16 </td><td> - </td><td> i2c-2 SDA |
| 72 | </td></tr><tr><td> GW53xx </td><td> DIO1 </td><td> J4.2 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> i2c-2 SCL |
| 73 | </td></tr><tr><td> GW53xx </td><td> DIO2 </td><td> J4.3 </td><td> PAD_SD1_DATA1 </td><td> GPIO1_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 74 | </td></tr><tr><td> GW53xx </td><td> DIO3 </td><td> J4.4 </td><td> PAD_SD1_CLK </td><td> GPIO1_IO20 </td><td> </td><td> gpio-20 </td><td> - </td><td> - |
| 75 | </td></tr><tr><td> |
| 76 | </td></tr><tr><td> GW54xx </td><td> DIO0 </td><td> J16.1 </td><td> PAD_GPIO_9 </td><td> GPIO1_IO09 </td><td> </td><td> gpio-9 </td><td> PWM1 </td><td> i2c-2 SDA |
| 77 | </td></tr><tr><td> GW54xx </td><td> DIO1 </td><td> J16.2 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> i2c-2 SCL |
| 78 | </td></tr><tr><td> GW54xx </td><td> DIO2 </td><td> J16.3 </td><td> PAD_SD4_DATA1 </td><td> GPIO2_IO09 </td><td> </td><td> gpio-41 </td><td> PWM3 </td><td> - |
| 79 | </td></tr><tr><td> GW54xx </td><td> DIO3<sub>(10)</sub> </td><td> J16.4 </td><td> PAD_SD4_DATA2 </td><td> GPIO2_IO10 </td><td> </td><td> gpio-42 </td><td> PWM4 </td><td> - |
| 80 | </td></tr><tr><td> |
| 81 | </td></tr><tr><td> GW551x </td><td> DIO1 </td><td> J3.19 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> - |
| 82 | </td></tr><tr><td> GW551x </td><td> DIO2 </td><td> J3.20 </td><td> PAD_SD1_DATA1 </td><td> GPIO2_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 83 | </td></tr><tr> |
| 84 | </tr><tr><td> GW551x </td><td> </td><td> J3.7 </td><td> </td><td> </td><td> </td><td style="text-align: center"> </td><td style="text-align: center"> </td><td> I2C SDA |
| 85 | </td></tr><tr><td> GW551x </td><td> </td><td> J3.8 </td><td> </td><td> </td><td> </td><td style="text-align: center"> </td><td style="text-align: center"> </td><td> I2C SCL |
| 86 | </td></tr><tr> |
| 87 | </tr><tr><td> |
| 88 | </td></tr><tr><td> GW552x </td><td> DIO0 </td><td> J8.9 </td><td> PAD_SD1_DATA0 </td><td> GPIO1_IO16 </td><td> </td><td> gpio-16 </td><td> - </td><td> - |
| 89 | </td></tr><tr><td> GW552x </td><td> DIO1 </td><td> J8.11 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> - |
| 90 | </td></tr><tr><td> GW552x </td><td> DIO2 </td><td> J8.10 </td><td> PAD_SD1_DATA1 </td><td> GPIO1_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 91 | </td></tr><tr><td> GW552x </td><td> DIO3 </td><td> J8.12 </td><td> PAD_SD1_CLK </td><td> GPIO1_IO20 </td><td> </td><td> gpio-20 </td><td> - </td><td> - |
| 92 | </td></tr><tr><td> GW552x </td><td> DIO4 </td><td> J8.15 </td><td> PAD_CSI0_PIXCLK </td><td> GPIO5_IO18 </td><td> </td><td> gpio-146 </td><td> - </td><td> - |
| 93 | </td></tr><tr><td> GW552x </td><td> DIO5 </td><td> J8.17 </td><td style="text-align: right"> PAD_CSI0_DATA_EN</td><td> GPIO5_IO20 </td><td> </td><td> gpio-148 </td><td> - </td><td> - |
| 94 | </td></tr><tr><td> GW552x </td><td> DIO6 </td><td> J8.16 </td><td> PAD_CSI0_VSYNC </td><td> GPIO5_IO21 </td><td> </td><td> gpio-149 </td><td> - </td><td> - |
| 95 | </td></tr><tr><td> GW552x </td><td> DIO7 </td><td> J8.18 </td><td> PAD_CSI0_DAT4 </td><td> GPIO5_IO22 </td><td> </td><td> gpio-150 </td><td> - </td><td> - |
| 96 | </td></tr><tr><td> GW552x </td><td> DIO8 </td><td> J8.1 </td><td> PAD_CSI0_DAT5 </td><td> GPIO5_IO23 </td><td> </td><td> gpio-151 </td><td> - </td><td> - |
| 97 | </td></tr><tr><td> GW552x </td><td> DIO9 </td><td> J8.2 </td><td> PAD_CSI0_DAT7 </td><td> GPIO5_IO25 </td><td> </td><td> gpio-153 </td><td> - </td><td> - |
| 98 | </td></tr><tr><td> |
| 99 | </td></tr><tr><td> GW553x </td><td> DIO0 </td><td> J10.5 </td><td> PAD_SD1_DATA0 </td><td> GPIO1_IO16 </td><td> </td><td> gpio-16 </td><td> - </td><td> - |
| 100 | </td></tr><tr><td> GW553x </td><td> DIO1 </td><td> J10.7 </td><td> PAD_SD1_DATA2 </td><td> GPIO1_IO19 </td><td> </td><td> gpio-19 </td><td> PWM2 </td><td> - |
| 101 | </td></tr><tr><td> GW553x </td><td> DIO2 </td><td> J10.6 </td><td> PAD_SD1_DATA1 </td><td> GPIO1_IO17 </td><td> </td><td> gpio-17 </td><td> PWM3 </td><td> - |
| 102 | </td></tr><tr><td> GW553x </td><td> DIO3 </td><td> J10.8 </td><td> PAD_SD1_CMD </td><td> GPIO1_IO18 </td><td> </td><td> gpio-18 </td><td> PWM4 </td><td> |
| 103 | </td></tr><tr><td> - |
| 104 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.0 </td><td> J12.1 (IO0) </td><td> - </td><td> - </td><td> </td><td> gpio-224 </td><td> - </td><td> - |
| 105 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.1 </td><td> J12.2 (IO1) </td><td> - </td><td> - </td><td> </td><td> gpio-225 </td><td> - </td><td> - |
| 106 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.2 </td><td> J12.3 (IO2) </td><td> - </td><td> - </td><td> </td><td> gpio-226 </td><td> - </td><td> - |
| 107 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.3 </td><td> J12.4 (IO3) </td><td> - </td><td> - </td><td> </td><td> gpio-227 </td><td> - </td><td> - |
| 108 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.4 </td><td> J13.1 (IO4) </td><td> - </td><td> - </td><td> </td><td> gpio-228 </td><td> - </td><td> - |
| 109 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.5 </td><td> J13.2 (IO5) </td><td> - </td><td> - </td><td> </td><td> gpio-229 </td><td> - </td><td> - |
| 110 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.6 </td><td> J13.3 (IO6) </td><td> - </td><td> - </td><td> </td><td> gpio-230 </td><td> - </td><td> - |
| 111 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P0.7 </td><td> J13.4 (IO7) </td><td> - </td><td> - </td><td> </td><td> gpio-231 </td><td> - </td><td> - |
| 112 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.0 </td><td> J14.1 (IO8) </td><td> - </td><td> - </td><td> </td><td> gpio-232 </td><td> - </td><td> - |
| 113 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.1 </td><td> J14.2 (IO9) </td><td> - </td><td> - </td><td> </td><td> gpio-233 </td><td> - </td><td> - |
| 114 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.2 </td><td> J14.3 (IO10) </td><td> - </td><td> - </td><td> </td><td> gpio-234 </td><td> - </td><td> - |
| 115 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.3 </td><td> J14.4 (IO11) </td><td> - </td><td> - </td><td> </td><td> gpio-235 </td><td> - </td><td> - |
| 116 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.4 </td><td> J15.1 (IO12) </td><td> - </td><td> - </td><td> </td><td> gpio-236 </td><td> - </td><td> - |
| 117 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.5 </td><td> J15.2 (IO13) </td><td> - </td><td> - </td><td> </td><td> gpio-237 </td><td> - </td><td> - |
| 118 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.6 </td><td> J15.3 (IO14) </td><td> - </td><td> - </td><td> </td><td> gpio-238 </td><td> - </td><td> - |
| 119 | </td></tr><tr><td> GW16111<sub>(8)</sub> </td><td> P1.7 </td><td> J15.4 (IO15) </td><td> - </td><td> - </td><td> </td><td> gpio-239 </td><td> - </td><td> - |
| 120 | </td></tr><tr><td> |
| 121 | </td></tr></table> |
| 122 | <ol><li>This is the signal name from the <a class="ext-link" href="http://www.gateworks.com/usermanuals"><span class="icon"></span>Ventana hardware manuals</a> |
| 123 | </li><li>This is the connector pinout. The 5th pin on 5-pin connectors is GND |
| 124 | </li><li>Consult the IMX6 Reference manuals for PAD info: <a class="ext-link" href="http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6DQRM.pdf"><span class="icon"></span>IMX6DQRM</a> <a class="ext-link" href="http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6SDLRM.pdf"><span class="icon"></span>IMX6SDLRM</a> |
| 125 | </li><li>This is the GPIO block and IO the PAD is pinmux'd to when hwconfig is configured for GPIO |
| 126 | </li><li>This is the gpio mapped in linux accessible via /sys/class/gpio. Note that the pinmux and IO configuration are done by the <a class="wiki" href="/wiki/ventana/bootloader#DIOconfiguration">bootloader</a>, but you will need to manually export the GPIO to use it (see <a class="wiki" href="/wiki/gpio">here</a> for details) |
| 127 | </li><li>This is the PWM that the PAD is pinmux'd to by the bootloader with hwconfig is conifgured for PWM. <a class="wiki" href="/wiki/ventana/bootloader#DIOconfiguration">u-boot hwconfig to configure DIO pinmux/config</a> |
| 128 | </li><li>GW54xx and GW53xx (revision B and above) can extend the 2nd CPU I2C bus (I2C3 available as /dev/i2c-2) out the DIO connector if gpio-101 is driven high. see below |
| 129 | </li><li>The GW16111 is an expansion board for the GW551x family. It has a (PCA9555) digital io expansion chip that gives it 16 GPIO's. There are 2 8 bit ports for 16 bits total (P0 & P1). Each IO has a series current limiting resistor of 332 Ohms. |
| 130 | </li><li>GW52xx does not have an i2c buffer for protection |
| 131 | </li><li>The GW5400 PWM4 can be routed to two different pads/connectors. By default the Ventana kernel device-tree's map PWM4 to the J6.5 backlight connector. If you want to use PWM4 as DIO3 on J16.4 you need to change the kernel device-tree and should contact support@… for details. |
| 132 | </li></ol><p> |
| 133 | The pinmux and IO configuration is done by the bootloader depending on the hwconfig env variable. For information on how to configure that see <a class="wiki" href="/wiki/ventana/bootloader#DIOconfiguration">hwconfig</a> |
| 134 | </p> |
| 135 | <h1 id="SoftwareGPIOConfiguration">Software GPIO Configuration</h1> |
| 136 | <p> |
| 137 | Please visit this link to find out more information about using GPIO's in Linux |
| 138 | </p> |
| 139 | <ul><li><a class="wiki" href="/wiki/gpio">GPIO basics and Linux configuraiton</a> |
| 140 | </li></ul><h1 id="ConfiguringGPIOHardware">Configuring GPIO Hardware</h1> |
| 141 | <p> |
| 142 | <strong>Typically not needed as defaults should work</strong> |
| 143 | Please visit this link to find out how to configure the pin function and IO driver details (pull-up, drive str, etc) of the Digital IO pins: |
| 144 | </p> |
| 145 | <ul><li><a class="wiki" href="/wiki/ventana/bootloader#DIOconfiguration">u-boot hwconfig to configure DIO pinmux/config</a> |
| 146 | </li></ul><h1 id="ConfiguringPWMHardware">Configuring PWM Hardware</h1> |
| 147 | <p> |
| 148 | See <a class="wiki" href="/wiki/linux/pwm">linux/pwm</a> |
| 149 | </p> |
| 150 | <p> |
| 151 | <span class="wikianchor" id="external-i2c"></span> |
| 152 | </p> |
| 153 | <h1 id="Externaloroff-boardI2Csupport">External or off-board I2C support</h1> |
| 154 | <p> |
| 155 | <strong>Please consult the <a class="ext-link" href="http://www.gateworks.com/usermanuals"><span class="icon"></span>Hardware Manuals</a> for pint output and support] |
| 156 | </strong></p> |
| 157 | <table class="wiki"> |
| 158 | <tr><th> Model </th><th> external I2C Support </th><th> Notes |
| 159 | </th></tr><tr><td> GW551x </td><td> Yes </td><td> Does not have I2C buffer |
| 160 | </td></tr><tr><td> GW51xx </td><td> No </td><td> Can add via GW16113 |
| 161 | </td></tr><tr><td> GW52xx </td><td> Yes (Requires resistor loading) </td><td> Does not have I2C buffer |
| 162 | </td></tr><tr><td> GW53xx-B+ </td><td> Yes </td><td> Has software controlled I2C buffer |
| 163 | </td></tr><tr><td> GW54xx-B+ </td><td> Yes </td><td> Has software controlled I2C buffer |
| 164 | </td></tr><tr><td> GW552x </td><td> No </td><td> Can add via GW16113 |
| 165 | </td></tr></table> |
| 166 | <p> |
| 167 | Ventana boards rely heavily on the I2C bus for on-board devices. The IMX6 supports 4 i2c controllers and Ventana uses the first three as: |
| 168 | </p> |
| 169 | <table class="wiki"> |
| 170 | <tr><th> I2C Bus </th><th> Linux Device </th><th> Description |
| 171 | </th></tr><tr><td> 1 </td><td> /dev/i2c-0 </td><td> GSC |
| 172 | </td></tr><tr><td> 2 </td><td> /dev/i2c-1 </td><td> PMIC, System items |
| 173 | </td></tr><tr><td> 3 </td><td> /dev/i2c-2 </td><td> Multimedia, HDMI, LVDS, Audio, User bus |
| 174 | </td></tr></table> |
| 175 | <h2 id="AccessingI2Contheboard">Accessing I2C on the board</h2> |
| 176 | <p> |
| 177 | Note that depending on the board model, there may be some i2c device addresses already in use. Please refer to this table: |
| 178 | </p> |
| 179 | <table class="wiki"> |
| 180 | <tr><th> Device </th><th> 7bit Address </th><th> Present On </th><th> Notes |
| 181 | </th></tr><tr><td> FXOS8700 </td><td> 0x1E </td><td> GW5400/GW5410/GW5300/GW5310 </td><td> Accelerometer / Magnetometer, Bus 3 |
| 182 | </td></tr><tr><td> SGTL5000 </td><td> 0x0A </td><td> GW5400/GW5300 </td><td> Analog Audio Codec |
| 183 | </td></tr><tr><td> ADV7180 </td><td> 0x20 </td><td> GW5400/GW5300 </td><td> Analog Video Decoder Bus 3 |
| 184 | </td></tr><tr><td> ADV7393 </td><td> 0x2A </td><td> GW5400 </td><td> Analog Video Encoder |
| 185 | </td></tr><tr><td> TDF19771 </td><td> 0x34 </td><td> GW5400 </td><td> HDMI Receiver |
| 186 | </td></tr><tr><td> TDF19771 </td><td> 0x48 </td><td> GW5400 </td><td> HDMI Receiver CEC |
| 187 | </td></tr><tr><td style="text-align: right"> HDMI EDID</td><td> 0x50 </td><td> GW5xxx </td><td> HDMI Monitor EDID device (If HDMI monitor plugged in) |
| 188 | </td></tr></table> |
| 189 | <ul><li>Also note that this i2c bus goes to the LVDS Display connector which if used, may have i2c devices there as well (such as touchscreen controllers) |
| 190 | </li><li>The models listed are catalog parts only - components on Gateworks specials may vary (contact Sales for more info) |
| 191 | </li></ul><p> |
| 192 | Many Ventana boards provide the I2C3 (/dev/i2c-2) bus via an off-board connection: |
| 193 | </p> |
| 194 | <ul><li>used for HDMI DDC channel to support EDID for boards supporting HDMI output |
| 195 | </li><li>routed to DIO connector via softwtare configuration on most Ventana models. |
| 196 | </li></ul><h3 id="I2CattheDIOconnector">I2C at the DIO connector</h3> |
| 197 | <p> |
| 198 | Several Ventana boards can optionally configure the CPU I2C3 bus (/dev/i2c-2) SDA/SCL to route out to the Digital IO connector pins 1 (DIO0) and 2 (DIO1) respectively (see <a class="wiki" href="/wiki/ventana/DigitalIO#external-i2c">above</a>) |
| 199 | </p> |
| 200 | <p> |
| 201 | Note that on these boards that have i2c-2 off-board via DIO0/DIO1 capability, there are 4.7kohm pull-up's to <strong>3.3V</strong> on DIO0/DIO1 (SCL/SDA). |
| 202 | </p> |
| 203 | <p> |
| 204 | For those boards that have a software controlled I2C buffer, the buffer is disabled by default and to enable it you must: |
| 205 | </p> |
| 206 | <ol><li>Confirm in the <strong>bootloader</strong> that DIO0 and DIO1 are set to GPIO in the hwconfig variable. These is the default configuration, so most likely no changes are needed: |
| 207 | <pre class="wiki">Ventana > print hwconfig |
| 208 | hwconfig=rs232;dio0:mode=gpio;dio1:mode=gpio;dio2:mode=gpio;dio3:mode=gpio |
| 209 | </pre><ul><li>Note above how dio0 and dio1 are set to gpio mode and not pwm mode |
| 210 | </li></ul></li></ol><ol start="2"><li>Set the I2C_EN signal (gpio-101) high to enable the I2C buffer by appending <tt>gpio set 101</tt> to the bootloader bootcmd: |
| 211 | <pre class="wiki">Ventana > setenv bootcmd "gpio set 101; ${bootcmd}" |
| 212 | Ventana > saveenv |
| 213 | </pre><ul><li>We do this in the bootloader so that the i2c buffer is enabled by the time i2c kernel drivers are probing the bus. |
| 214 | </li><li>This is not necessary on the GW52xx as it does not have an i2c buffer for protection. |
| 215 | </li></ul></li></ol><ol start="3"><li>Ensure you are not 'exporting' DIO0 and DIO1 gpios in Linux userspace as they will conflict with SDA/SCL if made to be outputs. |
| 216 | </li></ol><p> |
| 217 | You can test by using a oscilloscope and probing the lines and issuing a command like shown below. You will see activity. |
| 218 | </p> |
| 219 | <p> |
| 220 | Usage: i2cget [-f] [-y] I2CBUS CHIP-ADDRESS [DATA-ADDRESS [MODE]] |
| 221 | </p> |
| 222 | <p> |
| 223 | Example shown is on bus 3 (0 based, thus 2 is shown, address 0x20 and Data Address of 0) |
| 224 | </p> |
| 225 | <p> |
| 226 | <strong>Please adjust below example for actual bus and I2C address.</strong> |
| 227 | </p> |
| 228 | <pre class="wiki">i2cget -f -y 2 0x20 0 |
| 229 | </pre><p> |
| 230 | A quick script to do the above commands for a GW5400: |
| 231 | </p> |
| 232 | <pre class="wiki">#!/bin/sh |
| 233 | |
| 234 | # make DIO0 and DIO1 inputs to not conflict with I2C-2 SCL/SDA |
| 235 | echo 9 > /sys/class/gpio/export |
| 236 | echo 19 > /sys/class/gpio/export |
| 237 | echo in > /sys/class/gpio/gpio9/direction |
| 238 | echo in > /sys/class/gpio/gpio19/direction |
| 239 | |
| 240 | # enable I2C_EN |
| 241 | echo 101 > /sys/class/gpio/export |
| 242 | echo out > /sys/class/gpio/gpio101/direction |
| 243 | echo 1 > /sys/class/gpio/gpio101/value |
| 244 | </pre><p> |
| 245 | Note that on these boards that have i2c-2 off-board via DIO0/DIO1 capability, there are 4.7kohm pull-up's to 3.3V on DIO0/DIO1. |
| 246 | </p> |
| 247 | <h3 id="I2ConHDMIoutput">I2C on HDMI output</h3> |
| 248 | <p> |
| 249 | All boards that have HDMI output, route I2C3 to the HDMI connector. For pinout details see the HDMI specification for the specific connector type. Note that Type-A (standard HDMI) and Type-D (micro HDMI) have different pinouts. |
| 250 | </p> |
| 251 | <p> |
| 252 | References: |
| 253 | </p> |
| 254 | <ul><li><a class="ext-link" href="http://en.wikipedia.org/wiki/HDMI"><span class="icon"></span>http://en.wikipedia.org/wiki/HDMI</a> |
| 255 | </li></ul><h1 id="AccessingI2CFromCCode">Accessing I2C From C Code</h1> |
| 256 | <p> |
| 257 | The best reference is looking at the source code for the standard I2C tools available on the Linux command line. |
| 258 | </p> |
| 259 | <p> |
| 260 | See links below: |
| 261 | </p> |
| 262 | <ul><li><a class="ext-link" href="https://lxr.missinglinkelectronics.com/linux/Documentation/i2c/dev-interface"><span class="icon"></span>https://lxr.missinglinkelectronics.com/linux/Documentation/i2c/dev-interface</a> |
| 263 | </li><li><a class="ext-link" href="https://github.com/groeck/i2c-tools/tree/master/tools"><span class="icon"></span>https://github.com/groeck/i2c-tools/tree/master/tools</a> |
| 264 | </li></ul><h1 id="Usefullinks">Useful links</h1> |
| 265 | <ul><li><a class="wiki" href="/wiki/gpio">Linux GPIO and GPIO basics</a> |
| 266 | </li><li><a class="wiki" href="/wiki/linux/pwm">Linux PWM and PWM basics</a> |
| 267 | </li><li><a class="wiki" href="/wiki/ventana/bootloader#DIOconfiguration">u-boot hwconfig to configure DIO pinmux/config</a> |
| 268 | </li><li><a class="ext-link" href="http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6DQRM.pdf"><span class="icon"></span>IMX6DQRM (IMX6D/IMX6Q Reference manual)</a> |
| 269 | </li><li><a class="ext-link" href="http://cache.freescale.com/files/32bit/doc/ref_manual/IMX6SDLRM.pdf"><span class="icon"></span>IMX6SDLRM (IMX6S/IMX6DL Reference manual)</a> |
| 270 | </li></ul |
| 271 | }}} |