
楼主错了,51单片机是没有集成I2C模块的,那是用普通的IO口去模拟的I2C的时序,所以就需要把IO口随时的变化成需要的电平,而ARM或者其他的,单片机里集成了IIC模块,你只需要把寄存器设置好了,由模块自己按照标准的IIC协议执行。
i2c驱动通过设备树注册sys/bus/i2c/drivers下的设备名的方法如下
在没有出现dts之前,linux会将一些板级信息写在arch/arm下和你的板所匹配的c文件里,一般定义一个struct i2c_board_info结构体,将i2c的地址以及i2c的名称信息写入到此结构体中。
在出现了dts之后,为了去耦合,将这些的板级信息全部都定义在设备树中,在移植的时候只要修改设备树的硬件信息即可,设备树信息位于arch/arm/boots/dts中,以i2c设备为例。
将硬件设备添加到设备链表之后,现在就分析内核是怎么向i2c总线动态注册这些设备的。
请您在设备管理器中找到人体输入学中,找到未知的设备右键禁用。选择禁用后再重新开启此功能,如禁用后重新开启仍不能 *** 作。有可能是硬件故障,建议将机器返回工厂检测维修。
具体如下:
电脑常见问题解决
1、无法自动识别硬盘控制器
使用非正版的个别 *** 作系统光盘,在安装系统时,容易出现此错误。原因是非正版光盘自动加载的硬盘控制器驱动不符合电脑自身需要的驱动。这种情况就建议换正版光盘安装 *** 作系统。
2、手动更新错误的驱动程序
windows *** 作系统正常使用,但手动更新驱动程序把硬盘控制器的驱动程序更新错误,导致此故障。解决方法是进入windows系统高级菜单,选择最后一次的正常配置,即可正常进入系统。
3、bios设置变化后所导致
windows *** 作系统正常,但是由于某些原因,用户修改了bios设置,导致0x0000007b故障。
i2C总线的驱动程序一般针对不同的CPU是不一样的,所以都位于arch目录下对应的cpu架构的common文件夹下。
对同一种架构的来看,I2C驱动仅实现底层的通信。故其是通用的。
重新把鼠标插拔一下,可能是鼠标的USB接口与电脑的USB接口接触不良造成的;
卸载掉鼠标安装的驱动,然后再重新安装一下;
重装系统是为了避免在系统重新安装时并未安装鼠标驱动;
重启下电脑,重启后与电脑的相关软件也会随之重启。
Linux定义了系统的IIC驱动体系结构,在Linux系统中,IIC驱动由3部分组成,即IIC核心、IIC总线驱动和IIC设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的IIC框架。
311IIC核心
IIC核心提供了IIC总线驱动和设备驱动的注册、注销方法,IIC通信方法(即algorithm”,笔者认为直译为“运算方法”并不合适,为免引起误解,下文将直接使用“algorithm”)上层的、与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等。
在我们的Linux驱动的i2c文件夹下有algos,busses,chips三个文件夹,另外还有i2c-corec和i2c-devc两个文件。
i2c-corec文件实现了I2Ccore框架,是Linux内核用来维护和管理的I2C的核心部分,其中维护了两个静态的List,分别记录系统中的I2Cdriver结构和I2Cadapter结构。I2Ccore提供接口函数,允许一个I2Cadatper,I2Cdriver和I2Cclient初始化时在I2Ccore中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口,主要应用在I2C设备驱动中。
312IIC总线驱动
IIC总线驱动是对IIC硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至直接集成在CPU内部。总线驱动的职责,是为系统中每个I2C总线增加相应的读写方法。但是总线驱动本身并不会进行任何的通讯,它只是存在那里,等待设备驱动调用其函数。
IIC总线驱动主要包含了IIC适配器数据结构i2c_adapter、IIC适配器的algorithm数据结构i2c_algorithm和控制IIC适配器产生通信信号的函数。经由IIC总线驱动的代码,我们可以控制IIC适配器以主控方式产生开始位、停止位、读写周期,以及以从设备方式被读写、产生ACK等。
Busses文件夹下的i2c-mpcc文件实现了PowerPC下I2C总线适配器驱动,定义描述了具体的I2C总线适配器的i2c_adapter数据结构,实现比较底层的对I2C总线访问的具体方法。I2Cadapter构造一个对I2Ccore层接口的数据结构,并通过接口函数向I2Ccore注册一个控制器。I2Cadapter主要实现对I2C总线访问的算法,iic_xfer()函数就是I2Cadapter底层对I2C总线读写方法的实现。同时I2Cadpter中还实现了对I2C控制器中断的处理函数。
313IIC设备驱动
IIC设备驱动是对IIC硬件体系结构中设备端的实现,设备一般挂接在受CPU控制的IIC适配器上,通过IIC适配器与CPU交换数据。设备驱动则是与挂在I2C总线上的具体的设备通讯的驱动。通过I2C总线驱动提供的函数,设备驱动可以忽略不同总线控制器的差异,不考虑其实现细节地与硬件设备通讯。
IIC设备驱动主要包含了数据结构i2c_driver和i2c_client,我们需要根据具体设备实现其中的成员函数。
i2c-devc文件中实现了I2Cdriver,提供了一个通用的I2C设备的驱动程序,实现了字符类型设备的访问接口,实现了对用户应用层的接口,提供用户程序访问I2C设备的接口,包括实现open,release,read,write以及最重要的ioctl等标准文件 *** 作的接口函数。我们可以通过open函数打开I2C的设备文件,通过ioctl函数设定要访问从设备的地址,然后就可以通过read和write函数完成对I2C设备的读写 *** 作。
通过I2Cdriver提供的通用方法可以访问任何一个I2C的设备,但是其中实现的read,write及ioctl等功能完全是基于一般设备的实现,所有的 *** 作数据都是基于字节流,没有明确的格式和意义。为了更方便和有效地使用I2C设备,我们可以为一个具体的I2C设备开发特定的I2C设备驱动程序,在驱动中完成对特定的数据格式的解释以及实现一些专用的功能。
如何把设备驱动文件添加到Linux内核编译选项配置的menuconfig中:
目的
把一个字符设备驱动文件,添加到内核中,希望编译成模块,而非build-in。
具体步骤
1首先保证已经有驱动源文件了:as352x_afe_chargerc
放在和其他你所要添加的模块放在一个目录下,此处是drivers\i2c\chips下。
2在drivers\i2c\chips\makefile中,添加:
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_chargero
3在drivers\i2c\chips\Kconfig
中,添加如下内容:
---------------------无敌分割线-------------------------
config AS352X_AFE_CHG
tristate “AS352X AFE Charger Driver”
depends on I2C_AS352X && AS352X_AFE
help
If you say yes here you get support for AS352X AFE Charger
This driver can also be built as a module If so, the module
will be called AS352X AFE Charger
---------------------无敌分割线-------------------------
解释如下:
(1)AS352X_AFE_CHG是自己定义的名字,当然要尽量保证有意义。
同时,你会注意到,在上面的makefile中添加的
obj-$(CONFIG_AS352X_AFE_CHG) += as352x_afe_chargero
中的CONFIG_AS352X_AFE_CHG,是CONFIG_加上我们在kconfig下写的config变量。
这两个要匹配,才能实现你在menconfig定义的结果,传递到makefile中,
以便决定编译的时候是如何编译:不编译/编译进内核/编译成模块
(2)tristate 表示我此处添加的模块,可以
在make ARCH=arm menuconfig中看到的,选择之后:
编译到内核中
M 编译成模块,即生成XXXko
不选中,就不编译该文件
(3)depends on I2C_AS352X && AS352X_AFE
是前面自己找到的,表示此编译选项只有当I2C_AS352X 和AS352X_AFE都选中,才会出现。
当然,如果此模块不依赖于其他模块,则不需要加上这个depends on了。
附录
1如果设置成M,module模式,则要用
make ARCH=arm
编译出as352x_afe_chargerko
而
make ARCH=arm uImage
只能编译内核,而不编译模块。
以上就是关于很纠结啊!I2C通信,为什么芯片有些要写“读写驱动程序”,有些则不要全部的内容,包括:很纠结啊!I2C通信,为什么芯片有些要写“读写驱动程序”,有些则不要、i2c驱动如何通过设备树注册sys/bus/i2c/drivers下的设备名、原道W10Por触屏无反应,I2C HID该设备无法启动(感叹号)。 (代码 10)请及时解决。谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)