您当前的位置: 首页 >  linux

韦东山

暂无认证

  • 1浏览

    0关注

    506博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Linux系统驱动之编写APP直接访问EEPROM

韦东山 发布时间:2021-08-25 10:56:01 ,浏览量:1

资料下载&百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041

资料下载

coding无法使用浏览器打开,必须用git工具下载:

git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
视频观看

百问网驱动大全

编写APP直接访问EEPROM

参考资料:

  • Linux驱动程序: drivers/i2c/i2c-dev.c
  • I2C-Tools-4.2: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/
  • AT24cxx.pdf

本节源码:GIT仓库中

  • doc_and_source_for_drivers\IMX6ULL\source\04_I2C\01_at24c02_test
  • doc_and_source_for_drivers\STM32MP157\source\A7\04_I2C\01_at24c02_test
1. 硬件连接
  • STM32MP157的I2C模块连接方法 在这里插入图片描述

  • IMX6ULL的I2C模块连接方法 在这里插入图片描述

2. AT24C02访问方法 2.1 设备地址

从芯片手册上可以知道,AT24C02的设备地址跟它的A2、A1、A0引脚有关:

在这里插入图片描述

打开I2C模块的原理图(这2个文件是一样的):

  • STM32MP157\开发板配套资料\原理图\04_Extend_modules(外设模块)\eeprom.zip\i2c_eeprom_module_v1.0.pdf
  • IMX6ULL\开发板配套资料\原理图\Extend_modules\eeprom.zip\i2c_eeprom_module_v1.0.pdf
  • 如下: 在这里插入图片描述

从原理图可知,A2A1A0都是0,所以AT24C02的设备地址是:0b1010000,即0x50。

2.2 写数据

在这里插入图片描述

2.3 读数据

可以读1个字节,也可以连续读出多个字节。 连续读多个字节时,芯片内部的地址会自动累加。 当地址到达存储空间最后一个地址时,会从0开始。

在这里插入图片描述

3. 使用I2C-Tools的函数编程 4. 编译 4.1 在Ubuntu设置交叉编译工具链
  • STM32MP157

    export ARCH=arm
    export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
    export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
    
  • IMX6ULL

    export ARCH=arm
    export CROSS_COMPILE=arm-linux-gnueabihf-
    export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
    
4.2 使用I2C-Tools的源码

在这里插入图片描述

4.3 编译

为IMX6ULL编译时,有如下错误: 在这里插入图片描述

这是因为IMX6ULL的工具链自带的include目录中,没有smbus.h。

需要我们自己提供这个头文件,解决方法:

  • 提供头文件: 在这里插入图片描述

  • 修改Makefile指定头文件目录

    all:
    	$(CROSS_COMPILE)gcc -I ./include -o at24c02_test at24c02_test.c i2cbusses.c smbus.c
    	
    
4.4 上机测试

以下命令在开发板中执行。

  • 挂载NFS

    • vmware使用NAT(假设windowsIP为192.168.1.100)

      [root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 
      192.168.1.100:/home/book/nfs_rootfs /mnt
      
    • vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为192.168.1.137

      [root@100ask:~]#  mount -t nfs -o nolock,vers=3 192.168.1.137:/home/book/nfs_rootfs /mnt
      
  • 复制、执行程序

    [root@100ask:~]# cp /mnt/at24c02_test   /bin
    [root@100ask:~]# at24c02_test 0 w www.100ask.net
    [root@100ask:~]# at24c02_test 0 r
    get data: www.100ask.net
    

资料下载&百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041

百问网技术论坛: http://bbs.100ask.net/

百问网嵌入式视频官网: https://www.100ask.net/index

百问网开发板: 淘宝:https://100ask.taobao.com/ 天猫:https://weidongshan.tmall.com/

关注
打赏
1658827356
查看更多评论
立即登录/注册

微信扫码登录

0.0409s