技术专栏
君正x1600平台适配at24cxx-eeprom芯片
文章目录
概述
一般上,大多数平台适配at24-eeprom,只需要在dts中相应i2c总线下挂载设备信息,并打开at24驱动即可,例如:
dts:
138 &i2c0 {
139 status = "okay";
140 clock-frequency = <100000>;
141 timeout = <1000>;
142 pinctrl-names = "default";
143 pinctrl-0 = <&i2c0_pa>;
144
145 at24c16: at24c16@57 {
146 compatible = "atmel,at24";
147 status = "okay";
148 reg = <0x57>;
149 };
150 };
config:
CONFIG_EEPROM_AT24=y
但是基于君正sdk开发时,采用上述方法,将不再适用,因为君正sdk中将所有驱动(除了时钟等内核启动时需要的驱动模块外),放在kernel外部,便于根据产品自定义外设驱动,同时设备信息不再通过dts维护,而在外设驱动中将设备信息输出给内核。
构建device信息
即填充i2c_board_info结构体
其中type用于和driver.name匹配
addr: 通过硬件原理图确定。
AT24Cxx设备地址有7位,前4位不变,为:1010, 后3位需要看A2-A0的硬件接线。
原理图中A2-A0上拉为高电平,故设备地址为0x57。
static struct i2c_board_info at24_device = {
.type = "at24",
.addr = I2C_ADDR,
};
移植at24驱动
(非必须步骤)将kernel/driver/misc/eeprom/at24.c拷贝到module_driver中,在外部维护,不污染kernel源码
1、在init中注册i2c设备
i2c_client = i2c_register_device(&at24_device, i2c_bus_num);
if (i2c_client == NULL) {
printk(KERN_ERR "at24: failed to register i2c device\n");
i2c_del_driver(&at24_driver);
return -EINVAL;
}
2、编译烧录镜像
dmesg可以看到,能够进入probe了,但probe会异常退出
定位原因是,i2c_device_id.driver_data为空。需经过如下修改:
i2c probe接口的struct i2c_device_id,即通过MODULE_DEVICE_TABLE(i2c, at24_ids)注册的id号
在probe中,将比较i2c_board_info.type和i2c_device_id.name,如果一致的话会判断i2c_device_id.driver_data是否为空,为空则异常
修改at24_ids表即可:
static const struct i2c_device_id at24_ids[] = {
/* needs 8 addresses as A0-A2 are ignored */
{ "24c00", AT24_DEVICE_MAGIC(128 / 8, AT24_FLAG_TAKE8ADDR) },
/* old variants can't be handled with this generic entry! */
{ "24c01", AT24_DEVICE_MAGIC(1024 / 8, 0) },
{ "24c02", AT24_DEVICE_MAGIC(2048 / 8, 0) },
/* spd is a 24c02 in memory DIMMs */
{ "spd", AT24_DEVICE_MAGIC(2048 / 8,
AT24_FLAG_READONLY | AT24_FLAG_IRUGO) },
{ "24c04", AT24_DEVICE_MAGIC(4096 / 8, 0) },
/* 24rf08 quirk is handled at i2c-core */
{ "24c08", AT24_DEVICE_MAGIC(8192 / 8, 0) },
{ "24c16", AT24_DEVICE_MAGIC(16384 / 8, 0) },
{ "24c32", AT24_DEVICE_MAGIC(32768 / 8, AT24_FLAG_ADDR16) },
{ "24c64", AT24_DEVICE_MAGIC(65536 / 8, AT24_FLAG_ADDR16) },
{ "24c128", AT24_DEVICE_MAGIC(131072 / 8, AT24_FLAG_ADDR16) },
{ "24c256", AT24_DEVICE_MAGIC(262144 / 8, AT24_FLAG_ADDR16) },
{ "24c512", AT24_DEVICE_MAGIC(524288 / 8, AT24_FLAG_ADDR16) },
{ "24c1024", AT24_DEVICE_MAGIC(1048576 / 8, AT24_FLAG_ADDR16) },
{ "at24", AT24_DEVICE_MAGIC(16384 / 8, 0) },
{ /* END OF LIST */ }
};
验证
安装驱动,适用i2ctool读写芯片
# i2cget -y -f 0 0x57 0
0xff
# i2cset -y -f 0 0x57 0 0x0
# i2cget -y -f 0 0x57 0
0x00
验证成功
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
点赞
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:637次2023-12-11 16:42:16
-
浏览量:695次2023-12-27 15:36:57
-
浏览量:6511次2020-08-10 19:44:10
-
浏览量:3344次2020-07-28 19:20:20
-
浏览量:2285次2020-07-28 11:05:08
-
浏览量:1633次2022-01-31 09:00:13
-
浏览量:2518次2020-07-28 10:56:05
-
浏览量:2703次2020-07-28 10:58:45
-
浏览量:2376次2020-07-29 18:20:36
-
浏览量:1040次2023-12-27 14:50:32
-
浏览量:7837次2020-08-14 14:05:35
-
浏览量:1711次2022-01-02 09:00:13
-
浏览量:1655次2022-01-07 09:00:13
-
浏览量:790次2023-11-15 11:24:03
-
浏览量:4351次2020-08-11 10:39:44
-
浏览量:1889次2022-01-19 09:00:17
-
浏览量:7643次2021-03-02 19:11:24
-
浏览量:9377次2020-11-26 16:37:03
-
浏览量:2695次2022-02-10 09:00:20
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
阿帅
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注