MMDC、RTC、I2C、SPI
Multi-Mode DDR Controller (MMDC)
时钟
- imx6ull时钟设置DDR为PFD2 400MHz(实际为396MHz)
- CBCMR[PRE_PERIPH2_CLK_SEL]
- CBCDR[PERIPH2_CLK_SEL]
- CBCDR[FABRIC_MMDC_PODF]
DDR3L
型号NT5CC256M16EP-EK
512MB
NXP DDR测试程序ddr_stress_tester
LCD
…
RTC
Secure Non-Volatile Storage(SNVS)
SNVS_HPCOMR[NPSWA_EN]
SNVS_LPCR[SRTC_ENV]
获取计数值
SNVS_SRTCMR 和 SNVS_SRTCLR
SRTC 计数器是 32 位的,不是 47 位!
SNVS_SRTCMR 的 bit14:0 这 15 位是 SRTC 计数器的高 15 位。
SNVS_SRTCLR 的 bit31:bit15 这 17 位是 SRTC 计数器的低 17 位。
I2C
I2C协议介绍
- 起始位:SCL高电平的时候,SDA下降沿
- 停止位:SCL高电平的时候,SDA上升沿
- 数据传输:SCL低电平时SDA必须稳定
应答信号:主机提供时钟,将SDA拉低表示ACK,将SDA拉高表示NOACK
I2C 写时序
- I2C 读时序
imx6ull I2C Controler
引脚复用
时钟
寄存器
- I2Cx_IFDR
IPG_CLK_ROOT时钟66MHz,如果实现100KHz的标准I2C速率,则分频系数位66Mhz / 100KHz = 660,查表可知,配置IC值为0x38或者0x15
- I2Cx_I2CR
位名称 | 功能 | 配置值 |
---|---|---|
IEN[7] | I2C enable | 1 |
IIEN[6] | I2C interrupt enable | 0 |
MSTA | Master/Slave mode select bit. | 1 |
MTX | Transmit(1)/Receive(0) mode select bit. | - |
TXAK | Transmit acknowledge enable | - |
RSTA | Generates a Repeated Start condition 1有效 | - |
- I2Cx_I2SR
位名称 | 功能 | 配置值 |
---|---|---|
ICF | Data transferring bit. 1:complete 0: progress | - |
IBB | I2C bus busy bit. 1:Busy 0:idle | - |
IAL | Arbitration lost. 0:No arbitration lost 1:Arbitration is lost | |
RXAK | Received acknowledge. 0:Ack 1:noAck | - |
- I2Cx_I2DR
SPI
SPI协议介绍
全双工,速度快(几十至上百兆)
一般情况下分为4条线,CS、SCLK、MOSI、MISO,CS拉低有效
工作模式:根据串行时钟极性(CPOL)和相位(CPHA)来配置
CPOL=0 | CPOL=1 | |
---|---|---|
CPHA=0 | 时钟空闲状态为低、第一个跳变沿采集数据 | 时钟空闲状态为高、第一个跳变沿采集数据 |
CPHA=1 | 时钟空闲状态为低、第二个跳变沿采集数据 | 时钟空闲状态为高、第二个跳变沿采集数据 |
- 时序:以CPOL=0,CPHA=1工作模式为例,见下图
Enhanced Configurable SPI (ECSPI)
时钟
pll3_sw_clk=480MHz
480 / 8 = 60Mhz
CCM_CSCDR2[ECSPI_CLK_SEL] 配置为0
ECSPI_CLK_PODF[ECSPI_CLK_SEL] 配置为0 ,1分频
寄存器
ECSPIx_RXDATA
ECSPIx_TXDATA
ECSPIx_CONREG
位名称 | 功能 | 配置值 |
---|---|---|
EN[0] | SPI Block Enable Control | 1 |
HT[1] | Hardware Trigger Enable. | 0 |
XCH[2] | SPI Exchange Bit. | 0 |
SMC[3] | Immediately starts a SPI burst when data is written in TXFIFO | 1 |
CHANNEL_MODE[4:7] | SPI CHANNEL MODE selects the mode for each SPI channel. | 1 |
POST_DIVIDER[8:11] | SPI Post Divider. | - |
PRE_DIVIDER[12:15] | SPI Pre Divider. | - |
CHANNEL_SELECT[18:19] | SPI CHANNEL SELECT bits | b00 |
BURST_LENGTH[20:31] | Burst Length.(设置8bit 一个字节) | 7 |
ECSPIx_CONFIGREG
位名称 | 功能 | 配置值 |
---|---|---|
SCLK_PHA[0:3] | SPI Clock/Data Phase Control. | 0 |
SCLK_PO[4:7] | SPI Clock Polarity Control. | 0 |
SS_CTL[8:11] | SPI SS Wave Form Select. | 0 |
SS_POL[12:15] | SPI SS Polarity Select. | 0 |
DATA_CTL[16:19] | Controls inactive state of the data line for each SPI channel. | 0 |
SCLK_CTL[20:23] | Controls the inactive state of SCLK for each SPI channel. | 0 |
ECSPIx_STATREG
位名称 | 功能 | 配置值 |
---|---|---|
TE[0] | TXFIFO Empty. | - |
RR[3] | RXFIFO Ready. | - |
ECSPIx_PERIODREG
位名称 | 功能 | 配置值 |
---|---|---|
SAMPLE_PERIOD[0:14] | Sample Period Control.Control the number of wait states | 0x2000 |
CSRC[15] | Clock Source Control. | 0 |
CSD_CTL[16:21] | 片选延迟 | - |
各个协议中MSB、LSB传输顺序
总线类型 | 默认数据传输顺序 |
---|---|
UART | LSB 优先(低位先传) |
SPI | 可配置(常见 MSB 优先) |
I²C | MSB 优先(高位先传) |