总线驱动
文章平均质量分 91
苦梨甜
嵌入式全栈ing
展开
-
IMX6ULL平台I2C数据结构分析
在 i.MX 平台的 I2C 驱动中,存在多个相关的结构体,它们之间的联系和在内核中的作用如下:struct i2c_client:表示一个 I2C 从设备的结构体,用于描述从设备的信息。它包含了从设备的地址、名称、适配器等信息,并提供与从设备进行通信和交互的接口。struct i2c_adapter:表示一个 I2C 控制器适配器的结构体,用于管理 I2C 控制器的相关信息。它提供了控制器的配置、数据传输和中断处理等功能。原创 2023-05-24 12:54:35 · 1231 阅读 · 0 评论 -
IMX6ULL的I2C驱动详细分析
然后,在 i2c_adap_imx_exit 函数中,通过调用 platform_driver_unregister 函数来注销平台驱动 i2c_imx_driver。接下来,在 i2c_adap_imx_init 函数中,通过调用 platform_driver_register 函数来注册平台驱动 i2c_imx_driver。这段代码定义了一个名为 i2c_imx_driver 的平台驱动结构体,并实现了两个函数:i2c_adap_imx_init 和 i2c_adap_imx_exit。原创 2023-05-24 12:51:01 · 942 阅读 · 0 评论 -
IMX6ULL平台的I2C
I2C是一种双线双向串行总线,它提供了一种简单、高效的数据交换方法,最大限度地减少了设备之间的互连。这种总线适用于需要在许多设备之间短距离偶尔进行通信的应用。灵活的I2C标准允许将额外的设备连接到总线以进行扩展和系统开发。请参见下图中的连接图。设备与I2C总线的连接I2C接口速度取决于I2C总线负载和时序特性。有关引脚要求的详细信息,请参阅I2C总线规范。I2C系统是一种真正的多主总线,包括仲裁和冲突检测,如果多个设备试图同时控制总线,则可以防止数据损坏。原创 2023-05-24 12:45:25 · 1526 阅读 · 0 评论 -
串口,IIC,SPI,USB等总线叙述
之后, 每次传输的数据也是1字节, 从MSB开始传输。PCI-E(PCI Express)是Intel公司提出的新一代的总线接口,PCI Express采用了目前业内流行的点对点串行连接,比起PCI以及更早的计算机总线的共享并行架构,每个设备都有自己的专用连接,采用串行方式传输数据,不需要向整个总线请求带宽,并可以把数据传输率提高到一个很高的频率,达到PCI所不能提供的高带宽。如下图所示, 在SPI总线的传输中, SS信号是低电平有效的, 当我们要与某外设通信的时候, 需要将该外设上的SS线置低。原创 2023-03-25 22:37:31 · 1892 阅读 · 0 评论 -
i2c子系统二
块可以调用i2c core提供的i2c_slave_register/i2c_slave_unregister来注册一个或者注销一个i2c的slave设备。一旦氵主册了slave。一般情况下:运行Linux kernel的设备,在i2C总线里面,都是i2C master,Linux kernel-3.19以后,增加slave的支持。设备,底层的adapter要切换到slave mode,该i2cslave设备可以响应来自对端i2c master设备的各种命令和数据了。原创 2022-12-17 12:56:41 · 933 阅读 · 0 评论 -
输入子系统二
Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。注意:事件驱动程穿是标准的,对所有的瑜入类都是可用的,所以,我们不需实现事件驱动,为内核里边已经支持所有的事件驱动;我们需实现的是输入设备备驱动程序。input driver :主要实现对硬件设备的读写访问,中断设置,并把硬件产生的事件转换为核心层定义的规范提交给事件处理层。原创 2022-12-13 21:35:11 · 300 阅读 · 0 评论 -
第二十六章 linux-i2c子系统一
12C(lnter—lntegrated Circuit),PHILIPS公司丿发的两线式半双工同步串行总线,具有接口线少,控制方式简单,通信速率较高等优点。i2C为电平触发方式(数据先发高位,再发低位)SDA线上的数据必须在SCL的高电平周期保持稳定。i2C是一个多主机的总线,每个设备既可以当主控器或被控器,又可作为发送器或接收器,一条总线上可以有多个主机,但同一时刻只允许一个主机工作。每个支持i2c总线的设备,它都会有一个可以代表自己的地址。半双工:不能同时收发数据,数据发时不能接收,比如i2c。原创 2022-12-13 20:39:45 · 247 阅读 · 0 评论 -
总线,设备,驱动与class
这三章第二十五章 linux-总线,设备,驱动与class第二十四章 linux-kset与热插拔中的uevent和call_usermodehelper第二十三章 linux-sysfs文件系统与kobject讨论了Linux的设备驱动模型,该模型是个非常复杂的系统,从一个比较高的层次来看,主要由总线、设备和驱动构成。内核为了实现这些组件间的相关关系,定义了kobject和kset这样的基础底层数据结构,然后通过sysfs文件系统向用户空间展示发生在内核空间。原创 2022-12-06 21:25:32 · 622 阅读 · 1 评论 -
总线系统
内核支持大量总线,可能涉及多种硬件平台,也有可能只涉及一种平台。在Linux支持的大多数体系结构上都使用了PCI总线。我还会讨论广泛使用、系统无关的USB总线,该总线用于外设。现代总线系统在布局和结构的细节上可能有所不同,但也有许多共同之处,内核的数据结构即反映了这个事实。结构中的许多成员用于所有的总线(以及相关设备的数据结构中)。在内核版本2.6开发期间,一个通用驱动程序模型(设备模型,device model)并入内该,以防止不必要的复制。所有总线共有的屈性封装到特殊的、可以用通用方法处理的数据结构中,原创 2022-12-03 17:06:02 · 750 阅读 · 0 评论 -
pinctrl和gpio子系统
原始字符设备驱动,patform框架,设备树这三种方法来点亮led灯的原理都是配置gpio寄存器。但在实际开发中,需要用到的引脚非常多。都是用前面讲到的方法不显示,麻烦。实际开发中我们常用pinctrl和gpio子系统来进行GPIO驱动开发。原创 2022-11-12 12:01:46 · 716 阅读 · 0 评论 -
platform设备驱动
编写字符设备驱动基本上都要实现以下内容:1.实现入口函数xxx_init()和卸载函数xxx_exit()2.申请设备号register_chrdev(与内核有关)3.注册字符设备驱动cdev_alloc cdev_init cdev_add(与内核有关)4.利用udev/mdev机制创建设备文件(节点),class_create,device_create(与内核有关)5.硬件部分初始化io资源映射ioremap,内核提供gpio库函数(与硬件相关)原创 2022-11-11 19:34:20 · 602 阅读 · 0 评论 -
输入子系统一(输入子系统工作原理)
分析: evdev.c中evdev_connect()— 属于input handler层。总结: 如果将数据上报,最终是调用handler中events()或者event()//将input dev加入到链表input_dev_list。//找到一个没有被使用的次设备号, 从64开始, 65,66。应用程序中调用了输入子系统的代码,数据是如何传递给用户层的?1,按键/keyboard: 产生键值,实际是一个数字。input handler 层:evdev.c。// 拿到evdev,肯定要拿到缓冲区。原创 2022-11-04 17:21:23 · 871 阅读 · 0 评论 -
vivid源码分析
/ 根据次设备号从数组中得到video_device。下面调用到vivid_fops中的v4l2_fh_open函数(硬件相关层的函数)在ctrl_handler里找到v4l2_ctrl,返回它的值。该数组在__video_register_device中设置。根据次设备号从数组中得到video_device。根据APP传入的cmd来获得、设置"某些属性"// 调用驱动程序的ioctl函数。以次设备号为下标存起来。原创 2023-05-04 22:34:57 · 604 阅读 · 0 评论 -
v4l2框架
vivid_create_instance创建设备实例。匹配后调用vivid_probe。原创 2023-05-04 22:27:42 · 721 阅读 · 0 评论 -
总线驱动--SPI驱动
SPI 主机驱动就是 SOC 的 SPI 控制器驱动,类似 I2C 驱动里面的适配器驱动。 Linux 内核使用 spi_master 表示 SPI 主机驱动, spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件中,内容如下:transfer 函数,和 i2c_algorithm 中的 master_xfer 函数一样,控制器数据传输函数。transfer_one_message 函数,也用于 SPI 数据发送,用于发送一个 spi_message,SPI原创 2023-04-05 21:14:48 · 1023 阅读 · 0 评论 -
总线驱动---IIC驱动
Linux的I2C体系结构分为3个组成部分。(1)I2C核心I2C核心提供了I2C总线驱动和设备驱动的注册、注销方法,I2C通信方法(即Algorithm)上层的与具体适配器无关的代码以及探测设备、检测设备地址的上层代码等,如图15.1所示。(2)I2C总线驱动I2C总线驱动是对I2C硬件体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部。I2C总线驱动主要包含I2C适配器数据结构i2c_adapter、I2C适配器的Algorithm数据结构i2c_algorithm和原创 2023-04-04 15:22:28 · 1617 阅读 · 0 评论