MMDC、RTC、I2C、SPI
Multi-Mode DDR Controller (MMDC)
时钟
- imx6ull时钟设置DDR为PFD2 400MHz(实际为396MHz)
/image-20250228225826030.png)
- CBCMR[PRE_PERIPH2_CLK_SEL]
/image-20250228230621874.png)
- CBCDR[PERIPH2_CLK_SEL]
/image-20250228230800554.png)
- CBCDR[FABRIC_MMDC_PODF]
/image-20250228231143317.png)
DDR3L
型号NT5CC256M16EP-EK
512MB
NXP DDR测试程序ddr_stress_tester
LCD
…
RTC
Secure Non-Volatile Storage(SNVS)
SNVS_HPCOMR[NPSWA_EN]
/image-20250301133928537.png)
SNVS_LPCR[SRTC_ENV]
/image-20250301134508865.png)
获取计数值
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下降沿
/image-20250301144810634.png)
- 停止位:SCL高电平的时候,SDA上升沿
/image-20250301144958490.png)
- 数据传输:SCL低电平时SDA必须稳定
/image-20250301145051331.png)
应答信号:主机提供时钟,将SDA拉低表示ACK,将SDA拉高表示NOACK
I2C 写时序
/image-20250301172209134.png)
- I2C 读时序
/image-20250301172223762.png)
imx6ull I2C Controler
引脚复用
/image-20250301150553968.png)
时钟
/image-20250301150718964.png)
寄存器
- I2Cx_IFDR
IPG_CLK_ROOT时钟66MHz,如果实现100KHz的标准I2C速率,则分频系数位66Mhz / 100KHz = 660,查表可知,配置IC值为0x38或者0x15
/image-20250301152103670.png)
- I2Cx_I2CR
/image-20250301152313271.png)
| 位名称 | 功能 | 配置值 |
|---|---|---|
| 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
/image-20250301153035812.png)
| 位名称 | 功能 | 配置值 |
|---|---|---|
| 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
/image-20250301153529292.png)
SPI
SPI协议介绍
全双工,速度快(几十至上百兆)
一般情况下分为4条线,CS、SCLK、MOSI、MISO,CS拉低有效
工作模式:根据串行时钟极性(CPOL)和相位(CPHA)来配置
| CPOL=0 | CPOL=1 | |
|---|---|---|
| CPHA=0 | 时钟空闲状态为低、第一个跳变沿采集数据 | 时钟空闲状态为高、第一个跳变沿采集数据 |
| CPHA=1 | 时钟空闲状态为低、第二个跳变沿采集数据 | 时钟空闲状态为高、第二个跳变沿采集数据 |
/image-20250302115338017.png)
- 时序:以CPOL=0,CPHA=1工作模式为例,见下图
/image-20250302115655548.png)
Enhanced Configurable SPI (ECSPI)
时钟
/image-20250302134411147.png)
/image-20250302134833548.png)
pll3_sw_clk=480MHz
480 / 8 = 60Mhz
CCM_CSCDR2[ECSPI_CLK_SEL] 配置为0
/image-20250302135020795.png)
ECSPI_CLK_PODF[ECSPI_CLK_SEL] 配置为0 ,1分频
/image-20250302135311246.png)
寄存器
ECSPIx_RXDATA
/image-20250302130932530.png)
ECSPIx_TXDATA
/image-20250302131019255.png)
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 |
/image-20250302131055092.png)
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 |
/image-20250302132046581.png)
ECSPIx_STATREG
| 位名称 | 功能 | 配置值 |
|---|---|---|
| TE[0] | TXFIFO Empty. | - |
| RR[3] | RXFIFO Ready. | - |
/image-20250302133030343.png)
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] | 片选延迟 | - |
/image-20250302133753353.png)
各个协议中MSB、LSB传输顺序
| 总线类型 | 默认数据传输顺序 |
|---|---|
| UART | LSB 优先(低位先传) |
| SPI | 可配置(常见 MSB 优先) |
| I²C | MSB 优先(高位先传) |
