DSP28335中的I2C模块应用

I2C总线介绍

I2C总线背景

I2C总线是由飞利浦半导体公司(现在的NXP半导体)于1982年发明的同步,多主机,多从机,分组交换,单端,串行通信总线标准。它广泛用于在板内短距离通信中,可以将低速外围IC连接到处理器和微控制器。

I2C总线标准的更新如下表所示,目前的标准维护主要掌握在NXP半导体公司,DSP28335目前支持的标准是V2.1版本:

YearVersionMaximum speedNotes
1982Original100 kbit/sThe I2C system was created as a simple internal bus system for building control electronics with various Philips chips.
19921400 kbit/sAdded Fast-mode (Fm) and a 10-bit addressing mode to increase capacity to 1008 nodes. This was the first standardized version.
199823.4 Mbit/sAdded High-speed mode (Hs) with power-saving requirements for electric voltage and current.
20002.13.4 Mbit/sClarified version 2, without significant functional changes.
200731 Mbit/sAdded Fast-mode plus (Fm+) (using 20 mA drivers), and a device ID mechanism.
201245 Mbit/sAdded Ultra Fast-mode (UFm) for new USDA (data) and USCL (clock) lines using push-pull logic without pull-up resistors, and added an assigned manufacturer ID table. It is only a unidirectional bus.
201255 Mbit/sCorrected mistakes.
201465 Mbit/sCorrected two graphs. This is the current standard.

I2C总线结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hY9aDgBk-1616745155840)(DSP28335中的I2C模块应用.assets/image-20210301103754568.png)]

I2C总线的结构如上图所示,I2C总线只有两条线,一条时钟信号线SCL,一条数据信号线SDA,所有设备都通过这两条线挂到总线上。两条信号线还需要分别通过上拉电阻接到一个正电压源上。

I2C通讯协议

物理层规范

  1. I2C总线由一条时钟线SCL和一条数据线SDA构成。
  2. I2C总线的逻辑0和逻辑1的电平定义不是固定的,而是由通过上拉电阻连接的电源电压VDD决定。

数据有效性定义

在时钟线SCL为高电平时,I2C的数据线SDA电平必须保持稳定才算有效。I2C的SDA的电平变化只能发生在SCL电平为低的状态下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLCzVihG-1616745155842)(DSP28335中的I2C模块应用.assets/image-20210301112320372.png)]

I2C设备的运行模式

I2C模块有四种基础的运行模式分别作为主设备或者从设备传输数据。

operating modedescription
Slave-receiver modes所有的从设备初始时都处于此模式。这个模式下,从设备在主设备产生的时钟信号下接收SDA上的数据。从设备不能产生时钟信号,但是当出现总线过载时(RSFULL=1),从设备可以将时钟总线SCL拉低。
Slave-transmiitter mode从设备只有在Slave-receiver模式下收到来自主设备的命令时才会进入此模式。当从设备发现发现总线上收到的从设备地址与自身地址相同,同时主设备发送的R/W=1,从设备就会切换到此模式,将数据通过SDA线发出去。同样此模式下,SCL时钟信号由主设备产生,从设备只在特殊情况下(XSMT=0)会将SCL拉低。
Master-receiver mode主设备只有在Master-transmitter模式时发送指令给主设备之后才会进入此模式。在主设备发送了从设备地址,并且R/W=1时,主设备会切换到接收模式,从SDA逐位接收数据。此时SCL仍由主设备控制,只在发生异常时(RSFULL=1)会将SCL拉低。
Master-transmitter modes所有主设备在初始时都处于此模式,此模式下数据通过SDA逐位发送出去,SCL上的脉冲信号则由主机的模块时钟产生,只有在发生异常时(XSMT=0)会将SCL拉低。

I2C 总线上的START和STOP条件

I2C总线传输数据时的开始和结束条件可以由总线上的主设备产生。

  • START条件:在SCL为高电平时,SDA电平由高到低转变,这个条件发生时,表示总线上要开始一次数据传输。
  • STOP条件:在SCL为低电平时,SDA电平由低到高转变,这个条件发生时,表示总线上的一次数据传输结束。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yknmvwiF-1616745155843)(DSP28335中的I2C模块应用.assets/image-20210301115442213.png)]

I2C总线上的数据格式

I2C模块支持1到8位的数据模式,放到SDA上的每一位数据对应着SCL上的一个脉冲,所有数据都是从最高位(MSB)开始传输的,一次传输的数据量多少没有限制。

I2C支持7位地址模式和扩展的10位地址模式,下图是7bit地址,8bit数据格式的I2C总线数据传输示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxuj7p0v-1616745155844)(DSP28335中的I2C模块应用.assets/image-20210301141530535.png)]

  1. 7位地址模式

    7位地址模式是I2C模块复位后的默认模式,当DSP28335的I2CMDR.XA和I2CMDR.FDF位都为0时,I2C模块就处于此模式。

    此模式下在START条件之后的第一个字节由一个7位的地址和1位的R/W标志位组成。其中R/W标志位决定数据传输的方向:

    1. R/W=0:I2C主设备发送数据到从设备,在DSP28335中可通过置位I2CMDR.TRX=1实现。
    2. R/W=1: I2C主设备接收来自从设备的数据,在DSP28335中可通过I2CMDR.TRX=0实现。

    每两个byte之间都会插入一个额外的时钟周期,作为应答(ACK)信号。如果主机发送了第一个字节之后由从机插入应答信号,那么总线上紧接着就是n bits来自发送者的数据。当所有数据bits传输完后,接收端会在总线上插入一个ACK位。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jy9Bjj2H-1616745155845)(DSP28335中的I2C模块应用.assets/image-20210301162851152.png)]

  2. 10位地址模式

    10位地址模式与7位地址模式类似,但是从机的地址用10bits 来表示,因此主机会分成两个byte发送从机地址。第一个字节的固定由11110b开始,然后是10bits从机地址的最高两位,然后是R/W标志位。第二个字节就是10bits从机地址的低8位。对于从机,主机发送的这两个字节每一个都要单独发送ACK标志。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWhusgZB-1616745155846)(DSP28335中的I2C模块应用.assets/image-20210301163310326.png)]

  3. 自由数据格式 (Free Data Format)

    在DSP28335中通过置位I2CMDR.FDF=1就可以使能自由数据格式模式。在这种模式下,START条件之后紧接着就是要传输的数据,没有地址和数据方向位需要发送。因此在这种模式下的I2C总线上,发送端和接收端都需要支持这种模式,并且数据的传输方向要一直不变。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hal9HrVN-1616745155847)(DSP28335中的I2C模块应用.assets/image-20210301164114945.png)]

  4. 使用重复START条件

    I2C总线上的主设备不需要每次都产生STOP条件来放弃总线控制然后再切换的方式来和多个从设备通讯。只需要再一个data发送完成之后再次发起一次START条件,就可以重新和其他从设备开始通讯。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VHu4qvM-1616745155847)(DSP28335中的I2C模块应用.assets/image-20210301164655803.png)]

  5. 发送NACK位

    当I2C模块作为接收方时,可以决定去确认或者忽略来自发送者的数据。如果要忽略接收到的一个数据,I2C模块需要在该数据后的ACK位上发送一个不应答位(NACK)。

  6. 时钟同步

    当总线上存在多个主设备时,就会需要总线仲裁(arbitration),这时时钟信号需要被同步。

    I2C的时钟信号SCL具有线与(wired-AND)的特点,因此在SCL线上第一个产生低电平周期的设备将会控制整个总线的时钟,在这个时钟信号的下降沿,总线上其他主设备的时钟信号将会被同步,也即被迫开始它们自身的低电平周期。而SCL将会一直维持低电平,直到总线上所有设备的时钟都恢复高电平,对于其他在这之前时钟已经要变高电平的设备必须要等待总线被释放才能恢复他们自身时钟信号的高电平。对I2C时钟信号的同步,满足最慢的设备决定总线的低电平时间,而最快的设备决定总线的高电平时间。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLlkFSHr-1616745155847)(DSP28335中的I2C模块应用.assets/image-20210302164552662.png)]

  7. 总线仲裁

    对于两个或多个主设备在总线上同时发起数据传输的情况,需要对SDA做总线仲裁。两个设备在接受I2C总线仲裁时,总是先企图拉高SDA电平的设备退出仲裁,换句话说,所要传输的数据字节越小,在总线仲裁中的优先级越高。

    如果一个主设备在总线仲裁中退出了,那么会自动切换到slave-receiver模式,并将ARBL标志位置位,并且会产生一个仲裁失败中断。在以下三种情况中是不允许总线仲裁的:

    1. 重复START条件和一个数据bit
    2. STOP条件和一个数据bit
    3. 重复START条件和STOP条件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PkjHzqo7-1616745155848)(DSP28335中的I2C模块应用.assets/image-20210302170203976.png)]

DSP28335中的I2C模块

DSP28335 I2C模块特点

DSP28335中的I2C具备以下功能:

  1. 完全兼容NXP半导体制定的I2C总线规格(V2.1)。
  2. 接收和发送的缓冲FIFO。
  3. 支持两类ePIE中断:I2Cx中断和I2Cx_FIFO中断。
  4. 能够控制使能/不使能。
  5. 支持自由数据格式模式。

I2C模块构成

I2C模块内部由以下部分组成:

  1. 串行接口:SCL和SDA引脚。
  2. 数据寄存器和FIFO。
  3. 控制和状态寄存器。
  4. 与CPU之间的外设总线接口。
  5. 时钟同步器
  6. 预分频器
  7. 噪声滤波器
  8. 仲裁器
  9. 中断逻辑单元
  10. FIFO中断逻辑单元

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cm0uCNUZ-1616745155848)(DSP28335中的I2C模块应用.assets/image-20210301105324958.png)]

时钟信号的产生

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sNGLwuPa-1616745155849)(DSP28335中的I2C模块应用.assets/image-20210301105436469.png)]

如上图所示,系统时钟首先经过预分频器的分频得到I2C模块时钟,然后再经过模块内部的ICCL和ICCH寄存器分频得到SCL引脚上的主时钟。因此有如下关系:
I 2 C   M o d u l e   C l o c k ( F m o d ) = S Y S C L K ( I 2 C P S C + 1 ) M a s t e r   C l o c k   C l o c k ( F m s t ) = I 2 C   M o d u l e   C l o c k ( F m o d ) ( I C C H + d ) + ( I C C L + d ) I2C{\ }Module {\ }Clock(Fmod)=\frac{SYSCLK}{(I2CPSC+1)} \\ Master{\ }Clock{\ }Clock(Fmst)=\frac{I2C{\ }Module {\ }Clock(Fmod)}{(ICCH+d)+(ICCL+d)} I2C Module Clock(Fmod)=(I2CPSC+1)SYSCLKMaster Clock Clock(Fmst)=(ICCH+d)+(ICCL+d)I2C Module Clock(Fmod)
其中的d由divide-down value IPSC决定:

IPSCd
07
16
>15

Notice:

  1. I2C模块的时钟预分频设置只在I2C处于reset状态时有效,即IRS=0时有效,并且预分频的设置只在IRS重新置位后才能生效。
  2. 为了满足I2C协议对于时钟规格的要求,I2C模块的时钟需要配置在7-12MHz之间。

第一次传输数据前的配置

在DSP28335的I2C模块第一次开始数据传输之前,应该采取以下步骤进行配置:

  1. 通过IRS置位让I2C模块复位,等待一段时间确定应用中所有数据都能传输完毕。通过等待一段时间,用户可以确保I2C总线上至少有一次START或者STOP条件发生并被Bus Busy bit(BB)捕捉到,这之后BB位才能正确反映I2C总线的状态。
  2. 在数据传输之前检查BB bit确认BB=0(总线不忙)
  3. 开始数据传输

Notice

在I2C总线传输过程中不要复位I2C模块,以确保BB bit能正确反应总线状态。如果需要复位则要重复上面三个步骤。

DSP28335中的I2C中断

DSP28335中的I2C中断分为两类,一类是基础I2C中断,一类是I2C的FIFO中断。

基础I2C中断

DSP28335中的I2C模块有多种类型,如下表所列,所有的I2C中断会被多路复用到一个I2C中断仲裁器然后再传递给CPU,I2C中断的结构如图所示。

i2c iNTERRUPT REQUESTINTERRUPT SOURCE
XRDYIN数据发送中断。I2CDXR中的数据已经被发送出去,I2CSTR.XRDY=1。
RRDYINT数据接收中断。I2CDRR中收到了新数据,I2CSTR.RRDY=1
ARDYINTI2C寄存器操作中断。I2C模块的寄存器已经准备好被操作。之前的地址,数据,命令等数据已经使用了。I2CSTR.ARDY=1
NACKINT没有应答中断。当主设备发送数据而没有收到从设备的应答。I2CSTR.NACK=1
ARBLINT仲裁退出中断。作为主设备在总线仲裁中失败被退出。I2CSTR.ARBL=1
SCDINT停止条件中断。在总线上检测到了STOP条件。I2CSTR.SCD=1
AASINT识别位从设备中断。I2C模块被总线上的其他主设备识别为从设备。I2CSTR.AAS=1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HJtrUbHH-1616745155849)(DSP28335中的I2C模块应用.assets/image-20210302173540886.png)]

I2C FIFO中断

DSP28335除了7个基础I2C中断,还提供了I2C接收FIFO和发送FIFO两个中断。当I2C发送FIFO发送了超过设定数量的字节(最多16个),或者接收FIFO接收了超过设定数量的字节(最多16个),均会产生FIFO中断,这个中断以“或”的关系传到CPU中断,通过在中断服务函数中读取FIFO中断状态寄存器来确认具体中断源。下图是DSP28335中的I2C FIFO中断结构图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92F2ggIy-1616745155850)(DSP28335中的I2C模块应用.assets/image-20210302183150821.png)]

I2C模块的复位和不使能

DSP28335中可以用以下两种方式复位或者关闭I2C模块

  1. 向I2C模式寄存器I2CMDR的IRS位写0。所有的状态寄存器会回到默认值,SDA和SCL引脚会进入高阻态,直到IRS再被置位。
  2. 将XRS引脚拉低,将会使模块进入复位状态并且一直保持复位状态直到XRS引脚被拉高。当XRS引脚被释放后,I2C模块寄存器会回到默认值,并且IRS位会被置0,I2C模块会一直处于复位状态直到IRS位被写1。

NOTICE

进行I2C模块配置的时候要首先将IRS位写0,配置完之后再重新置位IRS位。

### 回答1: DSP28335是德州仪器公司推出的数字信号处理器芯片,采用32位浮点运算,内置多种外设模块,包括ADC、PWM、CAN、SPI、I2C、SCI等,可广泛应用于电子测量、工业自动化、通信等领域。相比于传统的单片机,DSP芯片具有更高的速度和更强的处理能力,能够快速地完成复杂的数字信号处理任务。 针对DSP28335这款芯片,国内外都有大量的文资料供学习者参考。从官方角度来看,德州仪器公司提供了一系列的DSP教程,包括基础理论、软件开发以及硬件设计等内容。此外,德州仪器公司的国官网也提供了相关的文技术支持,方便用户在使用过程遇到问题时进行咨询和求助。 除了官方资料外,国内有很多DSP的培训机构和博客提供了大量的文资料,包括DSP的原理、应用以及开发过程可能遇到的各种问题的解决方法等。这些资料内容详实,深入浅出,适合初学者快速入门,也能满足更高层次用户的需求。 总之,DSP28335这款芯片在学习和应用都有着广泛的文资料供用户参考,利用这些资料,我们可以更好更快地掌握DSP的开发方法和技巧,从而将其应用到实际的工程。 ### 回答2: DSP28335是一种高性能数字信号处理器,它广泛应用于工农业、医疗、通信等领域。该芯片基于TI公司的32位浮点数字信号处理器内核,具有高速低功耗、集成度高等优势。同时,该处理器还采用了先进的DMA控制、快速断响应等技术,保证其在不同应用场景下具有稳定性和可靠性。 针对DSP28335芯片使用和开发的需求,有许多文资料可供参考。其包括TI公司官方手册和应用笔记,以及各种技术博客和论坛文章。通过阅读这些文资料,用户可以了解DSP28335的各种特性和编程方法,掌握其在不同应用场景下的使用技巧。 需要注意的是,由于DSP28335是一款比较高级的处理器,因此使用和开发过程需要一定的学习和实践成本。在使用该芯片时,用户需要有一定的数字信号处理和嵌入式系统相关知识,并熟悉C语言、汇编语言等编程语言。因此,为了更好地利用DSP28335这一优秀的数字信号处理器,用户需要花费一定的精力来学习和掌握相关知识和技能。 ### 回答3: DSP28335是德州仪器公司TMS320F28335系列数字信号处理器产品的一种。它是一款高性能、低功耗的32位RISC处理器,适用于工业自动化、电力电子、航空航天、医疗器械等领域。DSP28335具有丰富的外设资源,包括多个PWM输出、多个ADC采集输入、以太网接口、CAN总线接口等,可以满足各种实际应用需求。 关于DSP28335文资料,目前已有较为详细的技术资料、手册、应用笔记等。用户可以在德州仪器官方网站或者其他技术网站上下载相关的文资料。在使用DSP28335之前,建议用户先仔细阅读相关资料,了解其基本原理和特性,然后再进行具体的开发和应用。 此外,针对DSP28335的编程工具和软件也有文版本,如CCS、Code Composer Studio等,用户可以选择下载并安装使用。总之,DSP28335文资料资源较为丰富,可以帮助用户更好地使用和开发这一产品。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的Talent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值