Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

Spec:
网上很多,如
https://wenku.baidu.com/view/0020131fff00bed5b8f31d05.html

驱动:
文件:
kernel/drivers/misc/eeprom/at24.c
支持at24cxx所有系列,当然也支持at24c02, 这些系列不同的区别仅在于eeprom的大小.

static const struct i2c_device_id at24_ids[] = {{ "24c00", AT24_DEVICE_MAGIC(128 / 8, AT24_FLAG_TAKE8ADDR) },{ "24c01", AT24_DEVICE_MAGIC(1024 / 8, 0) },{ "24c02", AT24_DEVICE_MAGIC(2048 / 8, 0) },{ "spd", AT24_DEVICE_MAGIC(2048 / 8,AT24_FLAG_READONLY | AT24_FLAG_IRUGO) },{ "24c04", AT24_DEVICE_MAGIC(4096 / 8, 0) },
......
};

驱动可以同时支持多个eeprom同时挂载,但需要修改eeprom的大小,比如支持at24c02,需要将2048改成4096.

static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
......
num_addresses =    DIV_ROUND_UP(chip.byte_len,(chip.flags & AT24_FLAG_ADDR16) ? 65536 : 256);
......
}

驱动没有创建字符设备提供给上层, 而是以sysfs文件的读写方式来操作,对应读写操作函数:
at24_bin_read()和at24_bin_write()

操作路径:
/sys/bus/i2c/drivers/at24/5-0050/eeprom
5-0050是表示i2c通道5,地址是0x50,会根据设备连接i2c端口以及地址变化.

使用:
#echo "at24c02 test" > /sys/bus/i2c/drivers/at24/5-0050/eeprom
#cat /sys/bus/i2c/drivers/at24/5-0050/eeprom

如果需要偏移若干地址读写,可以编写一个ap来操作,可参考:
http://blog.csdn.net/dzw19911024/article/details/53813862

实际案例:
原理图:

改动如下:

diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dts
index 1ff653a..ad3bc1a 100644
--- a/arch/arm/boot/dts/rk3288-b.dts
+++ b/arch/arm/boot/dts/rk3288-b.dts
@@ -324,6 +324,7 @@&i2c3 {status = "okay";
+};&i2c4 {
@@ -340,8 +341,14 @@};};+//Kris,170510, add eeprom.&i2c5 {
-    status = "disabled";
+    status = "okay";
+    eeprom@50 {
+        compatible = "24c02";
+        reg = <0x50>;
+        status = "okay";
+    };};&fb {
diff --git a/arch/arm/boot/dts/rk3288-pinctrl.dtsi b/arch/arm/boot/dts/rk3288-pinctrl.dtsi
index a35d4d7..4a4ebc8 100755
--- a/arch/arm/boot/dts/rk3288-pinctrl.dtsi
+++ b/arch/arm/boot/dts/rk3288-pinctrl.dtsi
@@ -404,21 +404,21 @@gpio7_i2c5 {i2c5_sda:i2c5-sda {
-                rockchip,pins = <EDPHDMII2C_SDA>;
+                rockchip,pins = <I2C5HDMI_SDA>;rockchip,pull = <VALUE_PULL_NORMAL>;rockchip,drive = <VALUE_DRV_DEFAULT>;//rockchip,tristate = <VALUE_TRI_DEFAULT>;};i2c5_scl:i2c5-scl {
-                rockchip,pins = <EDPHDMII2C_SCL>;
+                rockchip,pins = <I2C5HDMI_SCL>;rockchip,pull = <VALUE_PULL_NORMAL>;rockchip,drive = <VALUE_DRV_DEFAULT>;//rockchip,tristate = <VALUE_TRI_DEFAULT>;};i2c5_gpio: i2c5-gpio {
-                rockchip,pins = <FUNC_TO_GPIO(EDPHDMII2C_SDA)>, <FUNC_TO_GPIO(EDPHDMII2C_SCL)>;
+                rockchip,pins = <FUNC_TO_GPIO(I2C5HDMI_SDA)>, <FUNC_TO_GPIO(I2C5HDMI_SCL)>;rockchip,drive = <VALUE_DRV_DEFAULT>;};};
diff --git a/arch/arm/configs/rockchip_b_defconfig b/arch/arm/configs/rockchip_b_defconfig
index a7037c2..092dc3c 100644
--- a/arch/arm/configs/rockchip_b_defconfig
+++ b/arch/arm/configs/rockchip_b_defconfig
@@ -662,3 +662,5 @@ CONFIG_CRYPTO_TWOFISH=yCONFIG_CRYPTO_DEV_ROCKCHIP=yCONFIG_CRYPTO_DEV_ROCKCHIP_ENCRYPT=yCONFIG_XMF10411=y
+#Kris,170510, add eeprom
+CONFIG_EEPROM_AT24=y
diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 2baeec5..a6391a9 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -213,11 +213,15 @@ static ssize_t at24_eeprom_read(struct at24_data *at24, char *buf,msg[0].addr = client->addr;msg[0].buf = msgbuf;msg[0].len = i;
+        //Kris, 170510, set scl_rate.
+        msg[0].scl_rate = 100*1000;msg[1].addr = client->addr;msg[1].flags = I2C_M_RD;msg[1].buf = buf;msg[1].len = count;
+        //Kris, 170510, set scl_rate.
+        msg[1].scl_rate = 100*1000;}/*
@@ -331,6 +335,7 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf,/* Get corresponding I2C address and adjust offset */client = at24_translate_offset(at24, &offset);+/* write_max is at most a page */if (count > at24->write_max)count = at24->write_max;
@@ -355,6 +360,8 @@ static ssize_t at24_eeprom_write(struct at24_data *at24, const char *buf,msg.buf[i++] = offset;memcpy(&msg.buf[i], buf, count);msg.len = i + count;
+        //Kris, 170510, set scl_rate.
+        msg.scl_rate = 100*1000;}

参考:
地址设置:
http://blog.csdn.net/qq_27312943/article/details/53325885
驱动解析:
http://blog.csdn.net/yj4231/article/details/18182775

[RK3288][Android6.0] AT24C02驱动分析及功能增加小结相关推荐

  1. MTK6580(Android6.0)-camera 驱动分析

    一.MTK6580 平台 Camera 驱动整体框架 mtk平台三大件调试中,camera的调试难度最大,问题也就最多,为此特地分析了一下整个camera驱动部分 实现过程,以下为camera驱动框架 ...

  2. [RK3288][Android6.0] 串口驱动流程小结

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 RK的调试串口使用的是另外一套方法(后面再提), 这里的流程针对普通的串口. 相关文件: rk_s ...

  3. [RK3288][Android6.0] Audio录音frame rate设置流程小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 HAL: 默认的配置在 hardware/rockchip/audio/tinyalsa_hal/ ...

  4. [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: RK3288 Android6.0平台对AP6356S的支持不是很完善,直接修改wifi ch ...

  5. [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Settings -> Display有个选项控制旋转屏幕时内容是否跟着旋转 这个功能是通过 ...

  6. android6.0源码分析之Zygote进程分析

    在android6.0源码分析之Runtime的初始化一文中,对Zygote进程的初期的Runtime初始化过程进行了分析,在Runtime启动结束后,会对Zygote进程进行初始化,其它Java进程 ...

  7. android6.0源码分析之Camera2 HAL分析

    1.Camera HAL的初始化 Camera HAL的初始加载是在Native的CameraService初始化流程中的,而CameraService初始化是在Main_mediaServer.cp ...

  8. [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%

    Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...

  9. android6.0源码分析之Runtime的初始化

    Android运行时作为android架构的一部分,起着非常重要的作用,它和核心库(Core Libraries)组成了Android运行时库层.本文将依据android源码对AndroidRunti ...

最新文章

  1. update 改写 merge into
  2. supervisord+supervisorclusterctl+supervisord-monit
  3. CNN 模型的参数(parameters)数量和浮点运算数量(FLOPs)是怎么计算的
  4. ssm访问html页面,SSM实现未登录无法访问页面
  5. 修改密码导致应用程序池无法启动
  6. mysql中的所有类型_mysql中常用的数据类型
  7. java初级系统项目_JavaSE-初级阶段项目-基于excel表格的学生管理系统
  8. Word转换PDF:pdf虚拟打印机怎么用操作技巧详解
  9. 物流车笔记——编码器原理
  10. Mac中如何将本地文文档设置成文档模板(WPS)
  11. 一个完整的系统测试需要考虑哪些方面
  12. 学生来看我,我自我满足...........
  13. 个人邮箱怎么注册,商业人士用哪个邮箱,邮箱使用全攻略!
  14. C语言指针(函数指针数组,二级指针)
  15. 与第三方Api接口对接需要注意的点
  16. vue为什么需要nodejs 的环境
  17. 好消息!ios10越狱插件造成桌面图标消失的完美解决方法来了!!!
  18. Prolog系列学习-1
  19. 【蓝桥杯选拔赛真题01】python输出字符串 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
  20. String split()

热门文章

  1. 计算机表示的数据分类,数据表示与数据类型
  2. vue当前页面中英文语言切换
  3. 怎么理解TPS、QPS、RT、吞吐量这些性能指标?
  4. CSS学习中十条速记口诀
  5. win10设置微信双开电脑登录多个微信,超级详细教程,小白也可轻松设置
  6. Transaction synchronization is not active问题
  7. 2022宁夏杯D 包装纸箱设计
  8. C# 是否读到文件尾, 怎么判断
  9. 《邂逅美丽》之赏析2
  10. vue 视频播放插件vue-video-player的使用