N76E003之IIC】的更多相关文章

I2C 总线提供了一种串行通信方式,用在 MCU 与 EEPROM,LCD模块,温度传感器等等之间控制.I2C 用两条线 (数据线SDA 和时钟线 SCL) 在设备间传输数据.I2C 总线用作主机与从机之间双向数据传输.可以用于多主机系统,支持无中央主机及多主机系统,主机与主机之间的总线仲载传输,同步时钟SCL的存在,允许设备间使用不同比特率的数据传输.支持四种传输模式:主发,主收,从发,从收.I2C 总线仅支持 7位地址.支持广播呼叫,支持标准速率传输 (100kbps) 和快速传输( 400…
首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platform模型,有些文章只是把代码移植到平台上调试测试下,并没有理清内部逻辑调用关系,所以觉得有必要把两种驱动模型阐述剖析清楚,本文阅读者必须以在单片机上调试过IIC总线为前提,能够分析从芯片datasheet和其工作原理和总线的基本操作,虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中…
1.建立STM32Cube工程,我使用的芯片是STM32F429,为了更简单的建立单独的IIC通信任务,我使用了FREERTOS,另外选择了RCC(系统时钟初始化),I2C1,I2C2(为了验证代码的一致性),如下图所示.                                                                                          2.配置完RCC时钟,F429最高时钟频率是180M,另外要注意自己使用的外接晶振的频率: 3.下…
#include "Type.h" #include "IIC.h" #include "Delay.h" void I2C_Init(void) { GPIO_InitTypeDef GPIO_InitStructer; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructer.GPIO_Pin=GPIO_Pin_2 | GPIO_Pin_3; //6--SC…
作者:卢老师,华清远见嵌入式学院讲师. 在大多情况下,我们使用MCU控制传感器,节点以及相关从设备,但在较为复杂的系统中,有时候也会使用MCU做为从设备. 下面是关于stm32f051的从模式实现方法,主要思路为从设备从中断里面接受 IIC主设备发送的数据,并加以处理. 下图为STM32F051的最小系统: IIC从模式 GPIO的配置 根据原理图查ST32F051的datasheet 配置引脚: void I2C_GPIO_Configuration(void)         {      …
一. 概述 1. IIC总线是PHILIPS公司推出的一种串口总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串口总线. 2. IIC总线只有两根双向信号线.一根是数据线SDA,一根是时钟线SCL. 3. 连接到相同总线的IC数量,受总线最大电容400pF的限制. 4. IIC总线通过上拉电阻接正电源.当总线空闲时,两根线均为高电平.连到总线上的任何一个器件输出的低电平,都将使总线的信号变低, 即各器件的SDA和SCL都是线“与”的关系. 5. 每个连到总线上的器件都有一个唯…
一.前言 stm8是一款低功耗的MCU芯片,它具备stm32库函数和资源丰富的优势.也同时具有价格便宜,低功耗的特点.在一些项目中,能起到很好的作用.下面我介绍一下stm8的IIC硬件库函数驱动代码及实现. 二.IIC基本操作 iic基本操作分为读操作和写操作,这两个操作就可以对设备进行一些基本的操作了.还要知道设备的地址就ok了,具体的IIC时序大家可以上网看看. 三.实现代码 1.先要启动IIC的时钟,保证可以正常工作. CLK_PeripheralClockConfig (CLK_Peri…
IIC简介: IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源.这种方式简化了信号传输总线接口. IIC的主要构成只有两个双向的信号线,一个是数据线SDA,一个是时钟线SCL. IIC主要特点: 具有多机功能,该模块既可以做主设备也可以做为从设备 IIC主设备功能,主要…

IIC

IIC多主从,双向传输,只有两根线:一根数据,一根时钟,时钟必须由主机发出控制.初始化时主机把SCL和SDA的电平都拉高,然后在SCL保持高电平时SDA拉低形成一个开始信号,紧接着开始信号就开始发送要通信的7位从机地址(从机地址一般由芯片内置+电阻设置两部分组成一般为7位),然后再接着传一位读(1)写(0)标识,与7位从机地址共同组成八位,然后等待从机返回应答(从机收到自己的地址后在第九个时钟周期把SDA拉低作为应答),然后主机再发送1个字节数据,等待一位应答,再发送,再应答,直到发完,然后主机…
底层通信用了昨天写好的iic,今天结合官方资料成功读出所有指定寄存器的数据附上源码 include.h主要包括了一些stm32 IO控制的宏定义,具体参考正点原子所有例程中都有的sys.h头文件 inc #ifndef __PX4FLOW_H #define __PX4FLOW_H #include "include.h" //器件地址 #define PX4FLOW_ADDR 0x42 //寄存器宏定义,如果是2字节一个数据地址指的低字节位,高字节是低字节地址后一位,组合起来就是完整…
这段时间在做全国光电设计大赛,用到了px4的px4flow光流传感器,用软件模拟iic读取数据不定期会导致px4flow死机,查了资料和光流的源码,发现这个光流用了stm32的硬件iic,所以对软件模拟iic的时序要求可能更高一点所以在原子哥的iic程序上做了修改,代码测验后已经不会死机,做个笔记,保存一下. #include "myiic.h" #include "delay.h" //初始化IIC void IIC_Init(void) { 19 GPIO_In…
本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 中级教程-OSAL操作系统(OSAL系统解基本套路) 中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~ 中级教程-OSAL操作系统(ADC-光敏电阻) OSAL操作系统-实验16 串口波特率扩展 OSAL操作系统-实验1…
使用的工程为是基于sdk10工程 在将以nRF51_SDK_10.0.0_dc26b5e\examples\peripheral\twi_sensor作为模版 修改代码main.c #include <stdio.h> #include "boards.h" #include "app_util_platform.h" #include "app_error.h" #include "nrf_drv_twi.h"…
关于IIC总线的核心有以下几点: :时钟线高电平期间必须保持数据线不变. :时钟线低电平期间可以改变数据. :时钟线和数据线上都要接上拉电阻,以使总线不工作时,两根线的电平都处于高电平状态. :每个传输的字节后面需要由对方回送一个应答信号. 由上面可知,在时钟线为高电平的时候如果数据线改变,那么就是”不合法” 的.于是就刚好利用这种”不合法的”的跳变来作为数据 起始信号和停止信号. 于是规定: :时钟线为高电平时,数据线由高到低跳变为起始信号 :时钟线为高电平时,数据线有低到高跳变为 停止信号.…
 RS485使用手册与指南.pdf  RS232协议标准详解.pdf IIC通信协议.pdf 链接:http://pan.baidu.com/s/1ccBtmA 密码:mwj6 IIC,RS485,RS232各种协议手册下载....更新中…
刚刚终于弄出来了这个.发现自己很多问题. 一 mian函数 #include "led.h"#include "delay.h"#include "sys.h"#include "lcd.h"#include "usart.h"#include "usmart.h" #include "24cxx.h" const u8 TEXT_Buffer[]={0xee,0x3…
信号质量有问题的波形001: 信号质量有问题的波形002: 从上图可以看出,GPIO口模拟的I2C接口,电平都存在半高的情况. 因为I2C的接口是通过GPIO模拟实现的,该时钟信号线SCL内部默认为下拉状态,因而SCL对应的GPIO内部有下拉电阻,导致在输出为高电平时,上升沿慢的台阶出现.后把SCL脚的内部下拉disable之后,测试的波形如下图所示,从下图可以看出SCL时钟信号已经正常. 但是SDA存在小的脉冲尖峰和ACK的半高情况.具体见图中的红色圈所示. SDA小的脉冲尖峰出现在read_…
main.c #include <reg51.h> #include "iic.h" #define AT24C02 0xa0 //AT24C02 地址 sbit LS138A=P2^; //译码器端 sbit LS138B=P2^; sbit LS138C=P2^; sbit K1 = P1^; //保存 sbit K2 = P1^; //读取 sbit K3 = P1^; //+数据 sbit K4 = P1^; //-数据 void delay(unsigned in…
1.采用串行总线技术可以使系统的硬件设计大大简化.系统的体积减小.可靠性提高.同时,系统的更改和扩充极为容易. 常用的串行扩展总线有: IIC (Inter IC BUS)总线.单总线(1-WIRE BUS).SPI(Serial Peripheral Interface)总线及Microwire/PLUS等.   2.IIC IIC总线只有两根双向信号线.一根是数据线SDA,另一根是时钟线SCL. IIC总线通过上拉电阻接正电源.当总线空闲时,两根线均为高电平.连到总线上的任一器件输出的低电平…
硬件程序烧录 1)因为本产品要求将二进制代码和硬件PID/VID烧录在EEPROM,而不是使用CYPRESS推荐的在线下载方式,所以外部采用了8K的EEPROM.上电后68013A会将EEPROM中的数据和程序加载到RAM中运行. 2)HEX文件只是68013A上8051的程序代码,还要加上PID/VID等信息才能正确运行,CYPRESS在开发包中提供了HEX2BIN.EXE这个工具,可以根据HEX生成完备的IIC文件,将此文件烧录到EEPROM上即可. 3)HEX2BIN.EXE的使用方法如下…
Chipscope 仿真VmodCAM IIC程序: 目的:熟悉EDK中建立chipscope 注意:zedboard使用digilent USB下载时,chipscope不能和SDK同时使用,否则芯片会死机.要用仿真器烧写程序. 1:搭建硬件平台   硬件平台如下所示:具体的EDK设计流程参见XILINX大学workshop                                       http://china.xilinx.com/support/university/prof…
最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体的程序在我博客里在先前的早些时候已经贴出来了,如果有兴趣的可以查看我的博客. 主要终结一下我在这个过程中遇见的问题 1.在写完数据(指令或者地址)后 没有应答信号 一般开始的时序根据手册里面的时序图很容易可以写出,第一个没有应答,就有可能向从器件写完数据以后.一般这个时候主要检查的是,上升沿和下降沿…
IIC设备是一种通过IIC总线连接的设备,由于其简单性,被广泛引用于电子系统中.在现代电子系统中,有很多的IIC设备需要进行相互之间通信 IIC总线是由PHILIPS公司开发的两线式串行总线,用于连接微处理器和外部IIC设备.IIC设备产生于20世纪80年代,最初专用与音频和视频设备,现在在各种电子设备中都广泛应用 IIC总线有两条总线线路,一条是串行数据线(SDA),一条是串行时钟线(SCL).SDA负责数据传输,SCL负责数据传输的时钟同步.IIC设备通过这两条总线连接到处理器的IIC总线控…
为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图: 读时序的理解同理.对于时序不理解的朋友请参考“I2C总线之(二)---时序” 完整的程序如下: #include<reg51.h> #define uchar unsigned char #define uint unsigned int #define write_ADD 0xa0 #define read_ADD 0xa1 uchar a; sbit SDA=P2^; sbit SCL=…
前言:年前给老师做个红外抄表系统,,现在对当中用到的一些模块总结一下. 1.只有在总线空闲时才允许启动数据传送. 2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时钟线为高电平时,数据线的任何电平变化将被看做总线的起始或停止信号. 3. 任何将数据传送到总线的器件作为发送器任何从总线接收数据的器件为接收器, 主器件和从器件都可以作为发送器或接收器但由主器件控制传送数据. 4.有两根数据线: SDA : IIC数据传送位 SCL : IIC 时钟控制位 下面对IIC…
最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体的程序在我博客里在先前的早些时候已经贴出来了,如果有兴趣的可以查看我的博客. 主要终结一下我在这个过程中遇见的问题 1.在写完数据(指令或者地址)后 没有应答信号 一般开始的时序根据手册里面的时序图很容易可以写出,第一个没有应答,就有可能向从器件写完数据以后.一般这个时候主要检查的是,上升沿和下降沿…
IIC 型号     容量      器件/业面寻址字节                   可寻址位       模块 24C01   128B      (1010)(A2)(A1)(A0)(0或1)     3            128B24C02   256B      (1010)(A2)(A1)(A0)(0或1)     3            256B24C04   512B      (1010)(A2)(A1)(P0)(0或1)     2            2X25…
为了加深对I2C总线的理解,用C语言模拟IIC总线,边看源代码边读波形: 如下图所示的写操作的时序图: 读时序的理解同理.对于时序不理解的朋友请参考“I2C总线之(二)---时序” 完整的程序如下: #include<reg51.h> #define uchar unsigned char #define uint unsigned int #define write_ADD 0xa0 #define read_ADD 0xa1 uchar a; sbit SDA=P2^0; sbit SCL…
IIC总线协议 前言:年前给老师做个红外抄表系统,,现在对当中用到的一些模块总结一下. 1.只有在总线空闲时才允许启动数据传送. 2.在数据传送过程中,当时钟线为高电平时,数据线必须保持稳定状态,不允许有跳变.时钟线为高电平时,数据线的任何电平变化将被看做总线的起始或停止信号. 3. 任何将数据传送到总线的器件作为发送器任何从总线接收数据的器件为接收器, 主器件和从器件都可以作为发送器或接收器但由主器件控制传送数据. 4.有两根数据线: SDA : IIC数据传送位 SCL : IIC 时钟控制…
1.SPI和IIC一般都作为板上通信,UART.SMBUS和USB一般都作为板间通信. 其中SMBUS是参考IIC制定出来的眼生病,两者很像. 2.SMBUS的I/O接口是由两条线组成的双向串行总线.可工作在主从两种模式. SDA:串行数据的控制 SCL:串行时钟的产生.同步.仲裁以及起始/停止的控制和产生电路. 3.IIC(Inter IC BUS)具有多主机系统所要求的总线裁决和高低速同步功能的串行总线,它具有两根双向信号线. 4.IIC总线空闲时SCL/SDA两根线通过上拉电阻都为高电平.…