Changes

How to use I2C

4,565 bytes added, 11:45, 31 December 2013
m
Requirements
= Overview =
This How-To is meant to be a starting point for people to learn use I2C for IGEP v2 devices as quickly and easily as possible. For In this how-to i do , we use a program that reads and decodes EDID information from EEPROM display. This program was tested in :  *[http://releases.linaro.org/platform/linaro-m/headless/final/linaro-m-headless-tar-20101108-2.tar.gz Linaro Headless] and [[How to get the Poky Linux distribution|Poky Linux distribution]] with [[Linux_Kernel_2Linux Kernel 2.6.35.y|Kernel 2.6.35.y]] and <br> *[[IGEP firmware Yocto|IGEP firmware Yocto]] with [[How to get the Poky Linux distributionLinux_Kernel_2.6.37.y|Poky Linux distributionKernel 2.6.37.y]] NOTE: This program is a beta version, it decodes EDID following E-EDID Standard Release A-1 from VESA using i2c-dev driver. There are some functionalities that are not implemented (see code comments) and other new ones that appear in other revisions. Besides, this program only parses the first EDID 128 bytes block. But this code is enough to learn to use I2C.<br>
More information about [http://en.wikipedia.org/wiki/Extended_display_identification_data EDID].<br>
= Feedback and Contributing Requirements =
At any pointThere are some requisites to follow this guide:  *[https://www.isee.biz/support/downloads/item/igep-virtual-machine-sdk IGEP SDK VM]: follow the [http://isee.biz/component/zoo/item/igep-sdk-software-user-manual IGEP&nbsp;SDK&nbsp;SOFTWARE&nbsp;USER&nbsp;MANUAL] (chapter 2.3 "Setting up and running the VM") or install [http://labs.isee.biz/index.php/How_to_setup_a_cross_compiler#Download.2FInstall_IGEP_SDK IGEP&nbsp;SDK] in your host computer<br> *[http://www.isee.biz/products/processor-boards/igepv2-board IGEPv2], if you see a mistake you can contribute to [https://www.isee.biz/products/igep-expansion-boards/igep-berlin IGEP BERLIN] or [https://www.isee.biz/products/igep-expansion-boards/igep-paris IGEP PARIS] (in this Howguide is used I2C located at HDMI connector) *[http://labs.isee.biz/images/8/8c/Parse-edid-Tobeta3.tar.bz2 parse-edid-beta3.tar. bz2]<br>
= Check I2C Devices =
In this How'''NOTE:''' use these steps with [http://releases.linaro.org/platform/linaro-m/headless/final/linaro-m-headless-tar-to i used pre20101108-compiled modules, because: it's quick and it works2.tar. All versions of Linux are supported, as long as I2C support is included in the kernelgz Linaro Headless] .
In this How-to, I used pre-compiled modules, because: it's quick and it works. All versions of Linux are supported, as long as I2C support is included in the kernel. <br>  To make sure that I2C driver works well, follow the next steps (tested in [http://releases.linaro.org/platform/linaroto install i2c-m/headless/final/linaro-m-headless-tar-20101108-2.tar.gz Linaro Headless])tools:
<pre>sudo apt-get install i2c-tools
</pre> Parse I2C busses: <pre>i2cdetect -l</pre>The result will be similar at that: <pre>i2c-1 i2c OMAP I2C adapter I2C adapteri2c-3 i2c OMAP I2C adapter I2C adapter</pre> It's important than i2c-3 was enabled, because it connects to DVI-D by default. = Compile and Run<br> = Download [http://labs.isee.biz/images/8/8c/Parse-edid-beta3.tar.bz2 parse-edid-beta3.tar.bz2] and extract it.  There are some things that is interesting learn, before compiling the program. Open it and seek next lines:<br> <pre>//1==enabled 0==disable#define FORCE 1 //Address DVI Standard: 0x50#define ADDRESS 0x50</pre> Constant FORCE is defined to allow this program access to I2c, although other programs use it at the same time. It can be dangerous in writing operations but in read operations don't have problems.<br>  Constant ADDRESS is defined to acces in specific I2C address. In DVI devices, 0x50 is default address, that means that other peripherals can be connected to same bus with other 7 bit address.  See the code below:<br> <pre>for (i=0;i&lt;=255;i++){ edidint[i]=i2c_smbus_read_byte_data(fd,i); if (edidint[i]&lt;0) { printf("Error:read failed\n"); return -1; }} </pre> The program uses i2c_smbus_read_byte_data function to get information from display, "i" variable is the EEPROM address. EEPROM (Slave) reads address from Omap (Master), after, EEPROM sends the address value to Omap (Master). <br>  More information about [[Peripherals Summary#I2C|I2C]].<br>  Compile program using IGEP SDK: <pre>arm-poky-linux-gnueabi-gcc parse-edid-beta3.c -o parse-edid-beta3</pre> Export binary to IGEP using [[Transfer files via SCP|scp]]: <pre>scp parse-edid-beta3 root@&lt;IGEP IP address&gt;:/home/root </pre> Run program as root. Pass the i2c number that you want to parse: <pre>./parse-edid-beta3 -d 3</pre> = Results = This is the result from a Samsung SyncMaster B2030HD display, you can contribute to this How-To adding your display information:<br> <pre>root@localhost:~/I2CPROGRAM# parse-edid-beta3 -d 3256-byte EDID successfully retrieved from i2c bus 3Decode EDID information: Manufacturer: SAM Model 70a Serial Number 0Made week 11 of 2010EDID version: 1.3 Digital displayMaximum image size: 44 cm x 25 cmGamma: 2.20Supported color formats: RGB 4:4:4, YCrCb 4:2:2First detailed timing is preferred timing Established timings supported: 720x400@70Hz 640x480@60Hz 640x480@67Hz 640x480@72Hz 640x480@75Hz 800x600@56Hz 800x600@60Hz 800x600@72Hz 800x600@75Hz 832x624@75Hz 1024x768@60Hz 1024x768@70Hz 1024x768@75Hz 1280x1024@75Hz 1152x870@75Hz Standard timings supported: 1152x864@75Hz 1280x800@60Hz 1280x800@75Hz 1280x1024@60Hz 1440x900@60Hz 1440x900@75Hz Detailed mode: Clock: 108.000 MHz, Screen: 443 mm x 249 mm, Active resolution: 1600x900, Blanking resolution: 1624x901, Sync offset resolution: 1704x904, Sync pulse width resolution: 1800x1000, Hborder: 0, Vborder: 0, +hsync +vsync
=Compile=
=Run program=Detailed mode: Clock: 74.250 MHz, Screen: 443 mm x 249 mm, Active resolution: 1280x720, Blanking resolution: 1720x725, Sync offset resolution: 1760x730, Sync pulse width resolution: 1980x750, Hborder: 0, Vborder: 0, +hsync +vsync
'''Under construction''' Monitor ranges: 24-75HZ vertical, 26-81kHz horizontal, max dotclock 230MHz
[[CategoryMonitor name:Communications]] [[Category:Work_in_progress]]SMB2030HD</pre>
4,199
edits