读写AT24C512的问题

需要移植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的读写问题,进行中..............

### 回答1: Linux at24c512是一个在Linux操作系统上使用的EEPROM设备驱动程序,可以用于读写AT24C512系列芯片。AT24C512是一款串行EEPROM芯片,容量为512Kbit,可以存储大约64KB的数据。 在Linux系统中,驱动程序被用于管理和控制硬件设备。AT24C512驱动程序允许用户通过Linux内核提供的接口来读写AT24C512芯片中的数据。这样,用户就可以在Linux系统中方便地使用AT24C512芯片进行数据存储和读取操作。 通过使用AT24C512驱动程序,用户可以通过简单的Linux命令或编程接口来读写AT24C512芯片中的数据。这为用户提供了一个灵活的方式来进行数据存储和管理。用户可以选择使用命令行工具,如dd或i2c-tools,或编写自己的应用程序来与AT24C512芯片进行交互。 与其他Linux驱动程序类似,AT24C512驱动程序也需要与相关的硬件设备连接并配置正确的引脚连接。通过在Linux内核中加载AT24C512驱动程序,操作系统就可以正确地识别和控制该硬件设备。 总之,Linux at24c512是一个用于管理和控制AT24C512芯片的设备驱动程序。通过使用这个驱动程序,用户可以在Linux系统中方便地读写AT24C512芯片中的数据。这为用户提供了一种灵活的方式来进行数据存储和管理。 ### 回答2: AT24C512是一种EEPROM(Electrically Erasable Programmable Read-Only Memory)芯片,它具有512K位的存储容量。在Linux操作系统中,可以使用相应的驱动程序来读取和写入AT24C512芯片中的数据。 在使用AT24C512芯片之前,需要先加载相应的内核模块。Linux系统已经提供了at24驱动程序,可以通过modprobe命令加载该驱动模块。加载成功后,系统会自动创建一个与AT24C512芯片对应的设备节点,通常是/dev/at24。 通过该设备节点,可以使用工具或者编写相应的程序来访问和操作AT24C512芯片。常用的工具有i2cset和i2cget命令,可以通过这两个命令向指定地址写入数据或者读取数据。具体命令格式可以通过man命令查看。 在编写程序时,可以使用Linux提供的I2C接口库如libi2c-dev来实现对AT24C512芯片的读写操作。首先需要打开I2C总线,在打开设备的过程中需要指定设备地址和总线号。打开成功后,可以使用相应的读写函数来操作芯片的数据。 例如,在C语言中可以使用open函数打开设备,使用ioctl函数来设置设备地址和总线号。然后就可以使用read和write函数来读写芯片的数据。读取时需要指定读取的起始地址和读取的长度,写入时需要指定写入的起始地址和写入的数据。 总体来说,使用Linux操作系统可以方便地访问和操作AT24C512芯片。无论是使用工具还是编写程序,都可以通过相应的命令或者API来读取和写入芯片中的数据。 ### 回答3: Linux at24c512是指Linux操作系统中使用的一种支持at24c512芯片的驱动程序。at24c512是一款24CXXX系列的串行EEPROM芯片,容量为512K。在Linux中,通过at24c512驱动程序,可以通过I2C总线与at24c512芯片进行通信,实现对芯片的读取和写入操作。 在Linux系统中,我们可以使用命令`i2cdetect`来检测I2C总线上是否连接有at24c512设备。如果检测到设备的地址,就说明我们可以通过I2C总线与at24c512进行通信。 在Linux操作系统中,通常需要加载at24c512驱动模块,以便能够使用该芯片。加载驱动模块的命令是`modprobe at24`。加载成功后,系统会根据硬件信息自动识别和分配设备节点。 一旦驱动加载成功,并且设备节点创建完成,我们就可以在用户空间操作at24c512芯片了。通过查看文件系统的`/sys/class/i2c-dev`目录,我们可以找到at24c512设备节点的信息。 在用户空间,我们可以使用`i2cget`和`i2cset`命令来读取和写入at24c512芯片的数据。例如,使用`i2cget -y 1 0x50 0x00`命令可以读取at24c512芯片地址0x00处的数据。 除了通过命令行工具,还可以通过C或Python等编程语言编写程序,使用相应的库函数来进行at24c512芯片的操作。 总之,Linux at24c512是指Linux操作系统中使用的支持at24c512芯片的驱动程序,通过它可以实现对at24c512芯片的读取和写入操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值