【.NET 与树莓派】i2c(IIC)通信】的更多相关文章

引言 PCF8591 是单电源,低功耗8 位CMOS 数据采集器件,具有4 个模拟输入.一个输出和一个串行I2C 总线接口.3 个地址引脚A0.A1 和A2 用于编程硬件地址,允许将最多8 个器件连接至I2C总线而不需要额外硬件.PCF8591由于其使用的简单方便和集成度高,在单片机应用系统中得到了广泛的应用,这篇文章是介绍IIC通信在ADDA转换芯片PCF8591中的应用. 关于IIC IIC总线通信协议的介绍在"基于51单片机IIC通信的AT24C02学习笔记"有详细的介绍. 关于…
引言 最近在学习几种串行通信协议,感觉收获很多,这篇文章是学习IIC总线协议的第一篇文章,以后还会再写一篇关于PCF8591 IIC通信的ADDA转换芯片的文章. 关于IIC总线 IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的一种简单.双向.二线制.同步串行总线,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源.主要…
问题: linux i2c 的通信函数i2c_transfer在什么情况下出现错误描述: linux i2c设备驱动 本人在写i2c设备驱动的时候使用i2c transfer函数进行通信的时候无法进行读写,返回值函数是-11,这个返回值是什么意思, 解决方案1: 参考errno-base.h #define EPERM  1 /* Operation not permitted */#define ENOENT  2 /* No such file or directory */#define…
Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信.但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于[STM32F10x_硬件I2C主从通信]中STM32作为从机的例子. 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有). 关于STM32硬件I2C作…
使用GPIO引脚模拟SDA和SCL总线实现软件模拟IIC通信,IIC的具体通信协议层和物理层链接:IIC #ifndef __BSP_IIC_H #define __BSP_IIC_H #include "stm32f10x.h" #define SCL_PORT GPIOA #define SCL_PIN GPIO_Pin_2 #define SCL_MOOD GPIO_Mode_Out_OD #define SCL_SPEED GPIO_Speed_50MHz #define SD…
板子使用的是黑金的是xilinx spartan-6开发板,首先准备一份24LC04B芯片资料,读懂资料后列出关键参数. 如下: 1.空闲状态为SDA和SCL都为高电平 2.开始状态为:保持SCL,SDA高电平不变,SDA 保持最少4us,之后SDA为低,保持最少4us 3.结束状态为:保持SCL为高.SDA为低电平不变,保持最少4us,SDA为高保持最少4us 4.时间间隔4us要求来源(上面数据为24LC04,下面数据为24LC04B) 初步估算了一下时钟要求,100k(10us)符合要求,…
IIC 通用文件,文件是在NRF51xx 芯片基础,keil 平台开发测试通过,后期修改为STM32F2xx系列的配置. 文件百度云盘链接 : https://pan.baidu.com/s/1AFxanwzrAViaubtERZMRsA 注意:在用于STM32Fx 系列时注意引脚读取函数的选择! 下面是示波器现实,IIC通讯读的操作. 理论基础: SCL为高,SDA发生变化,即为发生了特殊状态(ACK, NACK, START, STOP) SCL为低,SDA发生变化,即为数据端发生跳变,这个…
此问题由某客户提出,应用处理器 AP与 MCU进行 I2C通信,通信会经常发生异常,需要定位原因. 首先需要定位的是因为哪个器件发的波形不正确导致通信异常,所以我们在 I2C 线路上增加了以下处理,增加 2个电阻去测试波形: 测试波形如下示意图:…
UART 属于异步通信,比如电脑发送给单片机,电脑只负责把数据通过TXD 发送出来即可,接收数据是单片机自己的事情.而 I2C 属于同步通信, SCL 时钟线负责收发双方的时钟节拍, SDA 数据线负责传输数据. I2C 的发送方和接收方都以 SCL 这个时钟节拍为基准进行数据的发送和接收. I2C总线包括SCL,SDA 两根信号线,其中SCL是时钟线,SDA是数据线. 1.起始信号 UART 通信是从一直持续的高电平出现一个低电平标志起始位:而 I2C 通信的起始信号的定义是 SCL 为高电平…
关于IIC我觉这个博客里面说的已经够清楚了 如下图所示的写操作的时序图: 其实像这种通信协议的要求是很精确的,一点点不对都可能导致在实际工程中无法读取数据.我就是被一个应答位耽误了好久,还好最后被我发现了.虽然程序不长,但是每一句话都是值得我们认真学习的,下面是我自己结合网上还有书中的程序综合的,亲测可用.最后用keil的逻辑分析仪测试了iic端口输出的波形. iic.h #ifndef __IIC_H #define __IIC_H #include <reg52.h> #include &…
近期帮同学做一个项目,开发板是EFM8单片机,支持SPI和I2C协议(SMBus).非常久没搞过单片机了,并且条件限制,为了使单片机和外设成功通信.花了一个星期时间.刚開始使用SPI.发现代码逻辑都没问题,就是结果不正确(后来知道是由于带中断的程序单步调试导致的.说多了都是泪),调了几天发现SPI确实调不通.就换了I2C.半天时间搞定,哈哈.本文重点解释I2C,废话少说了. 1.简单介绍 I2C(Inter-Integrated Circuit)总线是由PHILIPS公司开发的两线式串行总线,用…
什么是 I2C 总线 I2C 总线(Inter-Integrated Circuit Bus)是设备与设备间通信方式的一种.它是一种串行通信总线,由飞利浦公司在1980年代为了让主板.嵌入式系统或手机用以连接低速周边设备而发展[1].I2C 总线包含两根信号线,一根为信号线 SDA ,另一根为时钟线 SCL .总线上可以挂载多个设备,以 7 位 I2C 地址为例,总线上最多可以挂载 27 - 1 个设备,即 127 个,地址 0x00 不用(类似于网络中的广播地址).I2C 还包括一个子集叫 S…
上文中讨论了通过sysfs来实例化i2c设备 (rtc ds3231) https://blog.csdn.net/feiwatson/article/details/81048616 本文继续看看如何通过 DeviceTree Overlays来实例化rtc ds3231 write dts 首先,写一个dts /dts-v1/; /plugin/; / { compatible = "brcm,bcm2835", "brcm,bcm2708", "br…
1.IIC协议简易概述 IIC全称Inter-Integrated Circuit (集成电路总线),是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备.IIC属于半双工同步通信方式. 特点 简单性和有效性. 由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降 低了互联成本.总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件. 多主控(multimastering) 其中任何能够进行发送和接收的…
半双工通信模式:以字节模式发送(8位): 两线式串行总线,SDA(数据信号)和SCL(时钟信号)两条信号线都为高电平时,总线为空闲状态:起始时,SCL稳定为高电平,SDA电平由高向低跳变:停止时,SCL高电平,SDA电平由低向高跳变:(起始,终止信号都是电平的跳变信号): 传送过程:主机起始信号-->控制总线-->发送地址字节(7位地址码+一位R/W(读/写))-->从机返回AKC信号-->传送数据(8位)(第九位返回应答信号或非应答信号)-->停止信号 注意点: 1.进行数…
默认i2c是关闭的,用raspi-config 命令,会弹出一个配置框图 选择enable i2c就可以了 reboot之后 没有在/dev/目录下发现i2c-x的设备,这个时候需要做以下操作 1.添加i2c模块sudo nano /etc/modules然后添加以下两行内容i2c-bcm2708 i2c-dev 在次reboot,就可以看见了. 2.安装i2c工具,查看i2c设备sudo apt-get install i2c-tools 提供以下i2c的工具命令,如i2cdetect,i2c…
硬件平台 RaspberryPi-3B+ Pioneer600外扩版 i2c芯片为DS3231,adddress 0x68 首先来看一下i2ctool的使用 i2ctool 使用 https://i2c.wiki.kernel.org/index.php/I2C_Tools https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/tree/ i2cdetect 总线扫描 pi@raspberrypi:~ $ i2cdetect -…
提前下载安装Glade图形编辑器 参考 树莓派4B安装netcore 环境部署.发布.执行操作 准备串口设备本文使用串口控制继电器设备 如图 1.发现串口 void GetSerialPort() { Console.WriteLine("发现串口:"); var names = SerialPort.GetPortNames(); int count = 1; foreach (var item in names) { ports.Add(count.ToString(), item…
按图连接设备 载入模块 sudo modprobe w1-gpio sudo modprobe w1-therm cd /sys/bus/w1/devices/ 显示结果 ls pi@raspberrypi:~$ cd /sys/bus/w1/devices/ pi@raspberrypi:/sys/bus/w1/devices$ ls 28-00000494cb79 w1_bus_master1 查看当前温度 cd 28-00000494cb79 cat w1_slave 显示结果: 70 0…
准备工作: 1. 安装wiringPi 2. 修改config.txt sudo nano /boot/config.txt 在文件的末尾添加: dtoverlay=pi3-miniuart-bt 3. 修改cmdline.txt sudo nano /boot/cmdline.txt 删除其中红色部分: dwc_otg.lpm_enable= console=serial10,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 ele…
如果遇到问题,反复查不到 就DEBUG  下单点运行,执行每一个SCK 和SDA的拉高拉低 看看是否能正常的拉高拉低 先解决掉底层的GPIO的控制问题, 有的时候可能数据引脚为特殊功能引脚…
i2c(或IIC)协议使用两根线进行通信(不包括电源正负极),它们分别为: 1.SDA:数据线,IIC 协议允许在单根数据线上进行双向通信--这条线既可以发送数据,也可以接收数据. 2.SCL:时钟线,注意了,这个时钟线跟我们平时所说的时钟没什么关系,不要以为这根线是用来接手表的.其实,这里所说的"时钟",更像是我们看音乐会的时候,站在前面最中央处的那个指挥者,或者说节拍器.它的作用就是协调硬件之间的传输节奏,做到步伐一致,不然数据就会乱了.比如,IIC通信里面,当时钟线的电平拉高后,…
1.建立STM32Cube工程,我使用的芯片是STM32F429,为了更简单的建立单独的IIC通信任务,我使用了FREERTOS,另外选择了RCC(系统时钟初始化),I2C1,I2C2(为了验证代码的一致性),如下图所示.                                                                                          2.配置完RCC时钟,F429最高时钟频率是180M,另外要注意自己使用的外接晶振的频率: 3.下…
一.先决知识             (1)模电基础知识(用以理解IIC如何通信) 二.IIC概览               I2C是80年代飞利浦(Philips->NXP->高通)研发的双线串行总线.目前,I2C广泛应用与单微处理器,EEPROM,数模转换,压力传感器等芯片的接口. 三.IIC结构,协议和时序 1.总线结构                          由图中可知                SDA:data line (数据传输线)                …
参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HAL库的硬件IIC要比标准库的稳定.好了,下面就从STM32CubeMx 配置开始一步步实现IIC通讯. STM32CubeMx的配置,这里关于新建工程的步骤我就不细说了,如果还不会操作STM32CubeMx 的可以点击查看, 这里主要对IIC的配置进行说明. 了解IIC的都知道,IIC通信有主从机之…
应某位网友要求,今天说一下单片机的I2C SPI通信,可能说不清楚,因为这毕竟要做实验才可完全理解. I2C和SPI是两种不同的通信协议. 听到协议,似乎高不可攀,其实协议就是人们定义的一个标准而已,我们只要遵照这个标准去做事,就可以.比如公司规定早上9点上班,我们就9点上班,不然就会扣薪水,这就是个协议. 用I2C通信的芯片最常用的就是EEPROM芯片,如Atmel的AT24CXX系列,此外,还有一些其它功能的芯片.用SPI通信的芯片有外置FLASH芯片,同样,还有其他功能的一些芯片. I2C…
目的:        实现Arduino主从设备之间的互相IIC通信,掌握IIC通信协议的使用方法. 器材: Arduino UNO R3 一块 Arduino Nano 三块 面包板   导线 3K电阻 2个 连接方法:     由于Arduino IIC接口总线没有上拉电阻,在连接布线时需要提供两个上拉电阻.   首先给出程序: Master程序   #include <Wire.h> void setup() {   Wire.begin(); // join i2cbus (主机,不用…
转自:https://www.cnblogs.com/1996jiwei/p/6561681.html 本文转自上面链接,版权请直接参考原链接. 最近在用I2C进行通信交流,发现有两种方法的头文件需要开头宏出来(Wire.h 或 Eeprom.h),即使用了对于的源文件 所以需要了解对应库文件的语法,首先感谢博主分享 由于时间问题先介绍wire.h 语法 此库中包含 1 Wire.begin() 2 Wire.requestFrom() 3 Wire.beginTransmission() 4…
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platform模型,有些文章只是把代码移植到平台上调试测试下,并没有理清内部逻辑调用关系,所以觉得有必要把两种驱动模型阐述剖析清楚,本文阅读者必须以在单片机上调试过IIC总线为前提,能够分析从芯片datasheet和其工作原理和总线的基本操作,虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中…

IIC

IIC多主从,双向传输,只有两根线:一根数据,一根时钟,时钟必须由主机发出控制.初始化时主机把SCL和SDA的电平都拉高,然后在SCL保持高电平时SDA拉低形成一个开始信号,紧接着开始信号就开始发送要通信的7位从机地址(从机地址一般由芯片内置+电阻设置两部分组成一般为7位),然后再接着传一位读(1)写(0)标识,与7位从机地址共同组成八位,然后等待从机返回应答(从机收到自己的地址后在第九个时钟周期把SDA拉低作为应答),然后主机再发送1个字节数据,等待一位应答,再发送,再应答,直到发完,然后主机…