ÏîÄ¿ÖÐÓõ½ZLG7260°´¼üÊýÂëÏÔʾоƬÓëat91sam9260ϵÁÐARM9´¦ÀíÆ÷Á¬½Ó£¬ZLG7290ͨ¹ýI2C½Ó¿ÚÓëARM9µÄTWI I2C£¨PA23£ºSDAÊý¾ÝÏß £»PA24£ºSCLʱÖÓÏߣ©½Ó¿ÚÏàÁ¬Á¬½Ó£¬ÁíÍ⻹ÓÐÒ»¸öÖжÏÐźÅÒý½Å£¨INT£©ÓëARMµÄÒ»¸öGPIOÒý½Å£¨PB30£©Á¬½Ó£¬¾ßÌåÁ¬½Óµç·ÓÉÓÚ¹«Ë¾ÐèÒª¼¼Êõ±£Ãܲ»Ìù³öÀ´ÁË¡£±¾ÖÜͨ¹ýѧϰLinux I2CÌåϵ¼Ü¹¹£¬Íê³ÉÕâÒ»Çý¶¯³ÌÐò£¬ÏÂÃæ½«Ò»Ð©¿ª·¢ÐĵÃÌù³öÀ´ºÍ´ó¼Ò·ÖÏí¡£
Ê×ÏÈÀ´¿´Ê²Ã´ÊÇI2C
I2C (Inter£Integrated Circuit)×ÜÏßÊÇÒ»ÖÖÓÉPHILIPS¹«Ë¾¿ª·¢µÄÁ½Ïßʽ´®ÐÐ×ÜÏߣ¬ÓÃÓÚÁ¬½Ó΢¿ØÖÆÆ÷¼°ÆäÍâΧÉ豸¡£I2C×ÜÏß×îÖ÷ÒªµÄÓŵãÊÇÆä¼òµ¥ÐÔºÍÓÐЧÐÔ¡£ÓÉÓÚ½Ó¿ÚÖ±½ÓÔÚ×é¼þÖ®ÉÏ£¬Òò´ËI2C×ÜÏßÕ¼ÓõĿռä·Ç³£Ð¡£¬¼õÉÙÁ˵ç·°åµÄ¿Õ¼äºÍоƬ¹Ü½ÅµÄÊýÄ¿£¬½µµÍÁË»¥Áª±¾Ç®¡£I2C×ÜÏß×î³õΪÒôƵºÍÊÓÆµÉ豸¿ª·¢£¬ÏÖÒÑÓ¦ÓÃÓÚ¸÷ÖÖ·þÎñÓëÖÎÀí³¡ºÏ£¬À´ÊµÏÖÅäÖûò°ÑÎÕ×é¼þµÄ¹¦ÄÜ״̬£¬ÈçµçÔ´¡¢ÏµÍ³·çÉÈ¡¢ÏµÍ³Î¶ȵȲÎÊý£¬Ôö¼ÓÁËϵͳµÄ°²È«ÐÔ£¬·½±ãÁËÖÎÀí¡£
I2C×ÜÏßÊÇÓÉÊý¾ÝÏßSDAºÍʱÖÓSCL¹¹³ÉµÄ´®ÐÐ×ÜÏߣ¬¿É·¢ËͺͽÓÊÕÊý¾Ý£¬Ã¿¸öÆ÷¼þ¶¼ÓÐÒ»¸öΩһµÄµØÖ·Ê¶±ð¡£I2C ¹æ³ÌÔËÓÃÖ÷/´ÓË«ÏòͨѶ¡£Æ÷¼þ·¢ËÍÊý¾Ýµ½×ÜÏßÉÏ£¬Ôò¶¨ÒåΪ·¢ËÍÆ÷£¬Æ÷¼þ½ÓÊÕÊý¾ÝÔò¶¨ÒåΪ½ÓÊÕÆ÷¡£Ö÷Æ÷¼þºÍ´ÓÆ÷¼þ¶¼¿ÉÒÔ¹¤×÷ÓÚ½ÓÊպͷ¢ËÍ״̬¡£×ÜÏß±ØÐëÓÉÖ÷Æ÷¼þ£¨Í¨³£ÎªÎ¢¿ØÖÆÆ÷£©¿ØÖÆ£¬Ö÷Æ÷¼þ²úÉú´®ÐÐʱÖÓ£¨SCL£©¿ØÖÆ×ÜÏߵĴ«Êä·½Ïò£¬²¢²úÉúÆðʼºÍÍ£Ö¹Ìõ¼þ¡£SDAÏßÉϵÄÊý¾Ý״̬½öÔÚSCLΪµÍµçƽµÄÆÚ¼ä²ÅÄܸı䣬SCLΪ¸ßµçƽµÄÆÚ¼ä£¬SDA״̬µÄ¸Ä±ä±»ÓÃÀ´±íʾÆðʼºÍÍ£Ö¹Ìõ¼þ¡£
I2C×ÜÏßÔÚ´«ËÍÊý¾Ý¹ý³ÌÖй²ÓÐÈýÖÖÀàÐÍÐźţ¬ËüÃÇ·Ö±ðÊÇ£º¿ªÊ¼Ðźš¢½áÊøÐźźÍÓ¦´ðÐźš£¿ªÊ¼ÐźţºSCLΪ¸ßµçƽʱ£¬SDAÓÉ¸ßµçÆ½ÏòµÍµçÆ½Ìø±ä£¬¿ªÊ¼´«ËÍÊý¾Ý¡£½áÊøÐźţºSCLΪµÍµçƽʱ£¬SDAÓÉµÍµçÆ½Ïò¸ßµçÆ½Ìø±ä£¬½áÊø´«ËÍÊý¾Ý¡£Ó¦´ðÐźţº½ÓÊÕÊý¾ÝµÄICÔÚ½ÓÊÕµ½8bitÊý¾Ýºó£¬Ïò·¢ËÍÊý¾ÝµÄIC·¢³öÌØ¶¨µÄµÍµçƽÂö³å£¬±íʾÒÑÊÕµ½Êý¾Ý¡£CPUÏòÊܿص¥Ôª·¢³öÒ»¸öÐźź󣬵ȴýÊܿص¥Ôª·¢³öÒ»¸öÓ¦´ðÐźţ¬CPU½ÓÊÕµ½Ó¦´ðÐźź󣬸ù¾Ýʵ¼ÊÇé¿ö×÷³öÊÇ·ñ¼ÌÐø´«µÝÐźŵÄÅж¨¡£ÈôδÊÕµ½Ó¦´ðÐźţ¬ÓÉÅж¨ÎªÊܿص¥Ôª³öÏÖ¹ÊÕÏ¡£
ÔÙÀ´¿´LinuxÄÚºËÌṩµÄI2C¹¹¼Ü

ÄÚºËÖÐi2cÏà¹Ø´úÂë¿ÉÒÔ·ÖΪÈý¸ö²ã´Î£º
1. i2c¿ò¼Ü£ºi2c.hºÍi2c-core.cΪi2c¿ò¼ÜµÄÖ÷Ì壬ÌṩÁ˺ËÐÄÊý¾Ý½á¹¹µÄ¶¨Òå¡¢i2cÊÊÅäÆ÷Çý¶¯ºÍÉ豸Çý¶¯µÄ×¢²á¡¢×¢Ïú¹ÜÀí£¬i2cͨÐÅ·½·¨ÉϲãµÄ¡¢Óë¾ßÌåÊÊÅäÆ÷Î޹صĴúÂë¡¢¼ì²âÉ豸µØÖ·µÄÉϲã´úÂëµÈ£»i2c-dev.cÓÃÓÚ´´½¨i2cÊÊÅäÆ÷µÄ/dev/i2c/%dÉ豸½Úµã£¬Ìṩi2cÉ豸·ÃÎÊ·½·¨µÈ¡£
2. i2c×ÜÏßÊÊÅäÆ÷Çý¶¯£º¶¨ÒåÃèÊö¾ßÌåi2c×ÜÏßÊÊÅäÆ÷µÄi2c_adapterÊý¾Ý½á¹¹¡¢ÊµÏÖÔÚ¾ßÌåi2cÊÊÅäÆ÷ÉϵÄi2c×ÜÏßͨÐÅ·½·¨£¬²¢ÓÉi2c_algorithmÊý¾Ý½á¹¹½øÐÐÃèÊö¡£
3 i2cÉ豸Çý¶¯£º¶¨ÒåÃèÊö¾ßÌåÉ豸µÄi2c_clientºÍ¿ÉÄܵÄ˽ÓÐÊý¾Ý½á¹¹¡¢½èÖúi2c¿ò¼ÜµÄi2c_probeº¯ÊýʵÏÖ×¢²áÉ豸µÄattach_adapter·½·¨¡¢ÌṩÉ豸¿ÉÄÜʹÓõĵØÖ··¶Î§¡¢ÒÔ¼°É豸µØÖ·¼ì²â³É¹¦ºó´´½¨i2c_clientÊý¾Ý½á¹¹µÄ»Øµ÷º¯Êý¡£
¾ßÌåµ½LinuxÄں˵ĶÔÓ¦ÎļþÀ´¿´£º
ÔÚLinuxÇý¶¯µÄi2cÎļþ¼ÐÏÂÓÐalgos£¬busses£¬chipsÈý¸öÎļþ¼Ð£¬ÁíÍ⻹ÓÐi2c-core.cºÍi2c-dev.cÁ½¸öÎļþ¡£ÆäÖÐi2c-core.cÎļþʵÏÖÁËI2C core¿ò¼Ü£¬ÊÇLinuxÄÚºËÓÃÀ´Î¬»¤ºÍÖÎÀíµÄI2CµÄºËÐIJ¿·Ö£¬ÆäÖÐά»¤ÁËÁ½¸ö¾²Ì¬µÄLiST£¬·Ö±ð¼Ç¼ϵͳÖеÄI2C driver½á¹¹ºÍI2C adapter½á¹¹¡£I2C coreÌṩ½Ó¿Úº¯Êý£¬¶ÔÓ¦Ò»¸öI2C adatper¡£I2C driverºÍI2C client³õʼ»¯Ê±ÔÚI2C coreÖнøÐÐ×¢²á£¬ÒÔ¼°Í˳öʱ½øÐÐ×¢Ïú¡£Í¬Ê±»¹ÌṩÁËI2C×ÜÏß¶Áд·ÃÎʵÄÒ»°ã½Ó¿Ú£¬Ö÷ÒªÓ¦ÓÃÔÚI2CÉ豸Çý¶¯ÖС£
¡¡¡¡BussesÎļþ¼ÐϵÄi2c-at91.cÎļþʵÏÖÁËat91sam9260ÏÂI2C×ÜÏßÊÊÅäÆ÷Çý¶¯£¬¶¨ÒåÃèÊöÁ˾ßÌåµÄI2C×ÜÏßÊÊÅäÆ÷µÄi2c_adapterÊý¾Ý½á¹¹£¬ÊµÏֱȽϵײãµÄ¶ÔI2C×ÜÏß·ÃÎʵľßÌå·½·¨¡£I2C adapter ¹¹ÔìÒ»¸ö¶ÔI2C core²ã½Ó¿ÚµÄÊý¾Ý½á¹¹£¬²¢Í¨¹ý½Ó¿Úº¯ÊýÏòI2C core×¢²áÒ»¸ö¿ØÖÆÆ÷¡£I2C adapterÖ÷ҪʵÏÖ¶ÔI2C×ÜÏß·ÃÎʵÄËã·¨£¬iic_xfer() º¯Êý¾ÍÊÇI2C adapterµ×²ã¶ÔI2C×ÜÏß¶Áд·½·¨µÄʵÏÖ¡£Í¬Ê±I2C adpter Öл¹ÊµÏÖÁ˶ÔI2C¿ØÖÆÆ÷ÖжϵĴ¦Àíº¯Êý¡£
¡¡¡¡i2c-dev.cÎļþÖÐʵÏÖÁËI2C driver£¬ÌṩÁËÒ»¸öͨÓõÄI2CÉ豸µÄÇý¶¯³ÌÐò£¬ÊµÏÖÁË×Ö·ûÀàÐÍÉ豸µÄ·ÃÎʽӿڣ¬ÊµÏÖÁ˶ÔÓû§Ó¦ÓòãµÄ½Ó¿Ú£¬ÌṩÓû§³ÌÐò·ÃÎÊI2CÉ豸µÄ½Ó¿Ú£¬°üÀ¨ÊµÏÖopen£¬release£¬read£¬writeÒÔ¼°×îÖØÒªµÄioctlµÈ±ê×¼Îļþ²Ù×ݵĽӿں¯Êý¡£ÎÒÃÇ¿ÉÒÔͨ¹ýopenº¯Êý´ò¿ª I2CµÄÉ豸Îļþ£¬Í¨¹ýioctlº¯ÊýÉ趨Ҫ·ÃÎÊ´ÓÉ豸µÄµØÖ·£¬È»ºó¾Í¿ÉÒÔͨ¹ý readºÍwriteº¯ÊýÍê³É¶ÔI2CÉ豸µÄ¶Áд²Ù×Ý¡£
¡¡¡¡Í¨¹ýI2C driverÌṩµÄͨÓ÷½·¨¿ÉÒÔ·ÃÎÊÈκÎÒ»¸öI2CµÄÉ豸£¬µ«ÊÇÆäÖÐʵÏÖµÄread£¬write¼°ioctlµÈ¹¦ÄÜÍêÈ«ÊÇ»ùÓÚÒ»°ãÉ豸µÄʵÏÖ£¬ËùÓеIJÙ×ÝÊý¾Ý¶¼ÊÇ»ùÓÚ×Ö½ÚÁ÷£¬Ã»ÓÐÃ÷È·µÄ¸ñʽºÍÒâÒ塣ΪÁ˸ü·½±ãºÍÓÐЧµØÊ¹ÓÃI2CÉ豸£¬ÎÒÃÇ¿ÉÒÔΪһ¸ö¾ßÌåµÄI2CÉ豸¿ª·¢Ìض¨µÄI2CÉ豸Çý¶¯³ÌÐò£¬ÔÚÇý¶¯ÖÐÍê³É¶ÔÌØ¶¨µÄÊý¾Ý¸ñʽµÄ½âÊÍÒÔ¼°ÊµÏÖһЩרÓõŦÄÜ¡£