集成电路互联总线I2C模块
I2C的基本概念
I2C:集成电路互联总线
主要用于同一电路板内各集成电路模块之间的连接。
I2C采用双向2线制串行数据传输方式,支持所有IC制造工艺,简化IC间的通信连接。
I2C时PHILIPS公司于20世纪80年代初提出。其后PHILIPS和其他厂商提供了种类丰富的I2C兼容芯片。
主机:在I2C总线中,提供时钟信号,对总线时序进行控制的器件。主机负责总线上各个设备信息的传输控制,检测并协调数据的发送和接收。
从机:在I2C系统中,除主机外的其他设备均为从机,主机通过从机地址访问从机,对应的从机做出响应。与主机通信。从机之间无法通信,任何数据传输都必须通过主机进行。
地址:每个I2C器件都有自己的地址,以供自身在从机模式下使用,在标准的I2C中,从机地址被定义为7位。
发送器和接收器:发送数据到总线的器件被称为发送器,从总线接收数据的器件称为接收器。
SDA和SCL:SDA表示串行数据线,SCL表示串行时钟线。
I2C之间如何建立联系
当主机向一个从机发送数据。怎么确保哪一个从机来接收数据,怎么知道与主机通信的是之前接收数据的从机。
I2C总线上的器件具有两个地址:受控地址和广播地址
每一个器件有唯一的受控地址用于定点通信,而相同的通用广播地址则用于主控方向同时对所有器件进行访问。
I2C的总线寻址约定:
I2C总线采用了独特的寻址约定,规定了起始信号后的第一个字节位寻址字节,用来寻址被控器件,并规定数据传送方向,寻址字节由被控器的7位地址位(D7-D1位)和一位方向位(D0位)组成。
方向位位0时,表示主控器将数据写入被控器,为1.时表示主控器从被控器读取数据。
具体寻址:主控器发送起始信号后,立刻发送寻址字节,这时总线上的所有器件都将寻址字节中的7位地址与自己器件地址比较。
如果两者相同,则该器件认为主控器寻址,并发送应答信号,被控器根据数据方向位确定自身是作为发送器还是接收器。
主机要向从机写1个字节数据时。主机首先产生START信号,然后发送一个7.位从机地址,查询相应的从机,紧接着的第8位时数据方向位(R/W);0表示主机发送数据,这时主机等待从机的应答信号,当主机收到应答信号时,发送给从机一个位置参数,告诉从机主机的数据在从机接收数组中存放的位置,然后继续等待从机的响应信号,当主机收到响应信号时,发送1个字节的数据,继续等待从机的响应信号,当主机收到响应信号时,产生停止信号,结束传送过程。
I2C驱动构件使用方法
在I2C驱动构件头文件中给出了用于定义所有I2C号的宏定义、I2C所用的引脚组的宏定义。
为了实现I2C之间的通信,封装了7个基本对外接口函数:
初始化函数:主要用于I2C模块工作的参数设置(工作时钟、引脚复用配置、模块使能),人口参数(I2C的模块号、I2C的主从机选择、本模块的初始化地址、波特率)
从从机读取一个字节数据函数:主要用于主机从从机接收一个字节数据,所以需要知道当前主机的模块号,要读取的从机的地址,要读的数据在从机接收数组中的位置以及一个用于存储读取到数据的变量。
向从机写一个字节数据函数:与上一个类似,也需要相应的四个参数。
从从机读取n个字节数据函数:与从从机读取一个字节数据函数的区别在于需要知道读写数据的个数以及独处数据的缓冲区和写入数据的首地址,故入口参数位五个。
向从机写n个字节数据函数:与上一个类似,也需要相应的五个入口参数。
开I2C中断函数和关I2C中断函数:为了让主机发送的数据从机能够接收到,设置中断函数,使得从机I2C能够接收到主机发送到数据。
构件使用步骤
对于主机端:
在主函数main中,先调用I2C初始化函数对I2C模块进行初始化。
i2c_init(IIC_0,1,MasterAddress,100); //第四个参数位波特率,单位位KB/S
声明一个数组用于存储向从机发送到数据,并赋值。
uint_8 data[12]; //发向从机的数据
strcpy(data,"Version3.4\n"); //为data数组赋值
在主循环中,小灯每闪烁一次,向从机发送一个字节数据。
//依次向从机写dara中数据,0x73位从机地址,0x02为数据在从机接收数组中的位置
i2c_write(IIC_0,0x73,0x02,data[Num_flag]);
对于从机端:
在主函数main中,先调用I2C初始化函数对I2C模块进行初始化。
i2c_init(IIC_1,1,0x73,75); //i2c1模块初始化
需要接收从主机发送的数据,并把数据放在一个数组buf[ ]中。
i2c_enable_re_int(IIC_1); //为data数组赋值
然后可以通过串口吧数据发送到PC机
uart_send(UART_TEST,buf[visitaddr]); //发送主机传送过来的数据
这样就实现主机向从机发送一个字节数据。
嵌入式技术基础与实践(第4版)
集成电路互联总线I2C模块相关推荐
- 【第十一讲】TMS320F28335开发板之I2C模块
标签: dsp 仿真 分类: DSP I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式串行总线,是一种具有多端控制能力向串行数据总线系统,用于连接微 ...
- MicroPython中I2C模块的设计与实现(1) - machine_i2c框架的机制
MicroPython中I2C模块的设计与实现(1) - machine_i2c框架的机制 苏勇,2022年3月 文章目录 MicroPython中I2C模块的设计与实现(1) - machine_i ...
- 【无标题】profinet输入输出式分布式IP67总线IO模块
关键词:IP67总线模块.profinet以太网模块.总线分线盒 Profinet逐渐成为机械和设备工程之间的未来通信工具.Profinet以太网为基础,与传统现场总线系统相比通信速度明显加快,传输的 ...
- can 串口 can 232 can 485 串口转CANbus总线网关模块CAN232/485MB转换器CANCOM
RS232/485串口转CANbus总线网关模块CAN232/485MB转换器CANCOM 1,串口转CANbus总线网关模块简介: 智能CAN/串口协议转换器LCNET Pro RS-232/485 ...
- [工业互联-3]:工业有线互联总线之工业以太网总线
目录 第1章 工业以太网概述 1.1 概述 1.2 工业以太网与普通以太网的比较 1.3 以太网在工业控制领域中应用的优势 1.4 工业以太网与其他工业互联总线的比较 第2章 工业以太网网络部署 第3 ...
- platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架
platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...
- 关于stm32f4xx的片上外设I2C模块用作主模式下BUSY位总是置1的解决方法
1. 假设 本文假设读者: 有使用stm32的经验 有使用stm32库函数编程的经验 了解IIC通讯协议 本文适合初学者参考 2. stm32f4xx系列的芯片的IIC接口 1. 模式选择 stm32 ...
- 串行总线 —— I2C、UART、SPI
I2C,也叫 IIC,是一种常见的串行总线,它只需要两根线即可在连接于总线上的器件之间传送信息. 0. 电气知识 开漏输出:Open drain output,不输出电压,低电平时接地,高电平时不接地 ...
- [工业互联-2]:工业有线互联总线之CAN总线
目录 第1章 CAN总线概述 1.1 概述 1.2 CAN总线的优点 1.3 应用广泛 1.4 CAN总线的发展历史 1.5 传输距离与传输速度的关系 第2章 CAN总线的网络拓扑 2.1 总线拓扑 ...
最新文章
- 利用 Vmware 安装 Linux 虚拟机
- Node.js:Web模块、文件系统
- 多变量线性回归程序实现
- 计算机科学AP考试,AP计算机科学A和计算机原理有什么区别
- 以太坊代码标准是什么_以太坊的包容性开发语言里到底藏着什么秘密?
- Django项目部署到阿里云服务器上无法发送邮件STMP
- 台达b3伺服参数设置方法_2020东莞清溪台达自动化配件回收厂家直购
- 信息学奥赛一本通(1242:网线主管)
- python turtle画动物_如何用python画简单的动物
- spring 3.0.5+velocity tools 2.0
- 显示器最大分辨率测试软件,液晶显示器分辨率快速设置工具
- 春节挣一波快钱,Top 19 接私活平台
- 正常打游戏声音分贝测试软件,你们ps4玩游戏的时候噪音是多少分贝啊,我下了个测量噪音的软件,我的......
- 华为篇-嵌入式公司待遇盘点-第二期
- 教你如何选期权比例:记住年终奖扣税的临界点,用期权控制税前金额,实现利益最大化!...
- Markdown 写文档做笔记的利器
- 新版升级 DAEMON Tools v4.10 X86 32 Bits (with SPTD 1.50)
- carsim转向扭矩控制-开环控制设置
- LMS151-10100单线激光雷达与RealSense双目相机的联合标定
- c++ 鼠标切换形状