查看: 6363|回复: 0

[原创] 【我要创作】LPC824 Lite之GPIO模拟I2C,读写EEPROM

[复制链接]
  • TA的每日心情
    开心
    13 小时前
  • 签到天数: 2926 天

    连续签到: 17 天

    [LV.Master]伴坛终老

    23

    主题

    4141

    帖子

    82

    金牌会员

    Rank: 6Rank: 6

    积分
    13777
    最后登录
    2025-7-22
    发表于 2017-3-12 21:09:33 | 显示全部楼层 |阅读模式
           【我要创作】 LPC824 Lite之GPIO模拟I2C,读写EEPROM。
            也许有人会问,LPC824有硬件I2C,还为什么要多此一举用GPIO来模拟I2C呢?因为之前用STM32来着,硬件I2C遇到过坑。硬件SPI有时也懒得用,直接I2C模拟。用GPIO来模拟I2C和SPI,最大的好处是方便移植,不管什么MCU,只要会操作GPIO,就可以模拟。而不用去理会它硬件I2C或SPI接口的一堆寄存器。I2C函数中用到的延时函数就更不用说了,必须用软件模拟,就是为了方便移植。

            于是移植了4个文件,“delay.c”、“delay.h”、“I2C_Driver.c”,“I2C_Driver.h”。之后附近上打原程序,感兴趣的朋友们尽管直接拿去用。源程序都是之前参考网上的一些样例,本人做了优化,在正式产品中使用过的。
             傲游截图20170312203442.jpg

            注意“I2C_Driver.c”中的所有涉及到 delay_ms(5); 的地方,都是必须加的,上个停止位与下一个开始位之前必须有足够长的延时,参考AT24CXX系列EEPROM,此处延时最长5ms。
             傲游截图20170312210535.jpg
             傲游截图20170312210630.jpg

            工程结构预览。
             SNAG-0003.jpg

            参考原理图中,EEPROM芯片型号为AT24C02,最大空间2K位,即256字节。因此在主函数中读、写测试操作的最大范围就是256字节。
             傲游截图20170312204241.jpg

            程序思路是,先初始化发送缓存,Tx1_Buffer为0x00到0xff;然后依次写入EEPROM的256个地址空间;接着从EEPROM中全部读取,保存到接收缓存Rx1_Buffer;对Tx1_Buffer和Rx1_Buffer内容比较,结果一致,即认为对EEPROM的读写操作成功。否则为失败。
            第二次初始化Tx1_Buffer为0xff到0x00,然后重复第一次的过程,最终比较发送缓存和接收缓存内容。



            程序全速运行,结果通过串口打印如下。可以看到,EEPROM测试成功。
              SNAG-0004.jpg

            完整程序打包附上, SDK(gpio_eeprom1).rar (1.15 MB, 下载次数: 865)
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 14:15 , Processed in 0.079477 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表