需要移植AT24C512的驱动,做了一下几种实验:

1.利用内核自带的驱动,内核driver/misc下面的at.c就包含了ATMEL系列的EEPROM的驱动,只需要在BROAD_INFO改下名字。然后要选中menuconfig下的misc下的eeprom选项,最后重新烧录后,就能在板子/sys/bus/i2c/device/0-0050/下看到eeprom节点,对他进行读写就可以了。但是这不是我想要的

2.移植了i2c-tools-3.1.0.tar.bz2,原以为这个能很方便的操作I2C器件,结果令我大失所望,i2cset一个值,i2cget出来的却不对,不知是何缘故,故放弃了。

3.看来还是要写驱动了,我将板子上的AT24C512换成了AT24C02,取消第一项中打开的项目,重新烧录内核。 在i2c_prob函数中添加了测试代码,即写一个寄存器,然后读它的值,insmod at24c02.ko后发现能正确读写了。

4.将AT24C02换成AT24C512,修改刚刚OK的驱动为AT24C512,修改内核BROAD_INFO,烧录,再insmod at24c512.KO 却不能正确读写了。原来关键是AT24C02的内部地址是1字节的,而AT24C512的内部地址是2字节的,就是在发送地址这块出问题了,所以不能正确读取数据。

下面是读写AT24C02的正确方法:

static int i2c_read_bytes(struct i2c_client *client, unsigned char *buf, int len)  
{  
    struct i2c_msg msgs[2];  
    int ret=-1;  
    //发送写地址  
    msgs[0].flags=!I2C_M_RD;//写消息  
    msgs[0].addr=client->addr;  
    msgs[0].len=1;  
    msgs[0].buf=&buf[0];  
    //接收数据  
    msgs[1].flags=I2C_M_RD;//读消息  
    msgs[1].addr=client->addr;  
    msgs[1].len=len-1;  
    msgs[1].buf=&buf[1];  
      
    ret=i2c_transfer(client->adapter,msgs, 2);
    return ret;  
}  
static int i2c_write_bytes(struct i2c_client *client,unsigned char *data,int len)
{
    struct i2c_msg msg;
    int ret=-1;
    
    msg.flags=!I2C_M_RD;
    msg.addr=client->addr;
    msg.len=len;
    msg.buf=data; 
          
    ret=i2c_transfer(client->adapter,&msg, 1);
    return ret;
}

至于如何解决AT24C512的读写问题,进行中..............

读写AT24C512的问题相关推荐

  1. STM32HAL库学习笔记--硬件I2C读写AT24C512

    摘要:由于需要实现掉电存储功能,在无线传输模块上增加了一块EEPROM芯片,因为工程使用CubeMx配置并生成,为了方便不再使用IO口模拟I2C,而是使用f1自带的硬件I2C来实现.配置和调试过程和遇 ...

  2. 读写AT24C512的问题(续)

    前面说了对于像AT24C512这样的内部地址是2字节的,读写遇到问题了,今天解决了,直接上代码. unsigned char tx[2] = {0x0,0x0};  unsigned char rx[ ...

  3. STM32F4 读写 AT24C512问题

    移植正点原子对IC2,驱动程序读数据正确(使用写好的AT24C512测试,说明器件地址没有问题),但无法写入数据,驱动函数中,数据写入的用到的函数,数据读取都用的到,示波器检查IO配置正确(不正确的话 ...

  4. stm32单片机读写EEPROM AT24C512

    移植的正点原子的代码,开始使用的AT24C02,读写没问题,但是换了AT24C512之后发现,写入成功,但读出的数据一直是FF,通过修改IIC停止信号的延时时间立即可以了,遇到类似问题的小伙伴可以注意 ...

  5. STM32F10x_硬件I2C读写EEPROM(标准外设库版本)

    Ⅰ.写在前面 上一篇文章是"STM32F10x_模拟I2C读写EEPROM",讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要 ...

  6. 24c512 c语言程序,msp430读写24c512程序

    原标题:msp430读写24c512程序 *文件名: f169i2c.c *整体描述:MSP430F169硬件IIC软件,字节方式,主方式 * IIC接口:P3.3=SCL,P3.1=SDA;(开漏输 ...

  7. STM32F10x_模拟I2C读写EEPROM(2)(切换SDA方向 + 读ACK位 + 完整代码)

    文章目录 前言 一.宏定义 二.I2C延时函数 1. 注意 三.起始 / 停止信号 1. 时序图 2. 起始信号 3. 停止信号 四.切换SDA方向 1. SDA配置为输入模式 2. SDA配置为输出 ...

  8. AT24C512中数据的文件系统化管理

    摘要:为方便单片机对AT24C512中的数据进行系统化管理,在介绍AT24C512基本结构和工作原理的基础上,按照PC机文件管理的思想实现AT24C512的文件系统,提高数据管理的效率. 关键词:AT ...

  9. STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页

    一.AT24CXXX容量   AT24C01,AT24C02,AT24C04,AT24C08,AT24C16,AT24C32,AT24C64,AT24C128,AT24C256-不同的xxx代表不同的 ...

最新文章

  1. python staticmethodclassmethod
  2. python处理csv文件缺失值_Python:如何处理CSV中的缺失值?
  3. 接待员如何向客人upsell_客房留言卡也能收获好评,看看高情商酒店如何做的?...
  4. python调用jar 性能_亲自有效---python 调用jar
  5. 测试之道--阿里巴巴八年测试专家倾情奉献
  6. 比特币 源代码_GitHub遭黑客攻击:窃取数百源码并勒索比特币,数量惊人!
  7. python爬虫都需要什么手续_Python爬虫入门 | 3 爬虫必备Python知识
  8. vim表达式正则替换
  9. tensorflow动态设置trainable
  10. esp8266 eeprom_ESP8266_08基于flash的数据掉电保护
  11. Erlang/Elixir: 外部通信之-NIF
  12. Aliplayer简单使用
  13. 动态捕捉(一)VR纪录片例子
  14. SAP 与 3大财务报表
  15. ps哪个版本自带Camera Raw插件,怎么开启?
  16. c php embed,使用PHP Embed SAPI实现Opcodes查看器
  17. linux tty core code,linux tty core 源码分析(8)
  18. Unity3D-实现第一人称人物动作: 走,跑,跳,移动视角
  19. 唯美、清晰的代码长什么样
  20. Q50:TCP如何保证可靠性?

热门文章

  1. 用递归法求最大公约数(递归)
  2. 项目中引用NG-ZORRO,在使用nz-form时报错Can't bind to 'formGroup' since it isn't a known property of 'form'的解决方案
  3. 五笔加加导致程序调试退出崩溃
  4. Thinkpad Edge E440 Ubuntu12.04 无线网卡驱动 解决
  5. python12306登录_python 手动验证并模拟登录12306
  6. 线性代数-Gilbert Strang(第一部分)
  7. Photoshop详细解析120个技巧帮助设计加速
  8. Vue--- VueX基础 (Vuex结构图数据流向)1.1
  9. SwipeRefreshLayout源码分析+自定义UC头条下拉刷新Demo
  10. 2022-2028年全球管理交换机行业供需分析及发展前景研究报告