I2C(Inter-Integrated Circuit BUS)是I2C BUS简称,中文为集成电路总线,是目前应用最广泛的总线之一。和IMX6ULL有些相关的是,刚好该总线是NXP前身的PHILIPS设计。
介绍 Sunxi 平台上 TWI 驱动接口与调试方法,为 TWI 模块开发提供参考。
把上述代码,放入arch/arm/boot/dts/100ask_imx6ull-14x14.dts的根节点下面。
I2C总线对应着/bus下的一条总线,这个i2c总线结构体管理着i2c设备与I2C驱动的匹配,删除等操作,I2C总线会调用i2c_device_match函数看I2C设备和I2C驱动是否匹配,如果匹配就调用i2c_device_probe函数,进而调用I2C驱动的probe函数。
i2c_apdater核心是master_xfer函数,它的实现取决于硬件,大概代码如下:
使用一句话概括I2C传输:APP通过I2C Controller与I2C Device传输数据。
在虚拟的I2C_Adapter驱动程序里,只要实现了其中的master_xfer函数,这个I2C Adapter就可以使用了。 在master_xfer函数里,我们模拟一个EEPROM,思路如下:
I2C设备驱动是I2C框架中最接近应用层的,其上接应用层,下接I2C核心。也是驱动开发人员需要实现的代码,在此驱动中我们只需负责以下步骤(以ap3216c为例):
(1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0
读I2C数据时,要先发出设备地址,这是写操作,然后再发起读操作,涉及写、读操作。所以以读I2C数据为例讲解核心代码。
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 I2C视频介绍 参考资料: I2CTools:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 1. I2C硬件框架 📷 在一个芯片(SoC)内部,有一个或多个I2C控制器 在一个I2
i2c_driver跟i2c_client匹配成功后,就调用i2c_driver.probe函数。
I2C在硬件上的接法如下所示,主控芯片引出两条线SCL,SDA线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。
为了方便查找,我们加入了一个显示功能引脚位置的功能,运行以下命令,查看板子的40pin引脚上有几个可用i2c
总线代表着同类设备需要共同遵守的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样,而总线上传递的命令也会有自己的格式约束。如I2C总线、USB总线、PCI总线等等。以I2C总线为例,在同一组I2C总线上连接着不同的I2C设备。
TUI是TEE的一个重要基础模块。最初人们认识了解TEE最直观的展示就是TUI,早在指纹识别成为手机的标配之前,TEE的主要应用是围绕着TUI进行,但由于普适性不好需要适配工作、界面显示不友好,对丰富的界面和字体需求定制化等等一些原因,最后却由指纹芯片应用成为带动TEE技术普及的一个重要触发点。最近随着华为手机盾产品的强势问世,TUI重新成为了一个不可缺少的存在!当然除了手机盾,TUI在安全二维码中的应用也是一个重要方向,安智客认为TUI归根结底是在TEE中一个基于触摸和显示器件的一个应用软件安全模块,同样也涉及到驱动、服务、TEE功能模块、TA等等,本文安智客将TUI设计做一个简要总结。如有不对,欢迎指正。
前言 Linux的IIC驱动想必大家都耳熟能详,网上也有很多相关的教程。 网上的教程总结,比如: 方法问题描述Linux 3.X.X版本之后,设备树+驱动此方法是比较符合linux驱动的写法的。当对于不熟悉设备树的小伙伴,写起来比较棘手使用 i2c-tools,并通过脚本或者应用程序编写设备驱动(简单粗暴)此方法是将设备驱动丢到用户态中,对于一些的设备除了I2C通信还有一些引脚也要控制的,此方法写起来将非常痛苦直接操作i2c总线驱动。(简单粗暴)此方法是将设备驱动丢到用户态中,对于一些的设备除了I2C通信还
学习 I2C 和 SPI 驱动的时候,针对 I2C 和 SPI 设备寄存器的操作都是通过相关的 API 函数进行操作的。这样 Linux 内核中就会充斥着大量的重复、冗余代码,但是这些本质上都是对寄存器的操作,所以为了方便内核开发人员统一访问 I2C/SPI 设备的时候,为此引入了 Regmap 子系统。
据非官方统计,90%电子行业的公众号都介绍过3种串行通讯协议:UART、SPI和I2C。这3种串行协议也是电子开发行业最常用的协议。前面介绍了串口通讯协议及其FPGA实现,SPI协议。本篇文章介绍I2C通讯协议及其FPGA实测波形。
最近遇到 i2c 传输慢的问题,正常一笔 i2c 传输 52 bytes 应该在 1ms 内返回,但是偶尔出现 6 ~ 7ms 才返回,不满足要求,因此研究一下 ftrace 工具,分析 i2c 传输到底慢在哪里。怀疑:
APP访问硬件肯定是需要驱动程序的, 对于I2C设备,内核提供了驱动程序drivers/i2c/i2c-dev.c,通过它可以直接使用下面的I2C控制器驱动程序来访问I2C设备。 框架如下:
资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git 视频观看 百问网驱动大全 编写设备驱动之i2c_client 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rst Documentation\i2c\writing-clients.rst Linux内核驱
针对音箱日常工作项目开展的前期,需要快速的适配音频子模块,方便项目的声学评估和开展,期间遇到不少的问题,其中有一些细节往往会忽略掉,然而正好是问题的所在。在此背景下,遇到问题一步一步梳理,方便快速的定位出问题所在 。
单片机的IIC编程中,如果我们直接一点,只需要控制IIC硬件GPIO脚,然后根据IIC协议模拟各种电平时序实现与IIC设备的通信。但是这种编程方法,移植性较差(假如新加了一种IIC设备,同样的代码,又要重新复制一份)。这种做法完全不适应Linux的通用性的设计理念,对于Linux来讲:同样的事情我只做一遍,向外提供接口,不管你是什么IIC设备挂载那条IIC总线上,都可以用。因此,这就需要Linux在代码架构上有非常严谨的模块化设计。
SMBus: System Management Bus,系统管理总线。 SMBus最初的目的是为智能电池、充电电池、其他微控制器之间的通信链路而定义的。 SMBus也被用来连接各种设备,包括电源相关设备,系统传感器,EEPROM通讯设备等等。 SMBus 为系统和电源管理这样的任务提供了一条控制总线,使用 SMBus 的系统,设备之间发送和接收消息都是通过 SMBus,而不是使用单独的控制线,这样可以节省设备的管脚数。 SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。
最近几年,边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。因为工作原因,有幸在2019开始接触了英伟达 Jetson 家族的各种边缘计算设备:Nano,TX2,AGX,NX等,其操作系统使用的是 Ubuntu 18.02。我们可以作为独立的小型服务器使用,试问又有哪一个程序猿会拒绝拥有一台自己的小电脑呢?在其上,特别是拥有GPU的服务器上,我们可以折腾无限的可能。
调试IIC过程中,需要准备示波器或逻辑分析仪,需要通过示波器查看波形确定硬件连接是否正确,不然出现问题,软件再怎么调试,都是枉然.
里面保存I2C总线驱动相关的文件,比如i2c-omap.c、 i2c-versatile.c、 i2c-s3c2410.c等。
如果我们直接控制STM32 的两个GPIO 引脚,分别用作SCL 及SDA,按照上述信号的时序要求,直接像控制LED 灯那样控制引脚的输出(若是接收数据时则读取SDA 电平),就可以实现I2C 通讯。同样,假如我们按照USART 的要求去控制引脚,也能实现USART通讯。所以只要遵守协议,就是标准的通讯,不管您如何实现它,不管是ST 生产的控制器还是ATMEL 生产的存储器, 都能按通讯标准交互。
这里连接0.96吋 oled,也是比较常用的一个i2c设备,连接在gpio21和gpio22上。
ChatGPT也热火朝天了有一段时间了,今天闲来没事,也想着玩一玩ChatGPT,看看是不是网上说的那么强大!
来自: http://www.diybl.com/course/6_system/linux/Linuxjs/200871/129585.html
idr在linux内核中指的就是整数ID管理机制,从本质上来说,这就是一种将整数ID号和特定指针关联在一起的机制。这个机制最早是在2003年2月加入内核的,当时是作为POSIX定时器的一个补丁。现在,在内核的很多地方都可以找到idr的身影。
is31fl3236是一款很牛逼的led控制芯片,最多可以控制36通路的led灯,配合智能音箱的麦克风阵列使用,效果非常酷炫,目前市面上很多主流的智能音箱都有用它,比如:天猫精灵、腾讯听听等。
文章目录 一、I2C接口技术 1.I2C总线系统组成 2.I2C总线的状态及信号 3.I2C总线基本操作 4.启动和停止条件 5.I2C总线数据传输格式 二、I2C总线上拉电阻的估算与选取 三、树莓派与AT24C02接口实验电路及Python SMBus串行I2C EEPROM应用编程 1.启动RPi串行I2C接口及安装Python SMBus库 2. 树莓派与AT24C02 EEPROM接口实验电路 3. Python SMBus库函数介绍 4. 使用I2C Tools及Python SMBus读写AT24C02 EEPROM 一、I2C接口技术 I2C接口是嵌入式系统中常用的网络接口之一,它采用串行通信方式将MCU/传感器连接到系统总线,通过主机/从机的方式协调工作。 I2C/IIC(Inter-Integrated Circuit)总线是由PHILIPS公司于1982年针对MCU/传感器等应用需求而研制的一种两线式串行总线,用于连接MCU及传感器等设备。 I2C总线的主要特点如下: (1)I2C总线最主要的优点是其简单性和有效性。 (2)由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。 (3)I2C总线的长度可高达25英尺(约7.6m),并且能够以标准模式100Kbps的传输速率支持40个组件。新一代I2C总线还支持高速模式400Kbps传输。 (4)I2C总线的另一个优点是支持多主控(multi-mastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号传输和时钟频率。当然,在任何时间点上只能有一个主控。 1. I2C总线系统组成 I2C总线协议包含两层协议:物理层和数据链路层。 在物理层,I2C总线仅使用了两条信号线:一个是串行数据线SDA (Serial DAta line),它用于数据的发送和接收;另一个是串行时钟线SCL (Serial Clock Line)构成的串行总线,它用于指示何时数据线上是有效数据,即数据同步。MCU与被控IC之间、IC与IC之间进行双向传送,I2C标准模式最大传送速率为100kbps,I2C快速模式最大传输速率为400kbps。 在数据链路层,每个连接到I2C总线上的设备都有唯一的地址,设备的地址由系统设计者决定。在信息的传输过程中,I2C总线上并接的每一设备既是主设备(或从设备)又是发送器(或接收器),这取决于它所要完成的功能。 由I2C总线所构成的系统可以有多个I2C节点设备,并且可以是多主系统,任何一个设备都可以为主I2C;但是任一时刻只能有一个主I2C设备,I2C具有总线仲裁功能,以保证系统正确运行。主I2C设备发出时钟信号、地址信号和控制信号,选择通信的从I2C设备并控制收发。I2C总线要求:(1)各个节点设备必须具有I2C接口功能;(2)各个节点设备必须共地;(3)两根信号线必须接上拉电阻Rp。如图1所示。 图1 多I2C设备接口示意图 2. I2C总线的状态及信号 (1)空闲状态 SCL和SDA均处于高电平状态,即为总线空闲状态(空闲状态为何是高电平的道理很简单,因为它们都接上拉电阻)。 (2)占有总线和释放总线 若想让器件使用总线应当先占有它,占有总线的主控器向SCL线发出时钟信号。数据传送完成后应当及时释放总线,即解除对总线的控制(或占有),使其恢复成空闲状态。 (3)启动信号[S] 启动信号由主控器产生。在SCL信号为高时,SDA产生一个由高变低的电平变化,产生启动信号。 (4)结束/停止信号[P] 当SCL线高电平时,主控器在SDA线上产生一个由低电平向高电平跳变,产生停止信号。启动信号和停止信号的产生见图2所示。 图2 启动信号和停止信号的产生 (5)应答/响应信号[A/NA] 应答信号是对字节数据传输的确认。应答信号占1位,数据接收者接收1字节数据后,应向数据发出者发送一个应答信号。对应于SCL第9个应答时钟脉冲,若SDA线仍保持高电平,则为非应答信号(NA/ACK)。低电平为应答,继续发送;高电平为非应答,结束发送。 (6)控制位信号[R/nW] 控制位信号占1位,IIC主机发出的读写控制信号,高为读、低为写(对IIC主机而言)。控制位(或方向位)在寻址字节中给出。 (7)地址信号 地址信号为从机地址,占7位,称之为“寻址字节”(见表1)。 表1 寻址字节 下面对表1中的各字段进行说明。 器件地址(DA3-DA0):DA3-DA0是I2C总线接口器件固有的地址编码,由器件生产厂家给定,如AT24C××I2C总线EEPROM器件的地址为1010等。 引脚地址(A2、A1、A0):引脚地址由I2C总线接口器件的地址引脚A2、A1、A0的高低来确定,接高电平者为1,接地者为0。 读写控制位/方向位(R/n W):R/nW为1表示主机读,R/nW为0表示主机
近年来,随着中国新基建、中国制造2025规划的持续推进,单ARM处理器越来越难胜任工业现场的功能要求,特别是如今能源电力、工业控制、智慧医疗等行业,往往更需要ARM + FPGA架构的处理器平台来实现例如多路/高速AD采集、多路网口、多路串口、多路/高速并行DI/DO、高速数据并行处理等特定功能,因此ARM + FPGA架构处理器平台愈发受市场欢迎。
在嵌入式开发中,有时候需要确认硬件是否正常连接,设备是否正常工作,设备的地址是多少等等,这里我们就需要使用一个用于测试 I2C 总线的工具:i2c-tools。
下面我们自己编写I2C总线驱动,先看下内核的总线驱动怎么写的。 参考内核自带的适配器adapter,搜索配置文件
速度由 SCL 决定,不同模式对上升沿的要求不一样,上升沿斜率受上拉电阻和等效电容影响。
这篇文章介绍了一种基于I2C接口的EEPROM存储器读写方法,包括地址位、数据位以及控制命令的发送。作者通过一个例子详细展示了读写EEPROM的步骤和注意事项。此外,文章还介绍了如何使用I2C接口实现EEPROM存储器的硬件电路设计和驱动程序。
今天来个简单且常见的命令分享。i2c-tools的相关命令常用于linux系统读写i2c设备寄存器的在线调试。 安装命令: apt-get update apt-get install i2c-tools linux版本代码下载路径: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/ 一、i2cdetect 1、命令 root@linaro-alip:/# i2cdetect Error: No i2c-bus specified!
领取专属 10元无门槛券
手把手带您无忧上云