I2C
简介
I2C(Inter-Integrated Circuit,集成电路间总线)接口作为微控制器与串行 I2C 总线之间的桥梁。 它支持多主机能力,并负责处理所有 I2C 总线特定的时序、协议、仲裁和时钟控制。 支持以下模式:
标准模式(Sm,最高 100 kHz)
快速模式(Fm,最高 400 kHz)
快速模式 Plus(Fm+,最高 1 MHz)
高速模式(Hs-mode,最高 3.4 MHz)
根据具体设备实现,可选支持DMA功能,以降低CPU负载。
主要特性
并行总线 / I2C 协议转换器
支持主机与从机模式:同一接口可配置为主机或从机
内置两个 FIFO(发送与接收):
宽度:8 位
深度:2
I2C 主机特性:
时钟生成
起始(START)与停止(STOP)条件生成
I2C 从机特性:
可编程 I2C 地址识别
停止位检测
支持两个从机地址寄存器及两个掩码寄存器
支持 7 位 / 10 位寻址
支持最多两个从机地址响应(均带可配置掩码)
支持广播地址软件复位
支持多种通信速率:
标准速率(最高 100 kHz)
快速速率(最高 400 kHz)
快速 Plus 速率(最高 1 MHz)
高速(最高 3.4 MHz)
状态标志:
发送器 / 接收器模式标志
字节传输完成标志
I2C 忙标志
支持时钟拉伸(Clock Stretching):
发送数据未就绪
接收数据未被 CPU 或 DMA 核心读取
支持通过 DMA 控制器进行高速数据通信
可编程 SCL 与 SDA 时序参数(符合 I2C 规范):
起始条件保持时间(tHD;STA)
重复起始条件建立时间(tSU;STA)
数据建立时间(tSU;DAT)
数据保持时间(tHD;DAT)
SCL 高电平周期(tHIGH)
SCL 低电平周期(tLOW)
停止条件建立时间(tSU;STO)
停止与起始之间的总线空闲时间(tBUF)
可编程 SCL 高/低电平周期
可编程数字噪声滤波器
兼容 SMBus 2.0 规范:
硬件 PEC(包错误校验)生成与验证(带 ACK 控制)
支持地址解析协议(ARP)
支持主机与从机设备
支持 SMBus Alert
支持超时与空闲状态检测
兼容 PMBus 1.1 标准
I2C 实现特性
I2C 特性 |
支持情况 |
|---|---|
主机/从机模式 |
支持 |
7 位寻址模式 |
支持 |
10 位寻址模式 |
支持 |
标准模式(最高 100 kHz) |
支持 |
快速模式(最高 400 kHz) |
支持 |
快速 Plus 模式(最高 1 MHz) |
支持 |
高速模式(最高 3.4 MHz) |
支持 |
广播地址软件复位 |
支持 |
时钟拉伸能力 |
支持 |
通过 DMA 控制器访问 |
支持 |
SMBus |
支持 |
功能描述
除了收发数据外,该接口还负责串行与并行格式之间的转换。中断可通过软件使能或禁用。接口通过数据线(SDA)与时钟线(SCL)连接至 I2C 总线,支持标准(100 kHz)、快速(400 kHz)、快速 Plus(1 MHz)或高速(3.4 MHz)模式。
模式选择
该界面可运行于以下四种模式之一:
主发射机
主接收器
从属发射机
从属接收器
默认情况下,它以主模式运行,可为I2C从设备外设生成START或STOP条件,并支持多主机功能。通过设置SETUP[11]寄存器,该接口可从主模式切换至从模式;当控制器处于从模式时,则支持多从设备连接。
通信流程
在主模式下,I2C接口发起数据传输并生成时钟信号。串行数据传输始终以起始条件开始,以停止条件结束。起始条件和停止条件均在主模式下由软件产生。
在从机模式下,该接口能够识别自身的双地址(7位或10位),以及通用呼叫地址。 数据和地址以8位字节的形式传输,高位在前。起始条件后的第一个字节(或多个字节)包含地址(7位模式下为1个字节,10位模式下为2个字节)。地址始终在主模式下进行传输。 第9个时钟脉冲紧随一个字节传输的8个时钟周期之后,此时接收器必须向发送器发送一个应答位。详情请参阅I2C总线协议(第10页)。
I2C总线协议
确认功能可由软件启用或禁用。I2C接口地址(包括7位/10位双重寻址和/或通用呼叫地址)也可通过软件进行选择。 I2C接口的框图如I2C框图
I2C控制器架构
I2C 初始化
启用和禁用外设: I2C外设时钟必须在时钟控制器中配置并启用。 在通过设置SETUP寄存器中的CFG_DNF_NUM来配置数字滤波器后,方可启用I2C。随后,可通过将SETUP寄存器中的ENABLE位置1来启用I2C。 注意:I2C外设可使用配置寄存器的默认值,用户无需再手动配置时序。警告:当I2C传输正在进行时,禁止更改时序配置。
I2C初始化流程图
软复位
可以通过设置SETUP寄存器中的SOFT_RESET位来执行软件复位。在这种情况下,I2C总线的SCL和SDA引脚将被释放。内部状态机将被重置,通信控制位以及状态位也将恢复到其复位值。需要注意的是,配置寄存器不会受到影响。 当软件设置SETUP[7]时,将生成软复位脉冲并立即重置I2C控制器。
主机 SCL 和 SDA 时序
I2C总线时序
当软件设置SETUP[7]时,将生成软复位脉冲并立即重置I2C控制器。
I2C_TIMING.PRESC[31:0]。
CFG_START_SETUP_TIME[31:0],CFG_START_HOLD_TIME[31:0]。
CFG_SDA_SETUP_TIME[31:0],CFG_SDA_HOLD_TIME[31:0]。
CFG_SCL_HIGH_PERIOD[31:0],CFG_SCL_LOW_PERIOD[31:0]。
CFG_STOP_SETUP_TIME[31:0],CFG_BUS_FREE_TIME[31:0]。
I2C总线规范中规定的SCL时钟的最小高电平和低电平周期,决定了标准模式设备的最大位传输速率可达100 kbit/s,快速模式设备为400 kbit/s,而快速模式Plus设备则高达1000 kbit/s。各设备必须能够以自身支持的最高位速率完成数据传输,即既能以该速度发送数据,也能接收数据。 为了确保主模式和从模式下正确的数据保持时间和建立时间,必须对时序进行配置。
符号 |
参数说明 |
配置寄存器 |
|---|---|---|
tSU;STA |
START 条件建立时间 |
CFG_START_SETUP_TIME[31:0] |
tHD;STA |
START 条件保持时间 |
CFG_START_HOLD_TIME[31:0] |
tSU;DAT |
数据建立时间 |
CFG_SDA_SETUP_TIME[31:0] |
tHD;DAT |
数据保持时间 |
CFG_SDA_HOLD_TIME[31:0] |
tSU;STO |
STOP 条件建立时间 |
CFG_STOP_SETUP_TIME[31:0] |
tBUF |
总线空闲时间 (STOP 到 START) |
CFG_BUS_FREE_TIME[31:0] |
I2C 主机模式
在主模式下,I2C接口发起数据传输并生成时钟信号。串行数据传输始终以START条件开始,以STOP条件结束。一旦总线上出现带有START位的START条件,主模式便被立即选中。 以下是主CPU模式下的主要所需序列:
请编程设置时序寄存器,以生成正确的I2C时序。
通过启用SETUP[11]寄存器中的ROLE_MODE位,配置工作在主模式下的I2C控制器。
将SETUP[1]寄存器中的ENABLE位设置为1,以启用I2C控制器。
将SETUP[2]寄存器中的START位设置为1,以生成一个START条件。
配置TXDATA寄存器。
将 SETUP[5:4] 寄存器中的 WRITE 或 READ 位编程,以使主设备工作在发送模式或接收模式。
当STATUS[4]中的BYTE_ON_GOING位为低电平,表示字节传输已完成。
I2C主机初始化流程
起始与停止条件
所有事务均以START(S)开始,并以STOP(P)结束,具体如 START与STOP条件图所示。当SCL为高电平时,SDA线发生从高到低的跳变,即定义了START条件;而当SCL为高电平时,SDA线发生从低到高的跳变,则定义了STOP条件。
I2C起始和停止条件
设置START位会使接口在SDA和SCL线上产生起始条件。 当最后一个字节写入TXDATA寄存器后,软件会通过设置STOP位来触发停止条件。起始和停止条件始终由主设备发起。 当起始条件出现时,总线即进入忙状态;而当停止条件触发后,I2C控制器会在特定时间重新释放空闲状态。 若连续生成起始信号(Sr)而非停止条件,I2C控制器仍会保持忙碌状态。从功能特性来看,起始(S)与重复起始(Sr)是等效的。
注意:在主设备模式下,设置START位会在当前字节传输结束时触发重起始条件。
一旦发送起始条件,从设备地址将从TXDATA寄存器中进行传输。
从机地址传输
随后,从机地址通过内部移位寄存器被发送至SDA线。 在7位寻址模式下,会发送一个地址字节。 地址字节发送完成后,硬件会自动清除正在进行位(STATUS[4]寄存器)。随后,主设备将等待读取STATUS[2]寄存器中的ACK位,该位用于指示从设备已在SDA线上发出应答握手信号。 主设备可根据所发送从机地址的最低有效位,决定进入发射器模式或接收器模式。 在7位寻址模式中:
要进入发射模式,主设备需发送从设备地址,且最低有效位清零。
要进入接收模式,主设备需发送从设备地址,并将最低有效位(LSB)置为1。
在10位寻址模式中:
要进入发射模式,主设备先发送报头(11110xx0),然后发送从设备地址(其中xx表示地址的两个最高有效位)。
要进入接收模式,主设备先发送帧头(11110xx0),随后发送从设备地址。接着,主设备应再次发送一个重复的起始条件,紧接着是帧头(11110xx1),其中“xx”表示地址的两个最高有效位。
SETUP[5:4]寄存器中的READ或WRITE位指示主设备处于接收器模式还是发送器模式
主机发送器
地址传输完成后,主设备通过内部移位寄存器,将TXDATA寄存器中的字节发送至SDA线。 当接收到确认脉冲时,STATUS寄存器中的ACK位将由硬件自动置位。 如果STATUS[4]寄存器中的BYTE_ON_GOING位被清零,并且有新的数据字节被写入TXDATA寄存器,则主设备将通过设置SETUP[4]寄存器中的WRITE位,从TXDATA寄存器向SDA线发送下一个字节。这如主发送模式图所示。
I2C主机发送模式
主机接收器
I2C主机接收模式
地址传输完成后,I2C接口进入主接收模式。在此模式下,接口通过内部移位寄存器,将SDA线上的字节逐个移入RXDATA寄存器,并在每个字节后发送应答脉冲。 当确认脉冲(ACK位为低电平)发送时,表示主设备已发出握手信号,从设备将把下一数据发送到SDA线上。 如果STATUS[4]寄存器中的BYTE_ON_GOING位被清零,并且通过读取RXDATA寄存器获取了一个数据字节,则主设备可通过设置SETUP[5]寄存器中的READ位,向SDA线发送下一个读操作命令。这如主接收模式图所示。
关闭通信: 主设备对从设备发送的最后一个字节返回NACK。收到该NACK后,从设备释放SCL和SDA线的控制权。随后,主设备即可发送停止/重启条件。
I2C 从机模式
为了以从机模式工作,用户必须启用至少一个从机地址。有两个可用的从机地址,可用于编程从机自身的I2C_SLAVE_ADDRESS1和I2C_SLAVE_ADDRESS2寄存器。 一旦检测到START条件,地址便从SDA线接收,并被送入移位寄存器。随后,在SLAVE_ADDRESS1_EN使能时,该地址会与SLAVE_ADDRESS1寄存器中的地址进行比较;在SLAVE_ADDRESS2_EN使能时,则与SLAVE_ADDRESS2寄存器中的地址对比;若SLAVE_ADDRESS1_EN和SLAVE_ADDRESS2_EN均被使能,则同时与SLAVE_ADDRESS1和SLAVE_ADDRESS2寄存器中的地址进行比较;此外,还会与通用呼叫地址(0x0000_0000)进行比较。SLAVE_ADDRESS1寄存器和SLAVE_ADDRESS2寄存器均可通过SLAVE_ADDRESS1_MASK寄存器和SLAVE_ADDRESS2_MASK寄存器进行屏蔽。只要SLAVE_ADDRESS1_MASK寄存器和SLAVE_ADDRESS2_MASK寄存器中至少有一位不为0,SLAVE_ADDRESS1寄存器和SLAVE_ADDRESS2寄存器即被视为有效。
报头或地址不匹配:该接口会忽略它,并等待下一个起始条件。 标头匹配(仅限10位模式):接口生成一个应答脉冲,并等待8位从机地址。 地址匹配成功:接口按顺序生成: 1.该接口会生成一个确认脉冲。 2.软件必须读取RXDATA寄存器,以检查哪个从地址已被确认 在10位模式下,从机在接收到地址序列后始终处于接收模式。当接收到重复的起始条件,并紧接着带有匹配地址位且最低有效位被置为(11110xx1)的头序时,它将进入发送模式。 注意: 在从模式下,SCL周期 Tscl 和 I2C 内核时钟周期 Ti2c_core_clk 必须满足以下条件:Tscl > 10 × Ti2c_core_clk。
I2C从机初始化流程
从机发送器
I2C从机发送模式
在接收到地址并清除ADDR后,从机通过内部移位寄存器将TXDATA寄存器中的字节逐个发送到SDA线。在TXDATA寄存器中填满待发送数据之前,从机将持续拉低SCL信号。具体过程如图所示:。 当收到确认脉冲时:
STATUS[11] 寄存器的 I2C_SLAVE_TXE 位由硬件自动置位,如果 INT_IE[3] 位已设置,则会生成一个中断,提示软件应将数据字节写入 TXDATA 寄存器。
如果TXDATA寄存器中写入一个数据字节,则从设备将TXDATA寄存器中的下一个字节发送到SDA线上。
从机接收器
I2C从机接收模式
在完成地址接收并清除ADDR后,从机通过内部移位寄存器将SDA线上的字节逐位移入RXDATA寄存器。具体过程如从机接收模式图所示。 在每个字节之后,接口会依次生成:
如果 ACK 位被置位,则发送一个确认脉冲。
I2C_SLAVE_RXF 位由硬件置位,如果 INT_IE[3] 位已设置,则会生成中断。
如果在下一次数据接收结束前未读取RXDATA寄存器中的数据,I2C_SLAVE_RXF位将被置位,接口会一直等待,直至软件通过从RXDATA寄存器中读取数据来获取已接收的数据,同时将SCL信号拉低保持。
关闭从机通信
在传输完最后一个数据字节后,主设备会生成一个STOP条件。 当SDA在第9个时钟脉冲期间保持为高电平(NACK,SETUP[6]=1)时,这被定义为“无应答”信号。 主设备随后可以生成一个STOP条件以中止传输,或生成一个重复的START条件以启动新的传输。
导致生成NACK的条件共有四种: - 1. 总线上不存在与所传地址匹配的接收器,因此没有设备能够发出应答信号。 - 2. 在传输过程中,接收器接收到它无法理解的数据或命令。 - 3. 在传输过程中,接收方将无法再接收任何数据字节。 - 4. 主接收器必须向从发送器发出传输结束信号。 当主设备在总线上发出STOP条件时,BUSY位(STATUS[0])被清零,这表明SCL和SDA线已进入空闲状态。
广播地址
通用调用地址用于同时寻址连接到I2C总线上的每个设备。然而,如果某个设备不需要通用调用结构中提供的任何数据,则可通过不发出应答信号来忽略该地址。若设备确实需要来自通用调用地址的数据,它将对该地址进行应答,并作为从机-接收器模式运行。 当I2C控制器工作在从机模式时,它能够响应通用呼叫复位,将其自身软复位。
I2C广播模式
当位B为“零”时,第二个字节具有如下定义:
0000_0110(06h):通用调用复位
接收到此2字节序列后,I2C控制器将生成一个软复位。该复位操作会将I2C控制器的主逻辑重置为空闲状态,并释放SCL和SDA线(上拉状态)。I2C控制器需确保在施加电源电压后,不会将SDA或SCL线拉低,因为这些低电平状态会阻塞总线。
使用 DMA 的连续通信
I2C能够通过DMA继续通信。用于接收缓冲区和发送缓冲区的DMA请求是独立生成的。 注意:DMA控制器的可用性请参考子系统规格。如果子系统中未提供DMA功能,则应按照第6.3节所述,使用I2C接口,即以CPU模式作为发送器或接收器。
I2C DMA 传输时序图
使用DMA进行传输 可以通过设置I2C_SETUP[0]寄存器中的DMA_EN位,启用DMA模式进行传输。当FIFO为空时,数据将从由DMA外设配置的SRAM区域加载至I2C_TXFIFO;此时,DMA核心将通过SOC总线访问待发送数据。
只有数据通过DMA进行传输。 - 在主模式下:初始化、从机地址、方向、字节数以及START位均由软件编程(传输的从机地址无法通过DMA传输)。当所有数据均采用DMA传输时,必须先初始化DMA,然后再设置START位。 SMBus 特性 - 在从模式下:当所有数据均通过DMA传输时,必须在地址匹配事件之前初始化DMA,或在中断子程序中清除ADDR之前进行初始化。
使用DMA进行接收
可以通过设置I2C_SETUP[0]寄存器中的DMA EN位,启用用于接收的DMA模式。每当接收到一个数据字节时,数据将从I2C_RXFIFO加载至由DMA外设配置的SRAM区域(具体请参考DMA规范)。随后,DMA核心将通过片上总线访问接收数据。 - 在主模式下,初始化、从机地址、方向、字节数以及START位均由软件编程设置。当所有数据均通过DMA传输时,在置位START位之前,必须先初始化DMA。 - 在从模式下,当所有数据均通过DMA传输时,必须在地址匹配事件之前初始化DMA,或者在中断子程序中清除ADDR标志位之前进行初始化。
SMBUS特性
系统管理总线(SMBus)是一种双线接口,通过该接口,各种设备可以相互通信,并与系统其他部分进行交互。它基于I2C的工作原理。SMBus提供了一条用于系统和电源管理相关任务的控制总线。
SMBus 指的是三种类型的设备:
从设备
主设备
主机设备
I2C 可以配置为主设备或从设备,也可作为主机使用。
SMBus 命令协议
该设备支持十一种命令协议。设备可选择使用其中任意一种或全部十一种命令协议进行通信。这些协议包括:快速命令、发送字节、接收字节、写入字节、写入字、读取字节、读取字,进程调用、块读取、块写入以及块写入-块读取进程调用。这些协议应由用户软件实现。
地址解析协议(ARP)
SMBus从设备地址冲突可通过动态为每个从设备分配一个唯一的新地址来解决。为了提供一种机制,以便在地址分配时隔离各设备,每个设备必须实现唯一的设备标识符(UDID)。该128位编号由软件实现。此外,该外设支持地址解析协议(ARP)。通过设置I2C_ADVANCED_SETUP寄存器中的SMDEN位,可启用SMBus设备默认地址(0b1100 001)。ARP命令应由用户软件自行实现。
仲裁功能还以从模式执行,以支持ARP。
从属字节控制
SMBus设备允许在从模式下进行ACK控制。通过设置I2C_ADVANCED_SETUP寄存器中的SBCEN位,可启用从字节控制模式。
主机通知协议
SMBus 设备通过在 I2C_ADVANCED_SETUP 寄存器中设置 SMHEN 位,支持主机通知协议。在这种情况下,主机将确认 SMBus 主机地址(0b0001 000),而 SMBus 设备充当主设备,主机则作为从设备。
SMBus警报
仅限从属设备可通过SMBALERT#向主机发出通信请求信号。主机处理该中断后,会通过警报响应地址(0b0001 100)同时访问所有SMBALERT#设备。只有将SMBALERT#拉低的设备才会确认该警报响应地址。 当配置为从设备(SMHEN=0)时,通过设置I2C_ADVANCED_SETUP寄存器中的ALERTEN位,SMBALERT#引脚会被拉低。同时,警报响应地址功能也将被启用。 当配置为主机(SMHEN=1)时,若检测到SMBALERT#引脚上的下降沿且ALERTEN=1,则I2C_ADVANCED_STATUS寄存器中的ALERT_STUS标志会被置位。如果INT_IE寄存器中的ERR_INE_IE位已设置,将产生中断。而当ALERTEN=0时,即使外部SMBALERT#引脚处于低电平,SMBALERT线仍会被视为高电平。
包错误检测(PEC)
通过在每个消息传输的末尾附加一个包错误代码(PEC)来实现包错误检查。 数据包错误校验(PCE)的计算需使用CRC-8多项式对所有消息字节(除ACK、NACK、START、STOP及重复START位外)进行运算,且必须按照接收位的顺序执行。SMBus设备通过在I2C_ADVANCED_SETUP寄存器中设置PECEN位来支持PCE功能。当设备需要发送或接收PCE时,需启用I2C_ADVANCED_SETUP寄存器中的PECIRQ位。I2C_ADVANCED_STATUS寄存器中的PECBYTE字段用于存储PCE计算结果。
超时
SMBus 规定了最低总线时钟频率 FSMB 为 10 kHz。SMBus 的最大时钟频率则被定义为 100 kHz。 SMBus 规定了 TLOW: SEXT 为从设备的时钟低电平累积扩展时间,而 SMBus 则规定 TLOW: MEXT 为主设备的时钟低电平累积扩展时间。 SMBus 定义了一个时钟低电平超时时间 TTIMEOUT,为 35 毫秒。
寄存器
寄存器偏移及简单描述列表
寄存器名 |
偏移地址 |
描述 |
|---|---|---|
I2C_RX_SIZE |
0x04 |
接收数据大小寄存器 |
I2C_RX_CFG |
0x08 |
接收配置寄存器 |
I2C_TX_SIZE |
0x10 |
发送数据大小寄存器 |
I2C_TX_CFG |
0x14 |
发送配置寄存器 |
STATUS |
0x24 |
状态寄存器 |
I2C_TIMING |
0x28 |
时序控制寄存器 |
I2C_SETUP |
0x2C |
设置寄存器 |
TXDATA |
0x30 |
发送数据寄存器 |
RXDATA |
0x34 |
接收数据寄存器 |
INT_IE |
0x38 |
中断使能寄存器 |
I2C_SLAVE_ADDRESS1 |
0x3C |
从机地址1寄存器 |
I2C_SLAVE_ADDRESS2 |
0x44 |
从机地址2寄存器 |
I2C_TIME_OUT |
0x48 |
超时控制寄存器 |
DMA_RX_DATASIZE |
0x64 |
DMA接收数据量寄存器 |
DMA_TX_DATASIZE |
0x68 |
DMA发送数据量寄存器 |
TXFIFO_WM_CNT |
0x7C |
发送FIFO水位计数寄存器 |
RXFIFO_WM_CNT |
0x80 |
接收FIFO水位计数寄存器 |
DEBUG |
0x98 |
调试寄存器 |
IP_VERSION |
0x9C |
IP版本寄存器 |
CFG_START_SETUP_TIME |
0xA0 |
START条件建立时间配置寄存器 |
CFG_START_HOLD_TIME |
0xA4 |
START条件保持时间配置寄存器 |
CFG_SDA_SETUP_TIME |
0xA8 |
SDA数据建立时间配置寄存器 |
CFG_SDA_HOLD_TIME |
0xAC |
SDA数据保持时间配置寄存器 |
CFG_SCL_HIGH_PERIOD |
0xB0 |
SCL高电平周期配置寄存器 |
CFG_SCL_LOW_PERIOD |
0xB4 |
SCL低电平周期配置寄存器 |
CFG_STOP_SETUP_TIME |
0xB8 |
STOP条件建立时间配置寄存器 |
CFG_BUS_FREE_TIME |
0xBC |
总线空闲时间配置寄存器 |
I2C_ADVANCED_SETUP |
0x100 |
高级设置寄存器 |
I2C_ADVANCED_STATUS |
0x104 |
高级状态寄存器 |
寄存器详细说明
I2C_RX_SIZE
地址偏移: 0x04
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
RX_SIZE |
19:0 |
RW |
0xf_fff |
数据数量单位:字节 |
Reserved |
31:20 |
/ |
0x0 |
/ |
I2C_RX_CFG
地址偏移: 0x08
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
RX_DMA_EN |
0 |
RW |
0x0 |
|
RX_IRQ_EN |
1 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
I2C_TX_SIZE
地址偏移: 0x10
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
TX_SIZE |
19:0 |
RW |
0x0 |
数据数量单位:字节 |
Reserved |
31:20 |
/ |
0x0 |
/ |
I2C_TX_CFG
地址偏移: 0x14
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
TX_DMA_EN |
0 |
RW |
0x0 |
|
TX_IRQ_EN |
1 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
STATUS
地址偏移: 0x24
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
BUSY |
0 |
RO |
0x0 |
|
ARB_LOST |
1 |
WIC |
0x0 |
|
NACK_RECEPTION |
2 |
WIC |
0x0 |
|
EOT |
3 |
WIC |
0x0 |
|
BYTE_DONE |
4 |
RO |
0x0 |
当一个字节被发送或接收完成时,该位由硬件置位 |
TIME_OUT |
5 |
WIC |
0x0 |
当SCL线低电平持续时间超过配置值时,该位被置位 |
Reserved |
8:6 |
/ |
0x0 |
/ |
I2C_SLAVE_RECEIVE |
9 |
RO |
0x0 |
|
I2C_SLAVE_TRANSMIT |
10 |
RO |
0x0 |
|
Reserved |
11 |
/ |
0x0 |
/ |
TXFIFO_EMPTY |
12 |
RO |
0x1 |
|
TXFIFO_FULL |
13 |
RO |
0x0 |
|
Reserved |
14 |
/ |
0x0 |
/ |
RXFIFO_EMPTY |
15 |
RO |
0x1 |
|
RXFIFO_FULL |
16 |
RO |
0x0 |
|
Reserved |
24:17 |
/ |
0x0 |
/ |
TXFIFO_WM |
25 |
RO |
0x0 |
发送FIFO达到水印阈值 |
RXFIFO_WM |
26 |
RO |
0x0 |
接收FIFO达到水印阈值 |
ADDR_MATCH |
27 |
WIC |
0x0 |
从机地址匹配标志(可通过写1清除) |
BERR |
28 |
WIC |
0x0 |
总线错误(例如非法的START/STOP条件)(可通过写1清除) |
MASTER_STATE |
31:29 |
RO |
0x0 |
|
I2C_TIMING
地址偏移: 0x28
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
PRESC |
31:0 |
RW |
0x0a |
|
I2C_SETUP
地址偏移: 0x2C
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
WORK_MODE |
0 |
RW |
0x0 |
|
ENABLE |
1 |
RW |
0x0 |
|
START |
2 |
RW |
0x0 |
|
STOP |
3 |
RW |
0x0 |
|
TRANSFER_DIRECTION |
4 |
RW |
0x0 |
|
Reserved |
5 |
/ |
0x0 |
/ |
ACK |
6 |
RW |
0x1 |
|
SOFT_RESET |
7 |
WO |
0x0 |
|
TIME_OUT_ENABLE |
8 |
RW |
0x0 |
|
I2C_10BIT_ADDR_EN |
9 |
RW |
0x0 |
|
Reserved |
10 |
/ |
0x0 |
/ |
ROLE_MODE |
11 |
RW |
0x0 |
|
Reserved |
13:12 |
/ |
0x0 |
/ |
SCL_PULLUP_EN |
14 |
RW |
0x1 |
|
SDA_PULLUP_EN |
15 |
RW |
0x1 |
|
Reserved |
17:16 |
/ |
0x0 |
/ |
CFG_DNF_NUM |
21:18 |
RW |
0x0 |
|
CFG_AUTO_END |
22 |
RW |
0x0 |
|
Reserved |
23:22 |
/ |
0x0 |
/ |
TXDATA
地址偏移: 0x30
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
TX_DATA |
7:0 |
WO |
0x0 |
|
Reserved |
31:8 |
/ |
0x0 |
/ |
RXDATA
地址偏移: 0x34
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
RX_DATA |
7:0 |
RO |
0x0 |
|
Reserved |
31:8 |
/ |
0x0 |
/ |
INT_IE
地址偏移: 0x38
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
EOT_INT_IE |
0 |
RW |
0x0 |
|
ARBITRATION_LOST_INT_IE |
1 |
RW |
0x0 |
|
TXFIFO_WM_INT_IE |
2 |
RW |
0x0 |
|
RXFIFO_WM_INT_IE |
3 |
RW |
0x0 |
|
TIME_OUT_ENABLE |
4 |
RW |
0x0 |
|
ADDRESS_MATCHED_INT_IE |
5 |
RW |
0x0 |
|
NACK_RECEPTION_INT_IE |
6 |
RW |
0x0 |
|
Reserved |
7 |
/ |
0x0 |
/ |
ERR_INE_IE |
8 |
RW |
0x0 |
|
SBC_TCR_INE_IE |
9 |
RW |
0x0 |
|
PEC_BYTE_TC_INE_IE |
10 |
RW |
0x0 |
|
Reserved |
31:11 |
/ |
0x0 |
/ |
I2C_SLAVE_ADDRESS1
地址偏移: 0x3C
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SLAVE_ADDR1 |
9:0 |
RW |
0x0 |
从机地址 1(支持 7 位或 10 位)。 |
SLAVE_ADDR1_EN |
31 |
RW |
0x3FF |
|
Reserved |
30:10 |
/ |
0x0 |
/ |
I2C_SLAVE_ADDRESS2
地址偏移: 0x44
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SLAVE_ADDR2 |
9:0 |
RW |
0x0 |
从机地址 2(支持 7 位或 10 位)。 |
SLAVE_ADDR2_EN |
31 |
RW |
0x3FF |
|
Reserved |
30:10 |
/ |
0x0 |
/ |
I2C_TIME_OUT
地址偏移: 0x48
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
TIME_OUT_CNT |
15:0 |
RW |
0x0 |
|
Reserved |
31:16 |
/ |
0x0 |
/ |
DMA_RX_DATASIZE
地址偏移: 0x64
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
DMA_RX_SIZE |
1:0 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
DMA_TX_DATASIZE
地址偏移: 0x68
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
DMA_TX_SIZE |
1:0 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
TXFIFO_WM_CNT
地址偏移: 0x7C
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
TX_WM_CNT |
1:0 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
RXFIFO_WM_CNT
地址偏移: 0x80
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
RX_WM_CNT |
1:0 |
RW |
0x0 |
|
Reserved |
31:2 |
/ |
0x0 |
/ |
DEBUG
地址偏移: 0x98
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
STATUS |
14:0 |
RO |
3 |
I2C 内部信号,用于系统调试 |
Reserved |
31:15 |
/ |
0x0 |
/ |
IP_VERSION
地址偏移: 0x9C
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
IP_VER |
31:0 |
RO |
0x03000002 |
|
CFG_START_SETUP_TIME
地址偏移: 0xA0
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
START_SETUP_TIME |
31:0 |
RW |
0x32 |
|
CFG_START_HOLD_TIME
地址偏移: 0xA4
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
START_HOLD_TIME |
31:0 |
RW |
0x32 |
|
CFG_SDA_SETUP_TIME
地址偏移: 0xA8
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SDA_SETUP_TIME |
31:0 |
RW |
0x5 |
|
CFG_SDA_HOLD_TIME
地址偏移: 0xAC
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SDA_HOLD_TIME |
31:0 |
RW |
0x4 |
|
CFG_SCL_HIGH_PERIOD
地址偏移: 0xB0
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SCL_HIGH_PERIOD |
31:0 |
RW |
0x32 |
|
CFG_SCL_LOW_PERIOD
地址偏移: 0xB4
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
SCL_LOW_PERIOD |
31:0 |
RW |
0x32 |
|
CFG_STOP_SETUP_TIME
地址偏移: 0xB8
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
STOP_SETUP_TIME |
31:0 |
RW |
0x32 |
|
CFG_BUS_FREE_TIME
地址偏移: 0xBC
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
BUS_FREE_TIME |
31:0 |
RW |
0x32 |
|
I2C_ADVANCED_SETUP
地址偏移: 0x100
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
Reserved |
0 |
/ |
0x0 |
/ |
SBCEN |
1 |
RW |
0x0 |
|
PECCN |
2 |
RW |
0x0 |
|
PECIRQ |
3 |
W1S |
0X0 |
|
SMDEN |
4 |
RW |
0x0 |
|
SMHEN |
5 |
RW |
0x0 |
|
TIDLEN |
6 |
RW |
0x1 |
|
TEXTEN |
7 |
RW |
0x0 |
|
TEXT_NUM |
19:8 |
RW |
0x0 |
|
ALERTEN |
20 |
RW |
0x0 |
|
Reserved |
31:21 |
/ |
0x0 |
/ |
I2C_ADVANCED_STATUS
地址偏移: 0x104
字段 |
位域 |
属性 |
复位值 |
描述 |
|---|---|---|---|---|
PECERR |
0 |
WIC |
0x0 |
|
PECBYTE |
8:1 |
RO |
0X0 |
包校验字节请求标志。 |
ALERT_STUS |
9 |
WIC |
0x0 |
|
SBC_TCR |
10 |
WIC |
0x0 |
|
PEC_BYTE_TC |
11 |
WIC |
0x0 |
|