IIC 概述之用IO模拟】的更多相关文章

最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体的程序在我博客里在先前的早些时候已经贴出来了,如果有兴趣的可以查看我的博客. 主要终结一下我在这个过程中遇见的问题 1.在写完数据(指令或者地址)后 没有应答信号 一般开始的时序根据手册里面的时序图很容易可以写出,第一个没有应答,就有可能向从器件写完数据以后.一般这个时候主要检查的是,上升沿和下降沿…
STM32的I2C硬核为了规避NXP的知识产权,使得I2C用起来经常出问题,因此ST公司推出了CPAL库,CPAL库在中断方式工作下仅支持无子地址 的器件,无法做到中断方式完成读写大部分I2C器件.同时CPAL库在多个I2C同时使用时,经测试也有问题,因此我们项目中放弃了使用ST公司的CPAL库以及标准外设库 访问I2c器件,用IO模拟I2c总线,同时也是支持中断方式完成I2C读写. 目前网上绝大部分IO模拟I2c总线的程序都是查询方式,浪费大量CPU周期用于循环等待,本文的程序使用定时器中断推…
原则:有硬件I2C.SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试.但在内部资源不够时就要用IO模拟总线了. 关于短延时:模拟时序时是否需要延时要看MCU与device的相对速度.比如I2C如果400K的速率和MCU动辄几十M的速率不再一个量级,肯定要通过延时调整时序:但对于SPI因为其速度很高,甚至有的比单片机的速度还高,这时就没必要延时了. 关于IO模拟的收发函数是否要合并成一个:对于SPI因为是全双工,所以可以分开,当然也可以合并成一个(发送时不需要返回值,而接收时此时参数是要发送的数…
SPI协议 SPI协议网上资料比较多,但是也比较乱,当初在网上搜集的错误资料导致现在比较混乱. SPI协议资料比较正规的是: 1.SPI的规约协议英文文档,例如<摩托罗拉spi协议规范> 2.许多IC的datasheet中关于SPI协议的介绍 下图摘自<摩托罗拉spi协议规范>: CPOL和CPHA的描述和定义 注意画线部分的描述:第一个边沿锁存(或者叫采样),第二个边沿发送,注意,发送的是之前锁存好的. 时序图 工作模式的定义 上图<Application Note MLX…
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…
概述: I²C 是Inter-Integrated Circuit的缩写,发音为"eye-squared cee" or "eye-two-cee" , 它是一种两线接口. I²C 只是用两条双向的线,一条 Serial Data Line (SDA) ,另一条Serial Clock (SCL). SCL:上升沿将数据输入到每个EEPROM器件中:下降沿驱动EEPROM器件输出数据.(边沿触发) SDA:双向数据线,为OD门,与其它任意数量的OD与OC门成&quo…
7.1.1 I2C总线简介 1.I2C总线的基本结构 I2C总线由数据线SDA和时钟线SCL构成,每条线都通过上拉电阻接向正电源,所有采用I2C接口标准的器件均并行挂接在总线上,如图7-1所示. I2C总线通常采用主从工作方式,整个系统中只有一个主控器件(单片机),其它器件都是具有I2C总线接口的外围从器件.每个I2C器件都具有唯一的地址,单片机作为主控器件,可以按器件地址访问每个器件,还可以按器件单元地址访问每个器件中的每个指定的存储单元. 图7-1 I2C总线系统硬件结构框图 由于I2C总线…
一.协议 1.空闲状态 I2C总线总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态.此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高. 2.起始位与停止位的定义: 起始信号:当SCL为高期间,SDA由高到低的跳变:启动信号是一种电平跳变时序信号,而不是一个电平信号. 停止信号:当SCL为高期间,SDA由低到高的跳变:停止信号也是一种电平跳变时序信号,而不是一个电平信号. 3.ACK 发送器每发送一个字节,就在时钟脉冲9期间释放数据线…
用于测试的脚本: for size in 100 do cd /mnt/stec sysbench --test=fileio --file-num=1 --file-total-size=${size}G prepare sync echo 3 > /proc/sys/vm/drop_caches for numthreads in 4 do sysbench --test=fileio --file-total-size=${size}G --file-test-mode=rndwr --m…