如何写linux的I2C驱动,更具体的是加密芯片at88sc0104c的驱动

victor0423 2011-06-23 04:02:45
本人从没写过真正的驱动,现在工作上要求写个驱动,是关于加密芯片at88sc0104c。想知道如何下手。看了芯片手册,明白个大概,但不知驱动里应该怎么操作,有哪些到底要自己实现,哪些可以调用内核的功能。真的很模糊。虽然在网上看到了很多有关linux i2c的驱动分析,可是就算通篇看完能理解,也不知道哪些该是自己要实现,何况现在是略懂而已。我不知道明白了i2c驱动架构对我写驱动有多大帮助,感觉没什么帮助,只是了解了一些结构和过程。现在只能模仿/drivers/i2c/chips/ 目录下已经存在的芯片驱动。但始终有个问题困扰着我,,i2c设备的从地址到底是怎么获取的??系统分配?硬件绑定?在芯片手册没发现哪里有交代地址是多少。模仿的驱动是采用probe方式,似乎还要自己填充i2c_board_info这个结构。
...全文
1385 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly2010love 2014-01-08
  • 打赏
  • 举报
回复
最近我也接手了这么个东西,海思3531,芯片为at88sc0104c,lz能来论坛指点一下么?
fujunxu1 2013-04-19
  • 打赏
  • 举报
回复
兄弟你的at88sc0104c驱动写好了没有?
lddavy 2012-09-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]
我修改了一下kernel中的I2C底层驱动(就是添加了一个case来专门处理at88sc0104c),现在可以用了,而且不影响其他IC(at88sc0104c和DS1307N 可以同时用)
[/Quote]


怎么case的,lddavy0915@163.com 给个码看看
saisons 2012-06-13
  • 打赏
  • 举报
回复
在哪里添加的case处理啊,可以说一下吗?
乐在程上 2011-12-15
  • 打赏
  • 举报
回复
我修改了一下kernel中的I2C底层驱动(就是添加了一个case来专门处理at88sc0104c),现在可以用了,而且不影响其他IC(at88sc0104c和DS1307N 可以同时用)
liujwcool1 2011-12-08
  • 打赏
  • 举报
回复
也要搞这个加密芯片,海思hi3512平台,求交流。
乐在程上 2011-12-08
  • 打赏
  • 举报
回复
我用的kernel 是3.0.0版本的,提供了一个IIC驱动接口(/dev/i2c-0),我可以用这个驱动读写一个RTC的芯片(DS1307N),但是不知道怎么用它来跟at88sc0104c通信。(我的板子环境是at88sc0104c和DS1307N挂在一根总线上at91sam9g20的TWI)。at88sc0104c这个与一般的IIC芯片的通信方式好像不一样!!!哎,不知道怎么搞!!
mhlinux 2011-07-01
  • 打赏
  • 举报
回复
以前我调试都是用LA(逻辑分析仪)。不知道你手上有这工具没有,这东西比较贵。
bjtea 2011-06-28
  • 打赏
  • 举报
回复
手册上没说是I2C,当然就不是I2C,也不能使用I2C驱动接口。按照手册时序,自己写模拟驱动程序吧。
victor0423 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bjtea 的回复:]
手册上没说是I2C,当然就不是I2C,也不能使用I2C驱动接口。按照手册时序,自己写模拟驱动程序吧。
[/Quote]

可能我被误导了,开始被告知是i2c接口,于是就一直往i2c方向走,到最后要编写的时候才发觉不对。自己也没有经验,不知道是不是自己理解错了。如果是这样,我就确定用gpio模拟了,,,现在问题是,我在调试的时候(现在只会用printk,有什么好的调试方法吗?gdb?),收不到从设备的ack信号,不知该如何分析,是时延问题吗?时延太少或太多会不会都会错过ack信号?
bjtea 2011-06-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 victor0423 的回复:]
另外,把gpio设置成output,可以读它的值吗?如果先设了输出低电平,那我再读该io口返回的是低电平的值吗?为什么我测试读取返回的都是高电平,难道不能这样?
[/Quote]
只有51系列单片机是准双向口,可以同时输入或输出。其他我用过的CPU(有20种吧)都是设成输入就是输入,设成输出就是输出;每个时刻只有一种功能(输出时不能读)。所以你先输出0后,再改成读,前面那个0已经没了。
victor0423 2011-06-28
  • 打赏
  • 举报
回复
另外,把gpio设置成output,可以读它的值吗?如果先设了输出低电平,那我再读该io口返回的是低电平的值吗?为什么我测试读取返回的都是高电平,难道不能这样?
victor0423 2011-06-27
  • 打赏
  • 举报
回复
现在主要问题是:
1、在datasheet里我根本找不到芯片的i2c地址是多少,这叫我去哪里获取呢?我就是为这奇怪。
2、at88sc0104这类芯片似乎不是采用标准的i2c接口,在手册里找到一句话,“is similar to 2-wire”,只是说类似,而且2-wire 就等于 i2c了吗??
3、而且这芯片的时序也不同于i2c,它要求上电之后要先发送5个脉冲,i2c需要这样吗??还有每个命令似乎就对应一个地址。
4、有这么多不同,我还能用标准的i2c驱动接口吗?现在在网上只能找到gpio模拟i2c的方式实现驱动。只能通过模拟时序来通信吗?
5、不知道如何去调试这种模拟方式。我已经把相关的gpio的设置接口改了,编译没有问题,但是运行(通过sysfs读写,源程序则是通过dev设备文件方式读写)结果失败。我该怎么调试呢?我试着去理解源代码的功能实现,觉得没什么问题,,,是不是有一些时延之类跟电气有关的参数要调整呢?可我又不是硬件工程师,怎么知道这方面的问题。

BS:既然不具有标准的i2c接口,就不要说自己是i2c接口,让人很迷惑。。
希望做过这芯片的驱动的大侠热心指导,这是我刚上任接的第一个任务,做不出来还不知道能不能继续呆下去。
bjtea 2011-06-26
  • 打赏
  • 举报
回复
"i2c设备的从地址到底是怎么获取的??"
从地址是国际上的I2C协议委员会规定的,每种器件的手册都会具体给出。例如E2PROM的基本地址就规定为A0。有些不同器件的地址还是重复的,此时需要靠器件上的引脚地址线来区分。好在同一个系统下的I2C器件数有限,不会引起冲突。
I2C驱动仅仅是提供了你访问某些常见器件的接口程序,有些器件还需要你自己来增补。
terminalnt 2011-06-26
  • 打赏
  • 举报
回复
研究透i2c子系统对写i2c驱动帮助很大。
因为都是基于标准的驱动模型的。
luis_zhou 2011-06-25
  • 打赏
  • 举报
回复
设备的从地址要根据你的从设备芯片的datasheet确认,有的芯片里写死的,有的是从芯片的外接电路有关系的。建议你根据/driver/i2c/chips/下面的一个芯片进行移植。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧