用i2c总线协议连接时原理图怎么画

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 4217|回复: 8
orcad画原理图,怎么会连接不上?
&&已结帖(10)
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
3脚怎么没反应,求解高手解答。现在重新画的库原件,又可以了...
满意回复+5
引脚末端没在栅格点上?
在画符号和原理图的时候 都要选中Snap to grid 以免网格对不齐 连接不上
格点没对上,
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
虽已解决,但还是想知道为什么...
主题帖子积分
资深技术员, 积分 300, 距离下一级还需 200 积分
资深技术员, 积分 300, 距离下一级还需 200 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
资深技术员, 积分 300, 距离下一级还需 200 积分
资深技术员, 积分 300, 距离下一级还需 200 积分
引脚末端没在栅格点上?
主题帖子积分
中级技术员, 积分 291, 距离下一级还需 9 积分
中级技术员, 积分 291, 距离下一级还需 9 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 291, 距离下一级还需 9 积分
中级技术员, 积分 291, 距离下一级还需 9 积分
在画符号和原理图的时候 都要选中Snap to grid 以免网格对不齐 连接不上
主题帖子积分
主题帖子积分
专家等级:结帖率:98%打赏:29.10受赏:86.30
主题帖子积分
格点没对上,
上海麟凰电子科技有限公司
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
哦哦,懂了
主题帖子积分
主题帖子积分
专家等级:结帖率:36%打赏:0.00受赏:29.00
主题帖子积分
画符号的时候没再删格上。。。
主题帖子积分
中级技术员, 积分 113, 距离下一级还需 187 积分
中级技术员, 积分 113, 距离下一级还需 187 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 113, 距离下一级还需 187 积分
中级技术员, 积分 113, 距离下一级还需 187 积分
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
主题帖子积分
专家等级:结帖率:91%
主题帖子积分
资深技术员, 积分 481, 距离下一级还需 19 积分
资深技术员, 积分 481, 距离下一级还需 19 积分
恩恩,是的,估计没注意按了快捷键,都没想到这方面,现在看来,那个点还真的没在中间
技术奇才奖章
人才类勋章
时间类勋章
涓涓之细流
发帖类勋章
技术新星奖章
人才类勋章
时间类勋章
晶莹之水滴
发帖类勋章
技术高手奖章
人才类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
热门推荐 /3高清视频监控中的I2C总线云台电机控制设计-视频监控电路图-电子产品世界
-&-&-&高清视频监控中的I2C总线云台电机控制设计
高清视频监控中的I2C总线云台电机控制设计
近年来,随着视频技术发展,网络稳定性能快速提高,视频监控需求越来越大,其应用领域也越来越广泛。社会的发展,汽车增量不断增多,道路上各种违章的车辆也逐渐增多,为了构建一个平安交通和智能交通,视频监控系统在交通行业的应用也越来越多,为了能全方位的对高速公路进行监控,视频监控的高速球也应用越来越广泛。
本文将研究详细分析I2C的工作原理和通信协议和Linux的I2C总线驱动程序,设计一个应用在高速公路视频监控的基于I2C云台电机驱动系统,为高速公路的全方位视频监控提供一个设计方案。
2高速公路视频监控系统以及云台电机整体设计
本研究课题的高速公路高清视频监控系统采用TI公司的TMS320DM368,DM368是一款面向多媒体技术应用的高性能芯片,功能强大,集成了ARM926EJ-S内核、硬件编码协处理引擎( HDVICP)、图像处理子系统( VPSS)。DM368频率高达432MH,支持多格式解码、多速率以及高清多通道功能,最高可以支持H.264编码1080P格式30帧/s的速度,而且还可提供多种独立式音频、语音以及高清视频编解码器(H.264)。该处理器有I2C总线等外围接口等,其中ARM9运行开源、性能稳定安全Linux嵌入式操作系统。
视频监控系统中云台电机控制的设计采用DM368的I2C总线接口,设计基于ARM9的I2C云台电机,完成驱动程序设计和应用程序设计,以及应用程序控制电机转动,应用于视频监控系统中,达到全方位的高速公路视频监控。
3 I2C硬件构成和通信协议
I2C总线是由双向数据线和时钟线构成的二线制串行总线,总线采用主从双向通信,即总线上在某一时刻只有一个主设备总线上的其他设备都作为从设备,任何能够进行发送和接收的设备都可以成为主设备,但是在同一时间内只能有一个设备作为主设备,通常为处理器,其他器件作为从设备与主设备进行通信,采用唯一的I2C地址识别。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
图1 I2C时序
如图1I2C的工作时序图所示,I2C总线在传送数据过程中使用了三种信号。(1)开始信号:SCL为高电平时,SDA由高电平向低电平跳变,表示将要开始传送数据;(2)应答信号:从设备在接收到1个字节数据后向主设备发出一个低电平脉冲应答信号,表示已收到数据,主设备根据从设备的应答信号做出是否继续传输数据的操作(I2C总线每次数据传输时字节数不限制,但是每发送都要有一个应答信号);(3)结束信号:为低电平时由低电平向高电平跳变,表示数据传送结束。
总线具体的通信工作原理:主设备首先发出开始信号,接着发送的1个字节的数据,其由高7位地址码和最低1位方向位组成(方向位表明主设备与从设备间数据的传送方向)。系统中所有从设备将自己的地址与主设备发送到总线上的地址进行比较,如果从设备地址与总线上的地址相同,该设备就是与主设备进行数据传输的设备。接着进行数据传输,根据方向位,主设备接收从设备数据或发送数据到从设备。当数据传送完成后,主设备发出一个停止信号,释放I2C总线,然后所有从设备等待下一个开始信号的到来。
4 I2C的Linux和ARM驱动设计
(1)Linux2.6.32的I2C驱动分析。
I2C由主设备和从设备构成,通信上通过识别I2C地址进行通信,即可以存在多个i2c adapter适配器和多个外设i2c device,Linux的I2C驱动采用分层设计实现的思想,层与层之间不存在耦合,增加adapter和增加device不会影响其他驱动,具体分层如下。
第一层:提供i2c adapter的硬件驱动,探测、初始化i2c adapter(如申请i2c地址和中断号),驱动处理器控制的i2c adapter在硬件上产生信号(start、stop、ack)以及处理i2c中断,涉及图2中的硬件实现层。
第二层:提供i2c adapter的algorithm,用具体适配器的xxx_xfer()函数来填充i2c_algorithm的master_xfer函数指针,并把赋值后的i2c_algorithm,再赋值给i2c_adapter的成员指针,主要涉及图2中访问抽象层、i2c核心层。
第三层:实现i2c设备驱动中的i2c_driver接口,用具体的i2c device设备的i2c_add_driver ()、i2c_del_driver ()方法赋值给i2c_driver的成员函数指针,采用Probe探寻方式实现设备device与总线的挂接,涉及图2中的driver驱动层,此层是本文实现的驱动部分。
第四层:实现i2c设备所对应的具体device的驱动,i2c_driver只是实现设备与总线的挂接,挂接在总线上的设备千差万别的,所以要实现具体设备device的write()、read()、ioctl()等方法,赋值给file_operations,然后注册字符设备,涉及图2中的driver驱动层,此层是本文实现的驱动部分。
第一层和第二层又叫i2c总线驱动(bus driver),第三层和第四层属于i2c设备驱动(device driver)。在Linux驱动架构中,不需要再开发总线驱动,因为Linux内核几乎集成所有总线驱动,驱动设计主要是实现第三层和第四层的设备驱动。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图2 I2c驱动架构图
(2)云台电机驱动设计
根据Linux2.6.32的驱动分层设计,驱动的第一层和第二层在Linux-2.6.32中以及集成了成熟驱动,分别位于Linux源代码目录下的\drivers\i2c\i2c-core.c和\drivers\i2c\busses\davinci.c中,本文重点讲述第三层和第四层驱动程序的设计。
驱动设计采用字符设备方式来实现,motor_I2C_devInit()和motor_I2C_devExit()实现驱动的初始化以及退出,初始化最后调用cdev_add()实现字符设备的添加,添加过程中通过完善file_operations的结构体,填充了。open = I2C_devOpen, .release = I2C_devRelease,。ioctl = I2C_devIoctl三个结构体变量,这三个用户空间接口驱动函数,完成注册后,用户空间可以采用文件读写的方式来操作I2C设备了,I2C_devOpen函数实现打开字符设备,I2C_devRelease函数实现关闭字符设备,I2C_devIoctl是实现和硬件设备实现数据传输的最重要函数,主要实现设备加载、数据读取和数据写入,从而完成用户空间和驱动程序以及硬件设备的数据交换,具体实现如图3所示。
下面通过I2C_devIoctl介绍这三个函数的实现过程,命令I2C_CMD_SET_DEV_ADDR实现地址设置,I2C_CMD_READ实现数据读取,I2C_CMD_WRITE实现数据写入,最终分别调用,其中I2C_create实现I2C设备加载,I2C_read实现I2C设备数据读取,I2C_write实现I2C设备数据写入,其中I2C_create利用i2c_add_driver调用i2c_probe,最终调用i2c_set_clientdata加载I2C从设备,I2C_read和I2C_write利用i2c_transfer函数调用master_xfer实现数据的读取和写入,具体实现过程如图3所示,其中I2C_devIoctl实现部分代码如下:
int I2C_devIoctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) {
switch(cmd) {
case I2C_CMD_SET_DEV_ADDR://I2C设置地址设置
filp-&private_data = I2C_create(arg);
case I2C_CMD_READ: //数据读取
status = copy_from_user( (void*)arg, sizeof(transferPrm));
if(status==0) {
status = copy_from_user();//省略参数
if(status==0) {
status = I2C_read();//省略参数
if(status==0) {
status = copy_to_user();//省略参数
case I2C_CMD_WRITE: //数据写入
return status;
图3 I2C电机驱动设计图
5 I2C应用程序设计
根据I2C驱动程序设计,要正确调用驱动程序,需要实现驱动的用户空间调用函数,主要是实现open和ioctl等调用函数,因此在应用层的接口函数中也需要实现此函数。
i2c_Init()函数实现open函数,调用驱动函数打开该设备驱动,定义一个数据结构体为:
typedef struct {
unsigned char dataSize;
unsigned char count;
unsigned char *reg;
void *value;
} I2C_Data;
该结构体主要用来实现用户空间和内核空间的调用的数据交换,dataSize代表数据的大小,value是传输的数值,reg是传输命令参数,函数有I2c_Read8()是向内核读入一个字节数据,I2c_Write8()是向内核写入一个字节数据,I2c_Read16()是向内核写入2个字节数据,I2c_Write16 ()是向内核写入2个字节数据,下面列举一个函数说明具体的实现过程,
I2c_Write8(int fd unsigned char *reg, unsigned char *value, unsigned char count){
I2C_Data ptr; unsigned int cmd; int status;
ptr.dataSize = 1; ptr.reg = reg; ptr.count = count; ptr.value = value;
cmd = CMD_WRITE;
status = ioctl(fd, cmd, ptr);
if (status != 0)
printf("ioctl I2C_CMD_WRITE error!");
return status;
如图4所示,函数最终通过条用ioctl这个函数实现对驱动的调用,其中参数fd是设备句柄,cmd读写控制是命令,其中宏定义I2C_CMD_SET_DEV_ADDR为地址设置命令,I2C_CMD_READ向内核读取数据命令,I2C_CMD_WRITE向内核写入数据命令。
其他3个读写函数实现过程类似,这几个函数是数据写入读出的函数接口,方便应用层实现调用。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
图4云台电机控制应用程序设计图
6云台电机控制应用程序设计
云台很重要部分是电机转动控制,本课题研究采用图像界面实现人机交互,其中界面设计采用QT图形界面软件来设计,可以在界面操作实现电机的水平转动、垂直转动,逆时针转动和顺时针转动,从而带动视频监控的摄像头朝不同方位转动以及定位,如图所示。根据协议,应用程序设计主要实现以下操作:
(1)获取当前的垂直位置,函数接口为get_motor_curVertical_ptr (),返回垂直位置值;
(2)获取当前的水平位置,函数接口为get_motor_curHorizontal_ptr (),返回水平位置值;
(3)设置垂直运行的停止位置,函数接口为set_motor_vertical_ptr (unsigned short ptr),参数ptr为设置的垂直停止位置值;
(4)设置水平运行的停止位置,函数接口为set_motor_horizontal_ptr (unsigned short ptr)参数ptr为设置的水平停止位置值;
(5)水平操作和垂直操作的启动操作,接口函数为set_motor_opt(bool bVertical, bool bHorizontal),参数bVertical表示是否启动垂直操作,bHorizontal表示是否启动水平操作
(6)设置运行速度,函数接口为set_motor_speed(unsigned char vertical_speed, unsigned char horizontal_speed),参数vertical_speed控制垂直方向速度值,horizontal_speed控制水平方向速度值;
(7)设置电机运行方向,接口函数set_motor_direction(bool bVertical, bool bHorizontal),设置运行方向为顺时针或者逆时针,参数bVertical为真表示垂直方向向上运动,为假表示向下运动;bHorizontal为真,表示水平方向逆时针,否则为顺时针。
下面通过运动速度的接口函数set_motor_speed(),详细介绍云台控制接口函数的实现过程,电机转动速度设置函数设置set_motor_speed(),其中函数参数vertical_speed为垂直方向运动速度;horizontal_speed为水平方向运动速度,局部变量reg用于制定控制类型,value设计为16位,其中高8位存放垂直转动速度数值命令,低8为存放水平转动速度数值,参数设置完后调用I2c_Write16()函数,从而调用ioctl实现对驱动的调用,最终通过I2C总线控制电机,达到电机快速转动、定位准确。
set_motor_speed(unsigned char vertical_speed, unsigned char horizontal_speed) {
unsigned char reg;
unsigned short value=0;
value = vertical_speed
value |= horizontal_
ret = I2c_Write16 (fd, (R), &value);
if (ret != 0)
printf("set_motor_speed error");
本系统设计实现了一款基于TMS320DM368的高清视频监控系统中的云台电机控制设计,完成了i2c驱动程序的分析以及设计,并且完成了i2c应用程序的设计和云台电机控制应用程序设计,达到了应用目的,取得了良好效果。
分享给小伙伴们:
阅读:10669
阅读:16207
阅读:13725
阅读:18536
阅读:13778
微信公众号二
微信公众号一AVR-I2C总线接口扩展(程序+原理图) - AVR技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
Hot [精品]
AVR-I2C总线接口扩展(程序+原理图)
资深工程师
16:08:49  
AVR-I2C总线接口扩展(程序+原理图)
16:06 上传
点击文件名下载附件
下载积分: 积分 -1 分
112.34 KB, 下载次数: 60, 下载积分: 积分 -1 分
23:27:26  
15:30:30  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
高级工程师
02:54:48  
Thank you very much..............
助理工程师
17:37:13  
14:45:36  
下载下来看一下
22:42:58  
下载下来看看,呵呵
17:08:36  
ddddddddddddddddddddd
15:16:22  
不错不出错不错不错不错不错不错
等待验证会员
09:43:57  
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
等待验证会员
17:01:20  
谢谢谢谢谢谢谢谢
工程师职场
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
版权所有 (C) 深圳华强聚丰电子科技有限公司捷配欢迎您!
微信扫一扫关注我们
当前位置:&>>&&>>&&>>&浅谈CPLD的I2C总线接口设计与应用
  I2C总线连线图I2C(Inter-Integrated )总线是由公司开发的两线式串行总线,用于连接及其外围设备。是微通信控制领域广泛采用的一种总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点
  I2C总线是两线式串行总线,用于连接微控制器及其外围设备。该总线具有如下特点:1)只要求两条总线线路1、只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL 2、每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器。3、它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;4串行的8 位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;5连接到相同总线的IC 数量只受到总线的最大400pF 限制。I2C总线最主要的优点是其简单性和有效性。它支持多主控制(multimastering),总线中任何能够进行发送和接收的设备都可以成为主机。任何主机都能够控制总线信号的传输和时钟频率。
  由于连接到I2C 总线的器件有不同种类的工艺(CMOS、NMOS、双极性),逻辑0(低)和逻辑1(高)的电平不是固定的,它由VCC的相关电平决定,每传输一个数据位就产生一个时钟脉冲。
  不幸的是大多数CPU都擅长操作并口,而并不具备直接操作I2C总线接口的能力。该方法虽然可以达到同I2C器件连接的目的,却不可避免地带来软件编制复杂、占用CPU处理时间多的弊端。为了在不增加编程难度、不大量占用CPU处理时间的前提下使不具备I2C总线的CPU也能够充分享受I2C总线的优点,本文设计了一种基于CPLD的8位并行接口转I2C总线接口的控制模块,通过该模块,具有并口的CPU可以通过对并口的读写完成对I2C总线的控制。
  1 I2C总线的基本时序
  I2C总线是由数据线SDA和时钟线SCL构成,SDA是技能开发活动英文字母的速写,实际上,它是一个非常有用的工具。通过它可将实际成绩和目标之间的距离逐步缩短,从而使目标达成。靠它们在连接于I2C总线的各个设备之间传送信息。I2C总线在传送数据过程中共有4种类型的信号,分别是:开始信号、结束信号、应答信号和数据传输信号。
  开始信号:主机控制SDA信号线在SCL线的高电平期间发生由高电平到低电平的跳变,通知从机开始数据传输。
  结束信号:主机控制SDA信号线在SCL线的高电平期间发生由低电平到高电平的跳变,通知从机本次数据传输结束。
  应答信号:接收数据的芯片(主机或者从机)在完整接收到8位数据后,向发送数据的芯片发出低电平信号,通知发送的数据已被接收。发送数据的芯片应根据应答信号的电平高低判断数据是否被接收芯片接收。
  数据传输信号:发送数据的芯片在SCL脉冲控制下在SDA上串行输出数据信号,SDA只能在SCL为低电平期间改变状态,在SCL为高电平期间应保持稳定。
  I2C总线上的数据传输主要有4种模式,分别是:字节写、页面写、当前地址读、随机地址读和顺序读。
  字节写:对给定的芯片的确定地址单元写入一个字节的数据。
  页面写:对给定的芯片的确定地址单元所在页面连续写入全部的数据。
  当前地址读:读出当前地址单元中的一个字节数据。
  随机地址读:从给定的芯片的确定地址单元中读出一个字节数据。
  顺序读:从给定的地址后连续读出n个字节的数据。
  I2C总线各种信号及数据传输模式示意图如图1所示。
  CPLD复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模范围。大规模可编程逻辑器件是EDA得以实现的硬件基础,通过编程,可灵活方便地构建和修改数字电子系统。可编程逻辑器件是集成电路技术发展的产物。很早以前,电子工程师们就曾设想设计一种逻辑可再编程的器件,但由于集成电路规模的限制,难以实现。20世纪70年代,集成电路技术迅猛发展,随着集成电路规模的增大,MSI(Medium Scale Integrated Circuit),LSI(Large Scale Integrated Circuit)出现,可编程逻辑器件才得以诞生和迅速发展。是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,实现设计的数字系统。
  利用CPLD设计一种模块,如果能够将CPU发出的并行数据按上述I2C总线数据传输模式自动转换成串行数据输出,同时将接收到的I2C总线串行数据自动转换成并行数据供CPU读取,则不具备I2C总线接口的CPU也能通过对并口的操作轻松实现与I2C总线连接并同其他具备I2C总线接口的芯片交换数据。
  2 I2C总线接口模块的CPLD实现
  CPLD主要是由可编程逻辑宏单元(MC,Macro Cell)围绕中心的可编程互连矩阵单元组成。其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
  上面简要介绍了I2C总线的信号以及I2C总线的数据传输模式,如果要使接口模块正常工作,CPU必须首先要通知模块执行什么操作,而后再把需要的数据依次送入模块中,考虑到I2C总线的速率可以在0~3.4 Mbit/s之间,为了适应不同外设的需要,模块还应在CPU的控制下自由调整数据传送速率。
  中读取工作状态数据、模块接收数据。据此设计出基于CPLD的I2C总线接口模块如图2所示。
  该设计由7个单元组成,它们分别是:用于调整I2C总线数据传输速率的Clock单元;用于实现同CPU并行接口的PcPort单元:用于产生I2C总线工作时序的I2CStep单元;用于产生数据传输时序的BitTiming单元;用于产生I2C总线使能信号的En12C单元:用于产生I2C总线接口模块工作状态指示的Status单元:以及用于产生I2C接口时钟信号SDL和数据串行输入输出信号SDA的I2CPORT单元。
  2.1 Clock单元
  整个接口模块以CPU的系统时钟作为主时钟信号,模块传输数据的速率受该时钟频率的控制,时钟频率高则模块传输数据的速率也高,反之亦然。考虑到各种具有I2C总线接口的芯片的工作速率差别较大(从几十kB/s到几MB/s),该接口模块的工作速率必须能够灵活调整,以适应不同外设芯片的接口需要。
  Clock单元实际上就是一个分频器,它在输出频率控制码CKSEL[70]的控制下产生对PCCLK分频后合适的时钟信号供I2C接口使用。
  2.2 I2CStep单元
  通过对图1中I2C总线各种工作模式的分析,可知不同的工作模式都是按特定的工作流程串行输入、输出数据的,例如字节写模式的工作流程为:发送开始信号、串行输出被叫芯片的片选地址、发送写信号、等待被叫芯片响应、串行输出被叫芯片存储单元的地址、等待被叫芯片响应、串行输出写入的数据、等待被叫芯片响应、发送结束信号结束本次操作。
  为了使接口模块正确工作,模块在接收到来自CPU的工作模式控制信号I2CMD[20]后,根据工作模式的不同产生接口模块工作流程。当前流程结束后由Status单元产生IncStep信号,控制工作流程指向下一阶段。该模块的功能类似一个计数器,它在I2CMD[20]和I2CStep的共同作用下,产生长度不等的工作流程信号Step[60]。
  2.3 BitTiming单元
  在I2C总线工作流程的不同阶段,I2C接口模块需要按一定的时序完成不同的工作,通过对总线数据传输模式的分析可知,在一个数据传输模式的所有工作流程中,输入、输出8位数据的工作流程用时最长,需要25个工作时序周期,为了满足所有工作流程的需要,工作时序Bit-Timing单元被设计成最长可产生31个时钟周期的工作时序。
  该单元在IncStep=‘1’时复位工作时序;在EnTiming信号有效后的每个SysCLK的上升沿使工作时序信号EnTiming加1,用于控制I2CPORT单元按给定的时序串行输入、输出数据信息。
  2.4 Status单元
  在I2C总线工作过程中,CPU需要随时了解I2C接口模块的发送数据寄存器是否为空、接收数据寄存器是否准备数据好、从机响应信号是否正确、当前工作流程是否完成等工作状态,只有在发送数据寄存器为空时,CPU才可以向接口模块写入待传输数据;只有在接收数据寄存器数据准备好后,CPU才可以从接口模块读入正确的接收数据;从机响应信号不正确时,CPU应立即发出结束信号结束本次操作;当前工作流程未完成前不能进行下一流程。
  在该单元中,共有4种输出信号,它们分别是:用于指示发送数据寄存器是否为空的TxSTS状态,该状态在CPU写入数据后置‘1’,数据被发送后清‘0’;用于指示接收数据准备好状态的RxSTS信号,该信号在模块接收到完整的数据后置‘1’,数据被CPU读走后清‘0’;用于指示模块工作状态的ACKSTS信号,该信号在模块工作正常(接收到从机响应信号)时自动置‘1’,工作不正常时自动清‘0’;用于使工作流程指向下一阶段的IncStep信号,该信号在当前工作流程完成后由模块自动产生,用于使模块的工作流程指向下一阶段。
  2.5 EnI2C单元
  在I2C总线接口模块中,BitTiming单元何时开始产生工作时序,需要时序信号控制,I2CPORT单元何时向I2C总线输出信息、何时从I2C总线上读入信息也需要时序信号控制。这些控制时序的产生由EnI2C单元完成。
  EnI2C单元在I2CMD[20]、Step[60]、TxSTS、RxSTS等信号的控制下,从预先存储于单元内部的一组I2C工作时序信息中读出当前的时序信息输出,控制BitTiming和I2CPORT单元工作。
  模块中,预先存储的I2C工作时序信息实现如下:
  2.6 12CPORT单元
  本单元是整个设计的核心,用于完成数据的I2C总线输出以及I2C总线输入数据的读入。同时产生接口模块的各种工作状态。
  该单元的工作过程为:在SysCLK的下降沿分别读入工作使能信号和工作时序信号,如果此时EnIdle=‘1’则强制I2C总线进入空闲模式;如果EnStart=‘1’,则使I2C总线输出开始信号;如果EnWrite=‘1’,则使I2C总线输出8位数据信号;如果EnInACK=‘1’,则从I2C总线读入从机响应信号;如果EnRead=‘1’,则从I2C总线读入8位数据;如果EnOutACK=‘1’。则使I2C总线输出主机响应信号;如果EnStop=‘1’,则使I2C总线输出结束信号;在整个工作过程中,模块会自动根据工作情况,设置各种状态控制信号。
图3是用QuartusII9.0对该单元仿真的时序图。
  2.7 PcPort单元的实现
  该单元是模块与CPU的接口,CPU通过该单元向接口模块写入工作模式控制信息、需要发送的数据以及I2C工作速度控制信息;同时通过该单元读入从机响应信息、从机输出数据、发送接收寄存器状态等信息。
  3 应用实例
  该模块工作于主模式,主要应用于没有I2C专用接口的CPU通过并口方便地与具有I2C接口的外设连接并交换信息。
  图4给出了CPU通过该模块与E2PROM接口的例子。
  在图中, CPU通过数据总线、地址总线、读、写信号线与I2C接口模块相连,I2C接口模块则通过SDL、SDA与X24C04相连,PC104CPU输出的并行数据,经过I2C接口模块转换后变成符合I2C总线模式要求的串行数据输出到X24C04,X24C04输出的串行数据经过I2C接口模块转换后,变成并行数据供PC104CPU读取。使用该模块后CPU操作I2C总线就像操作并口一样方便。该电路的控制软件流程如图5所示。
  本文设计的接口模块只能工作于主机模式,并且在整个系统中只能有一个主机工作。在从机因处理其他工作而暂不能响应主机时,模块没有设计等待功能,只能发送总线结束信号结束当前操作,待从机空闲时再重新开始通信。
  4 结论
  20世纪70年代,最早的可编程逻辑器件--PLD诞生了。其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成(相当于房子盖好后人工设计局部室内结构),因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。为弥补PLD只能设计小规模电路这一缺陷,20世纪80年代中期,推出了复杂可编程逻辑器件--CPLD。目前应用已深入网络、、汽车电子、数控机床、航天测控设备等方面。
  通过CPLD实现并口到I2C总线接口的转换,可以使不具备I2C总线接口的CPU通过并口方便地控制I2C总线设备,使用该模块可以简化控制软件的编程,加快系统设计的实现,在I2C总线操作过程中,转换模块自动发出开始信号、结束信号,不需要CPU干预。
  本文设计的I2C接口模块只能工作于主模式,只能应用于主机系统;在模块的设计中,没有考虑多主机的情况,对多主机的总线竞争没有设计仲裁功能;模块的页面读写数据数不能超过32个字节,在32个字节之内,CPU可以通过主动设置工作模式为“110”而终止当前操作,达到连续读写小于32个字节数据的目的,超过32个字节的连续数据读写操作将使模块工作错误。&&来源:
技术资料出处:郑采君
该文章仅供学习参考使用,版权归作者所有。
因本网站内容较多,未能及时联系上的作者,请按本网站显示的方式与我们联系。
【】【】【】【】
上一篇:下一篇:
本文已有(0)篇评论
发表技术资料评论,请使用文明用语
字符数不能超过255
暂且没有评论!
12345678910
12345678910
12345678910
1.问题:印制电路中蚀刻速率降低
  原因:
  由于工艺参数控制不当引起的
[][][][][][][][][][]
IC热门型号
IC现货型号
推荐电子百科

我要回帖

更多关于 i2c总线接口 的文章

 

随机推荐