S5P6818_基础篇(1)soc了解

1 产品概述

1.1 介绍

S5P6818是一款基于64位RISC处理器的系统级芯片(SoC),适用于平板电脑和手机。采用28纳米低功耗工艺设计,S5P6818的特点包括:

  • Cortex-A53 八核CPU
  • 最高内存带宽
  • 全高清显示
  • 1080p 60帧视频解码和1080p 30帧视频编码硬件
  • 3D图形硬件
  • 高速接口,如eMMC4.5和USB 2.0

S5P6818使用基于ARMv8-A架构的Cortex-A53八核处理器,在AArch32执行状态下为ARMv7 32位代码提供更高性能,并在AArch64执行状态下支持64位数据和更大的虚拟地址空间。它提供6.4 GB/s的内存带宽,用于1080p视频编码和解码、3D图形显示以及全高清显示的高分辨率图像信号处理。该应用处理器支持动态虚拟地址映射,有助于软件工程师轻松充分利用内存资源。

S5P6818通过广泛的API(如OpenGL ES1.1, 2.0)提供最佳的3D图形性能。卓越的3D性能完全支持全高清显示。原生双显示特别支持主LCD显示器的全高清分辨率和通过HDMI的1080p 60帧高清电视显示,能够同时进行。独立的后处理管线使S5P6818能够实现真正的显示场景。

1.2 特点

  • 28纳米,高K金属栅极(HKMG)工艺技术
  • 537针脚FCBGA封装,0.65毫米球间距,17×17毫米体积
  • Cortex-A53八核CPU,主频 >1.4 GHz(待定)
  • 高性能3D图形加速器
  • 全高清多格式视频编解码器
  • 支持各种内存
    • LPDDR2/3,最高频率533 MHz(待定)
    • LVDDR3(低电压DDR3),DDR3最高频率800 MHz(待定)
  • 支持MLC/SLC NAND闪存,具有硬件纠错码算法(4/8/12/16/24/40/60位)
  • 支持1920×1080分辨率的双显示,TFT-LCD,LVDS,HDMI 1.4a,MIPI-DSI和CVBS输出
  • 支持3通道ITUR.BT 656并行视频接口和MIPI-CSI
  • 支持10/100/1000M位以太网MAC(RGMII接口)
  • 支持3通道SD/MMC,6通道UART,32通道DMA,4通道定时器,中断控制器,RTC
  • 支持3通道I2S,SPDIF接收/发送,3通道I2C,3通道SPI,3通道PWM,1通道PPM和GPIO
  • 支持8通道12位ADC,1通道10位DAC用于CVBS
  • 支持MPEG-TS串行/并行接口和MPEG-TS硬件解析器
  • 支持1通道USB 2.0主机,1通道USB 2.0 OTG,1通道USB HSIC主机
  • 支持安全功能(AES,DES/TDES,SHA-1,MD5和伪随机数生成器)和安全JTAG
  • 支持ARM TrustZone技术
  • 支持各种电源模式(正常模式,睡眠模式,停止模式)
  • 支持各种启动模式,包括NAND(具有ECC检测和校正),SPI闪存/EEPROM,NOR,SD(eMMC),USB和UART

1.3 模块图

1.4 简要功能规格

1.4.1 CPU

  • Cortex-A53 八核,主频 >1.4 GHz
  • L1 缓存
    • 32 KB I-Cache, 32 KB D-Cache
  • L2 缓存
    • 1 MB 共享缓存
  • 协处理器
    • VFP(向量浮点处理器),Neon处理器

1.4.2 时钟与电源管理

  • 4个扩展频谱PLL
  • 外部晶体:24 MHz(用于PLL),32.768 kHz(用于RTC)
  • 支持多种电源模式
    • 正常、空闲、停止
    • 睡眠模式(Suspend to RAM)

1.4.3 DMA

  • 32通道DMA
  • 操作模式
    • 内存到内存传输
    • 内存到IO传输,IO到内存传输

1.4.4 中断控制器

  • 向量中断控制器
  • 支持128通道中断源
  • 支持以下功能
    • 固定硬件中断优先级
    • 可编程中断优先级
    • 硬件中断优先级屏蔽
    • 可编程中断优先级屏蔽
    • IRQ和FIQ生成
    • 软件中断生成
    • 测试寄存器
    • 原始中断状态
    • 中断请求状态

1.4.5 计时器与看门狗计时器

  • 4通道计时器与看门狗计时器
  • 带中断请求的正常间隔计时器模式
  • 当计时器计数值达到0(超时)时,激活内部复位信号
  • 电平触发中断机制

1.4.6 实时时钟(RTC)

  • 32位计数器
  • 支持报警中断

1.4.7 内存控制器

  • 系统内存控制器
    • 支持LPDDR2/LPDDR3/LVDDR3(低电压DDR3)/DDR3 SDRAM,容量最高达2 GB
    • 支持1.2 V至1.5 V电源
    • 最大操作频率:800 MHz(DDR3,LVDDR3),533 MHz(LPDDR2,LPDDR3)
    • 数据总线宽度:32位
  • 静态内存控制器
    • 多路复用地址:最多24位
    • 支持SRAM、ROM和NAND闪存
    • 突发读/写
  • NAND闪存控制器
    • 支持SLC/MLC NAND闪存
    • 支持SLC NAND启动
    • 硬件纠错码算法
      • 4/8/12/16/24/40/60位BCH错误校正

1.4.8 GPIO控制器

  • 各种GPIO中断模式
    • 上升沿、下降沿、高电平、低电平检测
  • 独立中断生成

1.4.9 以太网MAC控制器

  • 标准符合性
    • IEEE 802.3az-2010,节能以太网(EEE)
    • HP/Marvell的RGMII规范版本2.6
  • MAC支持以下功能
    • 10、100和1000 Mbps数据传输速率,以下PHY接口:
      • RGMII接口与外部千兆PHY通信
    • 全双工操作:
      • IEEE 802.3x流量控制,流量控制输入解除时自动传输零量暂停帧
      • 可选的接收到的暂停帧转发到用户应用程序
    • 半双工操作:
      • 支持CSMA/CD协议
      • 支持使用反压的流量控制
      • 在1000 Mbps半双工操作中支持帧突发和帧扩展
    • 发送路径中的前导码和帧开始数据(SFD)插入
    • 接收路径中的前导码和SFD删除
    • 自动生成的CRC和填充字节,按帧控制
    • 接收帧的自动填充字节和CRC剥离选项
    • 灵活的地址过滤模式,如:
      • 最多31个附加的48位完美(DA)地址过滤器,每个字节的掩码
      • 最多96个附加的48位完美(DA)地址过滤器,可以分32和64个块选择
      • 最多31个48位SA地址比较检查,每个字节的掩码
      • 64位、128位或256位哈希过滤器(可选)用于多播和单播(DA)地址
      • 通过所有多播地址帧的选项
      • 混杂模式,用于网络监控时通过所有帧而不进行过滤
      • 按状态报告通过所有传入数据包(按过滤器)
    • 可编程帧长度,支持标准或巨型以太网帧,最大支持16 KB大小
    • 可编程帧间隔(IFG)(40-96位时间,以8位为步长)
    • 减小前导码大小的帧传输选项
    • 独立的32位发送和接收数据包状态
    • 接收帧的IEEE 802.1Q VLAN标签检测
    • 额外的帧过滤:
      • 基于VLAN标签的:完美匹配和基于哈希(可选)过滤
      • 基于第3层和第4层:TCP或UDP通过IPv4或IPv6
    • 应用程序的单独传输、接收和控制接口
    • MDIO主接口(可选)用于PHY设备配置和管理
    • 标准IEEE 802.3az-2010节能以太网
    • 在传输帧中,通过帧控制实现CRC替换、源地址字段插入或替换、以及VLAN插入、替换和删除
    • 可编程接收路径的看门狗超时限制

1.4.10 SD/MMC控制器

  • 3个独立的SD/MMC控制器和端口
  • 安全数字存储(SD存储器-版本3.0)
  • 安全数字I/O(SDIO-版本3.0)
  • 消费电子高级传输架构(CE-ATA-版本1.1)
  • 多媒体卡(MMC-版本4.41,eMMC 4.5)
  • 支持MMC4.41的功能
  • 支持eMMC4.5的功能
  • 支持8位DDR模式,频率最高可达50 MHz
  • 支持PIO和DMA模式的数据传输
  • 支持1/4位数据总线宽度
    • 将SPI信号覆盖到SSP/SPI控制器的相同GPIO

1.4.11 PPM

  • 脉冲周期测量用于红外遥控接收器

1.4.12 PWM

  • 3通道PWM控制器
  • 五个32位计时器
  • 两个8位时钟预分频器,为PCLK提供第一层分频,五个时钟分频器和多路复用器,为预分频器时钟提供第二层分频,两个外部时钟
  • 每个PWM通道的可编程时钟选择逻辑
  • 四个独立的PWM通道,具有可编程的占空比控制和极性
  • 静态配置:PWM停止
  • 动态配置:PWM运行
  • 支持自动重装模式和单次脉冲模式
  • 支持两个外部输入启动PWM
  • 两个PWM输出的死区生成器
  • 支持DMA传输
  • 可选的脉冲或电平中断生成
  • PWM有两种操作模式:
    • 自动重装模式
      • 基于编程的占空比和极性,连续生成PWM脉冲
    • 单次脉冲模式
      • 基于编程的占空比和极性,只生成一个PWM脉冲

1.4.13 ADC

  • 8通道模拟输入端口
  • 支持以下功能
    • 分辨率:12位
    • 转换率:1 MSPS
    • 功耗
      • 正常操作模式下,典型功耗1.0 mW(Fs = 1 MSPS)
      • 断电模式下,典型功耗0.005 mW
    • 输入范围:0到AVDD18
    • 输入频率:最高可达100 kHz

1.4.14 DAC

  • 1通道10位电流输出DAC,用于CVBS输出
  • 最大更新率54 MHz
  • 内部电压参考

1.4.15 I2C

  • 3通道I2C总线控制器
  • 总线上连接的每个设备通过唯一地址由软件可寻址,并且始终存在简单的主/从关系;主设备可以作为主发送器或主接收器操作
  • 在标准模式下,串行、8位定向、双向数据传输速度最高可达100 kbit/s,在快速模式下,最高可达400 kbit/s
  • 可以连接到同一总线的IC数量仅受最大总线电容400 pF的限制
  • 不支持重复启动和提前终止功能
  • 不支持高速模式、组合格式、10位地址

1.4.16 SPI/SSP

  • 3通道SPI控制器
  • 主设备或从设备操作
  • 可编程时钟比特率和预分频器
  • 分开的传输和接收先入先出内存缓冲区,16位宽,8位深
  • 可编程的接口操作选择:SPI、Microwire或TI同步串行
  • SPI协议、SSP协议、Microwire协议
  • DMA请求服务传输和接收FIFO
  • 通知系统接收FIFO溢出
  • 在空闲期后接收FIFO中有数据时通知系统
  • 只支持DMA突发长度4
  • 最大SSP CLKGEN频率为100 MHz
  • SSP接收超时时间:64周期的SSP CLKGEN时钟
  • 最大操作频率
    • 主模式:50 MHz(接收数据为20 MHz)
    • 从模式:8 MHz

1.4.17 MPEG-TS

  • 支持并行MPEG-TS接口
  • 支持硬件MPEG-TS解析器用于Set-top和IPTV

1.4.18 UART及ISO7816 SIM卡接口

  • 6通道UART控制器
  • 可编程使用UART或IrDA SIR输入/输出
  • 独立的32×8发送和32×12接收FIFO缓冲区,减少CPU中断
  • 可编程FIFO禁用,深度为1字节
  • 可编程波特率发生器,使参考时钟的分频范围为(1×16)到(65535×16),生成内部×16时钟。除数可以是分数,使您可以使用频率大于3.6864 MHz的任何时钟作为参考时钟
  • 标准异步通信位(起始位、停止位和奇偶校验位),在传输前添加,在接收时移除
  • 传输FIFO、接收FIFO、接收超时、调制解调器状态和错误条件中断的独立屏蔽
  • 支持直接内存访问(DMA)
  • 错误起始位检测
  • 线路中断生成和检测
  • 支持调制解调器控制功能CTS、DCD、DSR、RTS、DTR和RI
  • 可编程硬件流控制
  • 完全可编程的串行接口特性:
    • 数据位数可以是5、6、7或8位
    • 奇偶校验位生成和检测可以是偶数、奇数、粘性或无校验
    • 生成1或2个停止位
    • 波特率生成,最高为UARTCLK/16
  • IrDA SIR ENDEC模块提供:
    • 可编程使用IrDA SIR或UART输入/输出
    • 支持高达115200 bps半双工数据率的IrDA SIR ENDEC功能
    • 支持正常的3/16和低功耗(1.41-2.23 μs)位持续时间
    • 可编程分频UARTCLK参考时钟,生成适合低功耗IrDA模式的位持续时间
    • 识别寄存器,可用于操作系统自动配置

1.4.19 USB

  • 1通道USB 2.0主机和1通道USB2.0 HSIC主机
    • 完全符合通用串行总线规范,修订版1.1,通用串行总线增强型主控制器接口规范,修订版2.0,以及USB开放主控制器接口规范,版本1.0a。控制器通过EHCI主控制器支持高速、480 Mbps传输(比USB 1.1全速模式快40倍),以及通过一个或多个集成的OHCI主控制器支持全速和低速传输
    • 在USB 2.0物理接口,控制器提供以下功能:
      • UTMI:UTMI+ 3级,修订版1.0
      • 高速芯片间(HSIC),版本1.0
    • 支持ping和分离事务
    • UTMI/UTMI+ PHY接口时钟支持30 MHz操作,适用于16位接口或60 MHz操作,适用于8位接口
    • 使用绑带引脚选择每个端口的UTMI+或HSIC接口。在异构模式下,只支持8位接口(60 MHz)
  • 1通道USB 2.0 OTG控制器
    • 支持设备和主机功能,完全符合USB 2.0规范补充,修订版1.3a和修订版2.0。也可以配置为仅主机或仅设备控制器,完全符合USB 2.0规范
    • 符合USB 2.0规范补充(修订版1.3)
    • 符合USB 2.0规范补充(修订版2.0)
    • 软件可配置为OTG1.3和OTG2.0操作模式
    • 支持以下速度:
      • 高速(HS,480 Mbps)
      • 全速(FS,12 Mbps)
      • 低速(LS,1.5 Mbps)
    • 提供多种低功耗操作选项
    • 多种DMA/非DMA模式访问支持
    • 多种MAC-PHY接口支持
    • 支持16个双向端点,包括控制端点0
    • 支持会话请求协议(SRP)
    • 支持主机协商协议(HNP)
    • 支持多达16个主机通道。在主机模式下,当要支持的设备端点数量超过主机通道数量时,软件可以重新编程通道,以支持多达127个设备,每个设备有32个端点(IN + OUT),最大支持4,064个端点
    • 包含自动ping功能

1.4.20 I2S

  • 3通道I2S控制器用于5.1声道音频输出
  • 16位/24位主设备和从设备模式
  • 支持多种接口模式
    • I2S、左对齐、右对齐、DSP模式
  • 支持TDM模式用于数字MIC接口
  • 支持SPDIF接收/发送
  • 1通道AC97
  • 独立的立体声PCM输入、立体声PCM输出、单声道MIC输入通道
  • 基于DMA操作和中断操作
  • 所有通道仅支持16位样本
  • 变采样率AC97编解码器接口(48 kHz及以下)
  • 每个通道的16位、16个条目FIFO
  • 仅支持主要编解码器

1.4.22 SPDIF发送,接收

  • SPDIF发送
    • 支持线性PCM,最高24位每样本
    • 支持非线性PCM格式,如AC3、MPEG1和MPEG2
    • 2×24位缓冲区,交替填充数据
  • SPDIF接收
    • 串行、单向、自时钟接口
    • 单线单信号接口
    • 由于极性独立,易于工作

1.4.23 PDM

  • 支持用1个数据引脚接收2声道音频数据
  • 1个输出时钟引脚
  • 2个数据引脚(总共可接受4个声道)
  • 固定输出时钟频率
  • 支持选择数据捕获的时序
  • 支持DMA接口
  • 支持用户配置的系数(巴特沃斯低通滤波器)

1.4.24 显示控制器

  • 支持双显示
  • 支持3层、伽马校正和颜色控制(亮度、对比度、色调和饱和度)
  • 支持多种像素格式
    • RGB/BGR 444、555、565、888,带或不带Alpha通道
  • 分辨率
    • 最高1920×1080 @60 Hz
  • 支持CVBS输出
  • 支持多种LCD
    • I80接口、RGB、串行RGB、LVDS输出
    • 支持MIPI-DSI 4数据通道
    • HDMI 1.4a,HDCP 1.4符合
    • 支持视频格式:
      • 480p/480i @59.94 Hz/60 Hz, 576p/576i@50 Hz
      • 720p/720i @50 Hz/59.94 Hz/60 Hz
      • 1080p/1080i @50 Hz/59.94 Hz/60 Hz
      • 主要3D视频格式
      • 其他各种格式,像素时钟最高148 MHz
    • 支持颜色格式:4:4:4 RGB/YCbCr,4:2:2 YCbCr
    • 像素重复:最高x4
    • 支持每颜色位数:8位、10位、12位(注:不支持16位)
    • 专用块用于CEC功能
    • 支持:线性PCM、非线性PCM和高比特率音频格式(音频样本包和HBR包用于音频传输)
    • 集成HDCP加密引擎,用于视频/音频内容保护(认证过程由软件控制,而非硬件)
    • 专用CEC模块(分离用于电源/时钟域分离)
    • 音频输入的SPDIF接口和I2S接口
    • 支持HPD的电平触发中断和SFR
    • 支持外部HDCP密钥管理的AES密钥解密功能
  • LVDS接口
    • 输出时钟范围:30M至160 MHz
    • 每个LVDS通道上最高支持35:7数据通道压缩,速率630 Mbps
    • 低功耗模式
    • 最高393.75 MB/s带宽
    • 最大分辨率:1920×1080 @60 fps
    • 下降时钟边缘数据触发
    • 窄总线减少了电缆尺寸和成本
    • PLL不需要外部组件
    • 6个LVDS输出通道(5个数据通道,1个时钟通道)
  • MIPI-DSI
    • 符合MIPI DSI标准规范V1.01r11
      • 最大分辨率范围到WUXGA(1920×1200)
      • 支持1、2、3或4数据通道
      • 支持像素格式:16-bpp、18-bpp打包、18-bpp松散打包(3字节格式)、24-bpp
    • 接口
      • 符合MIPI D-PHY规范的协议到物理接口(PPI),速率1.5 Gbps
      • 支持显示控制器的RGB接口,用于视频图像输入
      • 支持显示控制器的I80接口,用于命令模式图像输入
      • 支持PLL的PMS控制接口,用于配置字节时钟频率
      • 支持预分频器从字节时钟生成逃逸时钟

1.4.25 视频后处理器

  • 3D去隔行控制器
  • 视频精细缩放器:多相滤波器

1.4.26 视频输入处理器

  • 支持最高8192×8192分辨率
  • 同时接收3通道摄像头输入
  • 支持3个8位BT656、601格式
  • 支持MIPI-CSI
    • 通用特性
      • 支持主要和次要图像格式
        • YUV420、YUV420(Legacy)、YUV420(CSPS)、YUV422,8位和10位
        • RGB565、RGB666、RGB888
        • RAW6、RAW7、RAW8、RAW10、RAW12、RAW14
        • 压缩格式:10-6-10、10-7-10、10-8-10
        • 所有用户定义的字节为基础的数据包
      • 支持嵌入式字节为基础的非图像数据包和通用短包
      • 兼容MIPI D-PHY规范中的PPI(协议到物理接口)
      • 支持4通道虚拟通道或数据交错
    • 标准符合性
      • 符合MIPI CSI2标准规范V1.01r06
      • D-PHY标准规范V1.0

1.4.27 多格式MPEG编解码器

  • 解码器
    • H.264
      • BP、MP、HP配置文件,4.2级,最高1920×1080,50 Mbps
    • MPEG4 ASP
      • 高级简单配置文件,最高1920×1080,40 Mbps
    • H.263
      • 3级配置文件,最高1920×1080,20 Mbps
    • VC-1
      • SP/MP/AP配置文件,3级,最高1920×1080,2048×1024,45 Mbps
    • MPEG-1/2
      • 主要配置文件,高级级别,最高1920×1080,80 Mbps
    • VP8
      • 最高1920×1080,20 Mbps
    • Theora
      • 最高1280×720,20 Mbps
    • AVS
      • Jizhun配置文件,6.2级,最高1920×1080,40 Mbps
    • RV8/9/10
      • 最高1920×1080,40 Mbps
    • MJPEG
      • 基线配置文件,最高8192×8192
  • 编码器
    • H.264
      • 基线配置文件,4.0级,最高1080p,20 Mbps
    • MPEG4
      • 简单配置文件,5.6级,最高1080p,20 Mbps
    • H.263
      • 3级配置文件,70级,最高1080p,20 Mbps
    • MJPEG
      • 基线配置文件,最高8192×8192

1.4.28 3D图形控制器

  • 支持OpenGL ES 1.0和2.0
  • 支持OpenVG 1.1
  • GPU是2D和3D图形系统的硬件加速器
  • GPU由以下部分组成:
    • 四个像素处理器(PPs)
    • 一个几何处理器(GP)
    • 一个2级缓存控制器(L2)
    • 每个GP和PP包含一个内存管理单元(MMU)
    • 一个电源管理单元(PMU)
  • 像素处理器特性
    • 每个像素处理器使用不同的流水线,支持更快的周转
    • 可编程片段着色器
    • Alpha混合
    • 完全支持非幂次方2的纹理
    • 立方映射
    • 快速动态分支
    • 快速三角函数,包括反正切
    • 完整的浮点运算
    • 帧缓冲区混合带目标Alpha
    • 索引纹理采样器
    • 线、四边形、三角形和点精灵
    • 程序长度无限制
    • 透视正确纹理
    • 点采样、双线性和三线性过滤
    • 可编程的mipmap层次细节偏置和替换
    • 模板缓冲区,8位
    • 双面模板
    • 无限依赖纹理读取
    • 4级分层Z和模板操作
    • 最高512倍全屏抗锯齿(FSAA),4倍多重采样乘以128倍超采样
    • 每纹素4位压缩纹理格式
  • 几何处理器特性
    • 可编程顶点着色器
    • 灵活的输入和输出格式
    • 自主操作平铺列表生成
    • 索引和非索引几何输入
    • 点、线、三角形和四边形的原语构建
  • 2级缓存控制器特性
    • 尺寸为64 KB
    • 4路组相连
    • 支持最多32个未完成的AXI事务
    • 实现标准的伪LRU算法
    • 缓存行和行填充突发大小为64字节
    • 支持8到64字节非缓存读取突发和写入突发
    • 128位接口到内存子系统
    • 支持命中下失和失下失,唯一限制是AXI排序规则
  • MMU特性
    • 通过总线基础设施访问控制寄存器,以配置内存系统
    • 每个处理器都有自己的MMU,以控制和翻译GPU发起的内存访问
  • PMU特性
    • 可编程电源管理
    • 分别为每个GP、PP和2级缓存控制器供电和断电
    • 控制每个设备的时钟、隔离和电源
    • 在所有请求的设备上电时提供中断

1.4.29 安全IP

  • 片上安全启动ROM/RAM
  • ARM TrustZone:TZPC、TZASC和TZMA
  • 硬件加密加速器
    • DES/TDES、AES、SHA-1、MD5和PRNG
  • 支持安全JTAG

1.4.30 独特芯片ID

  • 支持128位独特芯片ID寄存器

1.4.31 操作条件

  • 工作电压
    • 核心:0.95至1.1 V
    • CPU:0.95 V至1.35 V
    • DDR内存:1.2至1.5 V
    • I/O:3.3 V
  • 工作温度
    • 环境温度:-25°C至85°C
    • 芯片温度:-25°C至85°C

1.4.32 封装

  • 537针脚FCBGA封装
  • 球间距:0.65毫米
  • 体积:17×17毫米

2 机械尺寸和IO功能描述

详情见原文。

3 系统启动

3.1 概述

S5P6818支持多种系统启动模式。启动模式由系统配置在启动复位关闭时确定。

  • 外部静态内存启动
  • 内部ROM启动
    • 带错误校正的NAND启动
    • SD/MMC/SDFS(SD FAT文件系统)启动
    • SPI串行EEPROM启动
    • UART启动
    • USB启动

3.2 功能描述

3.2.1 系统配置

Pins

RST_CFG

Static Memory

SDFS (TBD)

UART

Serial Flash

SD MMC

USB Device

Nand

SD0

RST_CFG0

0

1

1

0

1

0

1

SD1

RST_CFG1

0

0

1

0

0

1

1

SD2

RST_CFG2

0

0

0

1

1

1

1

SD3

RST_CFG3

Port_Num0

Port_Num0

Port_Num0

Port_Num0

SELCS

SD4

RST_CFG4

ADDRWIDTH0

0

SD5

RST_CFG5

ADDRWIDTH1

0

SD6

RST_CFG6

BAUD

SPEED

SD7

RST_CFG7

DISD0

RST_CFG8

LATADDR

LATADDR

LATADDR

LATADDR

LATADDR

LATADDR

LATADDR

DISD1

RST_CFG9

BUSWIDTH

0

0

0

0

0

0

DISD2

RST_CFG10

NANDPAGE1

DISD3

RST_CFG11

NANDTYPE0

DISD4

RST_CFG12

NANDTYPE1

DISD5

RST_CFG13

NANDPAGE0

DISD6

RST_CFG14

DECRYPT

DECRYPT

DECRYPT

DECRYPT

DECRYPT

DECRYPT

DISD7

RST_CFG15

I-Cache

I-Cache             

I-Cache

I-Cache

I-Cache

I-Cache

VID1[0]

RST_CFG16

Next Try

Next Try

Next Try

Next Try

VID1[1]

RST_CFG17

Vbus_Level

VID1[2]

RST_CFG18

Next Port

Next Port

Next Port

Next Port

VID1[3]

RST_CFG19

Port_Num1

Port_Num1

Port_Num1

Port_Num1

VID1[4]

RST_CFG20

USE_FS

USE_FS

USE_FS

VID1[5]

RST_CFG21

VID1[6]

RST_CFG22

VID1[7]

RST_CFG23

CORE_VOL TAGE

CORE_VOLTAG E

CORE_VOLTAG E

CORE_VOLTAG E

CORE_VOLT AGE

CORE_VOLTA GE

3.3 外部静态内存启动

3.4 内部ROM启动

芯片内置了20 KB的ROM。通过将系统配置中的CfgBOOTMODE设置为“0到2”,可以将内部ROM地址设置为第0地址。复位后,CPU从内部ROM的第0地址获取指令并执行。内部ROM包含支持各种启动方法的代码。此ROM代码通过读取各种介质的用户启动代码并将其加载到特定内存中来执行用户启动代码。这种启动方法定义为内部ROM启动(从现在起称为iROMBOOT)。

iROMBOOT使用内部SRAM存储堆栈或数据。因此,在执行iROMBOOT之后,内部SRAM的内容可能会发生变化。

3.4.1 特点

  • 支持五种启动模式:SPI串行EEPROM启动、UART启动、USB启动、SDHC启动和带错误校正的NAND启动。
  • 支持CPU异常向量重定向,以便在不使用MMU的操作系统中使用。
  • 支持快速电源控制:将VDDPWRON和VDDPWRON_DDR设置为高电平。

3.4.2 内部ROM启动的系统配置

iROMBOOT支持五种启动模式,如USB启动、UART启动、SPI串行EEPROM启动、SDHC启动和带错误校正的NAND启动。每种启动模式通过参考SD[15:0]的复位状态来支持各种启动方法。下表显示了每种启动模式的系统配置。

Pins

nexell / ys.kim atiRO2M0BO1OT5.02.12

SDFS

UART

SPI Serial Flash

SDMMC

USB Device

NANDBOOT

with Error Correction

RST_CFG[2:0]

BOOTMODE=1

BOOTMODE=3

BOOTMODE=4

BOOTMODE=5

BOOTMODE=6

BOOTMODE=7

RST_CFG[12:11]

Don't care

NANDTYPE[1:0]

RST_CFG[13, 10]

PAGESIZE[1:0]

RST_CFG[3]

SELCS

RST_CFG[17]

Don't care

OTG Session Check

Don't care

RST_CFG[6]

Don't care

Baud Rate

Speed

Should be Zero

Don't care

RST_CFG[5:4]

Don't care

ADDRWIDTH[1:0]

Don't care

RST_CFG[19, 3]

Port Number

RST_CFG[14]

DECRYPT

RST_CFG[15]

I-CACHE

RST_CFG[8]

LATADDR

RST_CFG[9]

Should be Zero (BUSWIDTH)

3.4.3 SPI 启动

iROMBOOT可以从SPI闪存ROM加载用户启动代码到内存并执行该代码,这种启动方法称为SPI启动(SPIBOOT)。

3.4.3.1 特点
  • 支持地址步进2、3、4
  • 启动速度为16 MHz
  • 支持SPI端口0、1、2
  • 最大启动大小为56 KB
  • 检查启动签名和启动镜像CRC
3.4.3.2 操作

3.4.4 UART 启动

iROMBOOT可以通过UART将用户启动代码加载到内存并执行该代码,这种启动方法称为UART启动(UARTBOOT)。

3.4.4.1 特点
  • 支持19200 bps、115200 bps。
  • 支持UART端口0、1。
  • 检查启动签名和启动镜像CRC。
3.4.4.2 操作

3.4.5 USB 启动

iROMBOOT可以通过USB将用户启动代码加载到内存并执行该代码,这种启动方法称为USB启动(USBBOOT)。

3.4.5.1 特点
  • 支持全速或高速USB连接。
  • 使用USB批量传输。
  • 最大数据包大小为全速64字节和高速512字节。
3.4.5.2 操作

USB主机程序应通过USB设备的EP2端点使用批量传输来传输用户启动代码。最大数据包大小根据端点的USB连接速度可变。在全速连接中,USB主机程序可以以每个数据包最多64字节的速度传输数据包;在高速连接中,可以以每个数据包最多512字节的速度传输数据包。即使可以传输最大尺寸的数据包或小于最大尺寸的数据包,USB主机程序也应传输偶数大小的数据包。

USBBOOT从USB主机程序写入用户启动代码,并在接收到最大56 KB的用户启动代码后,通过将PC更改为0xFFFF0000来执行用户启动代码。

3.4.5.3 USB描述符

USB主机程序可以使用Get_Descriptor请求获取USBBOOT的描述符。表3-6显示了USBBOOT的描述符。USBBOOT有一个配置,一个接口,和两个附加端点(不包括控制端点)。然而,端点1仅为兼容性存在。因此,USBBOOT仅通过端点2接收数据。

详情见原文

3.4.6 SDHC 启动

iROMBOOT可以通过SDHC模块从SD存储卡、MMC存储卡和eMMC读取用户启动代码并将其加载到内存中执行。这种方法称为SDHC启动(SDHCBOOT)。

3.4.6.1 特点
  • 支持SD/MMC存储卡和eMMC
  • 支持高容量SD/MMC存储卡
  • 支持SD端口0、1、2
  • 在识别阶段输出400 kHz SDCLK,在数据传输阶段输出24 MHz SDCLK
3.4.6.2 操作

SDHCBOOT 使用所有 SDHC #0、1、2 模块。

SDHCBOOT 提供了根据 CFG 引脚的各种启动方法,建议参考 [通过 RST_CFG 引脚的系统配置] 了解每种方法的规范。用户启动代码应按照下表写入存储设备以使用 SDHCBOOT。

Sector

Name

Description

0

Reserved

SDHCBOOT不关心第0扇区的数据。因此,可以使用第0扇区存储MBR(主引导记录),并将用户启动代码和文件系统一起包含到一个物理分区中。

1 to 32

User Bootcode

用户制作的启动代码从第2扇区开始,大小约为56 KB。

SDHCBOOT启动过程如下:

  • 当CfgSDHCBM为“0”时,执行正常的SDMMC启动。
    • 进入空闲状态
    • SDHCBOOT识别卡的类型并初始化。
    • 卡的状态变为数据传输模式。
    • SDHCBOOT从第1扇区读取用户启动代码,并将其加载到内部SRAM中执行。

3.4.7 SDFS 启动

iROMBOOT可以使用FAT32文件系统启动。只能使用SD卡的第一个分区作为FAT文件系统,分区名称字符串必须是"FAT32"。需要两个启动文件,一个是"NXDATA.SBH",另一个是"NXDATA.SBL"。首次启动时,读取MBR并搜索分区和文件系统。如果分区存在且文件系统为FAT32,则搜索第一个启动文件"NXDATA.SBH"。找到第一个文件后,搜索下一个启动文件"NXDATA.SBL"。NXDATA.SBL的最大大小为56 KB。

  • 支持SD/MMC存储卡和eMMC
  • 支持高容量SD/MMC存储卡
  • 支持SD端口0、1、2
  • 在识别阶段输出400 kHz SDCLK,在数据传输阶段输出24 MHz SDCLK
  • 支持FAT12、FAT16、FAT32
  • 不支持FAT32的长文件名

3.4.8 带错误校正的NAND启动

iROMBOOT提供了一种启动方法,可以校正存储在NAND闪存中的用户启动代码中的任何错误。这种启动方法称为带错误校正的NAND启动(简称为NANDBOOTEC)。

3.4.8.1 特点
  • 支持每551字节最多24位错误的错误校正:用户启动代码512字节+校验39字节和每1129字节最多60位错误的错误校正:用户启动代码1024字节+校验105字节。
  • 支持512B、2 KB、4 KB、8 KB、16 KB及以上作为NAND闪存的页面大小。
  • 支持需要复位命令初始化的NAND闪存。
  • 不支持坏块管理。
3.4.8.2 操作

NANDBOOTEC可以校正存储在NAND闪存中的用户启动代码中发生的错误。每当NANDBOOTEC以512字节或1024字节为单位从NAND闪存中读取用户启动代码时,它通过MCU-S中包含的硬件BCH解码器的错误检测功能,了解数据是否存在任何错误。如果数据中存在错误,通过硬件错误校正最多可以校正24个或60个错误。

3.4.8.3 如何将用户启动代码存储到NAND闪存中

下表显示了将用户启动代码写入NAND闪存中的格式。NANDBOOTEC使用NAND闪存的主存储区,不使用其备用区。

详情见原文

3.4.9 附加信息

3.4.9.1 启动头

所有启动(除了UART启动)都会检查512字节的启动头。这个启动头假定首先从启动设备接收或加载到SRAM的地址0xFFFF0000。首先,romboot在接收到的512字节启动头的末尾检查启动签名。这个签名值必须是0x4849534E。如果不相等,romboot会尝试下一个启动。此外,所有启动都必须包含有效的三个数据:LOADSIZE、LOADADDR和LAUNCHADDR。这些数据是关于第二启动镜像的信息。启动镜像的大小和加载地址必须以16字节对齐。如果是SPI启动,Romboot会检查CRC32。CRC是关于启动代码的,除了启动头以外。

启动头格式见原文

3.4.9.2 ALIVE电源控制

iROMBOOT在复位后将VDDPWRON和VDDPWRON_DDR引脚更改为高电平状态,以支持对nVDDPWRTOGGLE按钮的快速响应。表显示了iROMBOOT执行后的ALIVE模块状态。

Function

State

Description

VDDPWRON

High

Enable Core Power

VDDPWRON_DDR

High

Enable DDR Memory Power

3.4.9.3 异常向量重定向

ARM CPU的异常处理程序应按4字节依次存在于第0地址。用户通常将跳转到用户异常处理程序的例程放置在第0地址处的异常处理程序中。然而,在iROMBOOT的情况下,由于ROM存在于第0地址,用户的异常处理程序无法设置在第0地址。使用MMU时,可以通过将任意内存映射到第0地址来处理CPU异常。然而,iROMBOOT为不使用MMU的系统提供了异常处理程序重定向功能。

iROMBOOT使用内部SRAM的最低地址的32字节作为用户异常向量表。当发生异常时,iROMBOOT中的ROM异常处理程序让PC跳转到从用户异常向量表中获取的用户异常处理程序地址。因此,通过用户将用户异常处理程序的地址设置到内部SRAM中存在的用户异常向量表(即高向量地址),即使在物理地址系统中也可以处理异常。

3.4.9.4 CRC32 错误检查

UART和SPI启动使用CRC32进行检查,如果是UART启动,则在传输有效载荷的最后添加CRC32 FCS数据,然后CRC32 FCS检查将成功。在SPI启动中,CRC32数据必须插入启动头。

3.4.9.5 使用隐藏密钥进行AES128 ECB模式数据解密

所有启动模式的数据都可以选择使用隐藏密钥通过AES128 ECB模式进行解密。启动模式DISD6可以选择是否解密数据。

3.4.9.6 启动场景

如果任何设备启动失败,所有启动最终尝试USB启动。您可以选择在USB启动之前是否尝试从所有三个SD设备启动。并且可以选择SD原始扇区启动或SD文件系统启动。

3.4.9.7 多CPU启动

在上电启动时,只有CPU 0启动,CPU 1、2、3、4、5、6、7通过复位被锁定。可以通过CPU 0选择其他CPU的启动复位向量。因此,可以选择其他CPU在romboot或SRAM启动。

4 系统控制

4.1 概述

S5P6818的时钟大致分为FCLK、HCLK、MCLK、BCLK和PCLK,分别用于ARM CPU核心、AXI总线外设和APB总线外设。此外,BCLK是S5P6818系统总线的时钟,MCLK是SDRAM内存的时钟。S5P6818的两个PLL分别称为PLL0和PLL1。2-PLL和EXTCLK用于生成上述时钟(即FCLK、HCLK、PCLK、BCLK、MCLK)。所有PLL均设计为与24MHz的X-TAL输入一起操作。

4.2 特点

  • 嵌入式4个独立运行的PLL
  • 输出频率范围
    • PLL0:40M至2.5 GHz(非抖动PLL)
    • PLL1:40M至2.5 GHz(非抖动PLL)
    • PLL2:35M至2.2 GHz(抖动PLL)
    • PLL3:35M至2.2 GHz(抖动PLL)
  • 频率通过可编程分频器(PDIV、MDIV、SDIV)进行更改
  • 为芯片中的所有模块生成时钟
  • 可以通过程序将PLL切换到掉电模式
  • 支持32.768 kHz用于电源管理
  • 各种掉电模式
  • IDLE模式和STOP模式
  • 各种唤醒源

4.3 模块图

上述图示展示了S5P6818中时钟管理器的结构图。如图所示,S5P6818具有四个PLL。S5P6818接收这些PLL的输出,并生成所有系统时钟、内存时钟和CPU时钟,其输出频率从多个PLL中选择。

4.4 时钟管理器功能描述

4.4.1 PLL(锁相环)

4.4.1.1 PMS值

从PLL结构的角度来看,上图显示了一个PLL的框图。Fin和Fout分别表示输入频率和输出频率。S5P6818具有多个PLL,可以通过使用每个PLL生成各种可编程时钟。

如果前分频器接收到24 MHz的Fin输入,它将Fin除以“P”。之后,相位频率检测器(PFD)比较Fin/P(参考时钟)和Fvco/M(反馈时钟)之间的差异。电压的幅度根据参考时钟和反馈时钟之间的比较结果的差异而变化。如果参考时钟比反馈时钟快,电压控制振荡器(VCO)的频率会根据差异增加。如果参考时钟比反馈时钟慢,VCO的频率会降低,并生成Fvco时钟。这是因为VCO的频率由电压值控制,起到加快或减慢时钟速度的作用。在此过程中,电压值由参考时钟和反馈时钟之间的差异决定。如果Fvco不是所需的时钟,通过主分频器重新生成反馈并在PFD中比较。这些步骤重复进行,直到参考时钟和反馈时钟相等。如果产生了合适的Fvco,通过后分频器的分频值生成最终的Fout时钟。最后,所需的时钟频率由p、m和s值决定。

如上所述,Fout可以通过Fin和p/m/s值来设置,指定p/m/s值的公式如下:(请注意,所有PLL0/1/2/3表示Fout。公式可能因情况而异。)

  • PLL x = (m × Fin)/(p × 2^s)
  • (x = 0,1,2,3, m = MDIV, p = PDIV, s = SDIV = 0, 1, 2, 3)
  • PLL x的MDIV和PDIV值范围如下:
    • MDIV值范围:64 ≤ MDIV ≤ 1023
    • PDIV值范围:1 ≤ PDIV ≤ 63

PDIV和MDIV值应考虑VCO值和S5P6818的稳定操作来选择。S5P6818具有多个PLL,每个PLL具有不同的默认值和工作范围。

S5P6818的基本频率如下表所示:

PLL

INITIAL FREQUENCY

RECOMMENDED FREQUENCY (Fvco)

RECOMMENDED FREQUENCY (Fout)

INITIAL PDIV/ MDIV/ SDIV VALUE

PDIV

MDIV

SDIV

PLL0

550.000000Mhz

1250 to 2500 MHz

40 to 2500 MHz

3

275

2

PLL1

147.5 MHz

1250 to 2500 MHz

40 to 2500 MHz

3

295

4

PLL2

96 MHz

40 to 2200 MHz

1100 to 2200 MHz

3

192

4

PLL3

125 MHz

40 to 2200 MHz

1100 to 2200 MHz

3

250

4

对于除CPU之外的所有模块,在更改PLL输出频率之前,应检查内存控制器的运行状态(运行/停止)。此外,在PLL更改(PLLSETREG0, PLLSETREG1)后,应将PLL更改位(PWRMODE.CHGPLL)设置为“1”。

PMSK设置指南

  • p、m、s和k分别是P[5:0]、M[8:0]、S[2:0]和K[15:0]的十进制值。
    • p = P[5:0],m = M[8:0],s = S[2:0],k = K[15:0]
  • FFVCO和FFOUT按以下公式计算。
    • FFVCO = ((m + k/65536) FFIN)/p
    • FFOUT = ((m + k/65536) FFIN)/(p × 2^s)
  • 虽然寄存器P[5:0]、M[8:0]和S[2:0]的范围是无符号整数,K[15:0]是二进制补码整数。
    • 6’b00 0001 ≤ P[5:0] ≤ 6’b11 1111,且2 MHz ≤ FFREF(FFIN/p) ≤ 30 MHz
    • 9’b0 0100 0000 ≤ M[8:0] ≤ 9’b1 1111 1111
    • 3’b000 ≤ S[2:0] ≤ 3’b101
    • 16’b1000 0000 0000 0000 ≤ K[15:0] ≤ 16’b0111 1111 1111 1111
  • 当RESETB为逻辑高时,严格禁止将P[5:0]或M[8:0]设置为全零(6’b00 0000/9’b0 0000 0000)。
  • 分频器的分频比由S[2:0]控制,具体如下表所示。
  • 严格禁止将S[2:0]设置为下表中灰色行的值。

S[2:0]

Division Ratio

000

20 = 1

001

21 = 2

010

22 = 4

011

23 = 8

100

24 = 16

101

25 = 32

110

Prohibited

111

Prohibited

4.4.1.2 SSCG_EN、SEL_PF、MFR和MRR的设置指南
  • 当SSCG_EN设置为逻辑高时,扩频模式启用。
  • sel_pf、mfr和mrr分别是SEL_PF[1:0]、MFR[7:0]和MRR[5:0]的十进制值。
    • sel_pf = SEL_PF[1:0],mfr = MFR[7:0],mrr = MRR[5:0]
  • 调制频率(MF)由以下公式确定。
    • MF = FFIN/p/mfr/25 Hz
  • 调制率(MR)由以下公式确定。
    • MR = mfr × mrr/m/26 × 100 %
  • 调制模式由sel_pf确定。
    • 00: 向下扩展
    • 01: 向上扩展
    • 1x: 中心扩展
  • 寄存器范围。
    • 8’b0000 0000 ≤ MFR[7:0] ≤ 8’b1111 1111
    • 6’b00 0001 ≤ MRR[5:0] ≤ 6’b11 1111
    • 0 ≤ mrr × mfr ≤ 512
    • 2’b00 ≤ SEL_PF[1:0] ≤ 2’b10

详情见原文

4.4.1.5 PLL掉电

S5P6818支持PLL掉电模式以最小化功耗。例如,如果所有系统时钟都由PLL0生成且不需要使用PLL1,则无需向PLL1供电。在这种情况下,S5P6818将PLL1切换到掉电模式以减少功耗。然而,PLL0不能进入掉电模式。通过向CLKMODEREG0.PLLPWDN1写入“1”可以实现PLL0掉电。

4.4.2 更改PLL值

当CPU需要更改PLL分频值时,在将PLL设置复位(PLLSETREG0, PLLSETREG1)设置为适当的值后,必须将PLL更改位(PWRMODE.CHGPLL bit)设置为1。

电源管理和时钟控制器模块在更改PLL分频值时会阻塞时钟供应,因为PLL在更改分频值时是不稳定的。在锁定时间之后,这些模块会重新供应时钟。CPU必须检查这些模块是运行还是停止,如STOP模式。

4.4.3 时钟生成器

4.4.3.1 时钟摘要

S5P6818中生成的5个时钟及每个时钟的最大频率列在下表中。最小频率不受PLL可生成的时钟频率限制。

4.4.3.2 CPU0 时钟

在上图中,显示了一个创建供给FCLKCPU0的时钟的框图,FCLKCPU0是S5P6818的主CPU。CLKMODEREG0从多个PLL中选择所需的PLL输出。使用从所选PLL创建的时钟,CLKDIV_FCLKCPU0寄存器和CLKDIV_HCLKCPU0生成供给CPU核心模块的FCLKCPU0和供给AXI总线时钟的HCLKCPU。请注意不要将HCLKCPU设置为超过最大速度。FCLKCPU和HCLKCPU的频率不能相同。

任何PLL都可以用于生成CPU时钟,但推荐使用PLL0,推荐的时钟频率如下:

4.4.3.3 系统总线时钟(核心时钟)

系统总线时钟(BCLK)用作核心时钟。系统总线时钟称为[BCLK],BCLK的一半时钟称为[PCLK]。BCLK用于所有SOC核心操作。PCLK在CPU通过I/O访问每个块寄存器时使用。因此,不应将PCLK应用于未使用的块。每个块都有PCLK启用/禁用寄存器。PCLK应用的块(请参阅各部分)。这些寄存器决定PCLK是否仅在CPU访问相应块寄存器时应用,还是始终应用。

时钟频率比例应如下:

Mode

BCLK (MHz)

PCLK (MHz)

Max operation

333

166

4.4.3.4 内存总线时钟(MCU时钟)

内存总线时钟(MCLK)用作SDRAM和MCU核心时钟。MDCLK是内存控制单元(MCU)的DLL时钟。MCLK是DDR接口时钟。MBCLK是MCU的总线时钟。MPCLK是MCU的外设总线时钟。MCLK的频率应是MBCLK频率的两倍。(BCLK与MCLK的比率为1:2)

Mode

MDCLK (MHz)

MCLK (MHz)

MBCLK (MHz)

MPCLK (MHz)

Fast

800 (NOTE)

800

400

200

Slow

800

200

100

50

4.4.3.5 GPU(图形处理单元)时钟

GPU时钟(GR3DBCLK)用作GPU核心时钟。GR3DPCLK未使用(保留)。推荐的时钟频率如下:

Mode

GR3DBCLK (MHz)

GR3DPCLK (MHz)

Max operation.

333

166 (not used)

4.4.3.6 MFC(多功能编解码器)时钟

MFC时钟(MPEGBCLK)用作多功能编解码器时钟。MPEGPCLK用作MFC单元的外设总线时钟。

推荐的时钟频率如下:

Mode

MPEGBCLK (MHz)

MPEGPCLK (MHz)

Max operation

300

150

4.5 电源管理器

4.5.1 电源管理器概述

S5P6818的电源管理器提供以下功能,以确保系统稳定运行并减少功耗。

  • 上电顺序
  • 复位生成
  • 电源管理
  • 更改PLL值

电源管理器的主要功能是控制上电顺序,使S5P6818在系统供电后保持稳定,并有效管理电源。此外,它还控制初始操作中的复位配置。

此外,该模块生成各种复位信号,例如外部复位输出(nRSTOUT)、AliveGPIO复位和软复位。

  • S5P6818提供多种掉电模式以减少系统功耗。S5P6818提供的三种电源模式如下:
    • 正常模式
    • 空闲模式(IDLE Mode)
    • 停止模式(STOP Mode)
    • 睡眠模式(SLEEP Mode)(详见“ALIVE”部分的睡眠模式)

4.5.2 电源降耗模式操作

下图显示了电源管理模块的状态图。该图示了每种电源降耗模式的进入条件以及所有唤醒条件。

  • S5P6818 状态

    • POR: 上电复位状态
    • StablePLL: 等待PLL锁定时间
    • NORMAL: 正常操作状态
    • STOP: 停止操作模式
    • StableX-tal: 等待晶体稳定振荡
    • Hold: 等待nBATF=高电平
  • 唤醒源

    • SWRST: 软件复位
    • SWRSTEN: 软件复位使能
    • ALIVEGPIOEvent: ALIVE GPIO唤醒事件
    • CPUIRQ: 来自CPU的中断(IDLE模式)
    • RTCIRQ: 来自RTC的中断
    • BAFT: 电池故障
    • VDDPWRTOGGLE: VDDPWRTOGGLE开关按钮
    • WRST: 看门狗复位
4.5.2.1 IDLE模式

在IDLE模式下,除CPU时钟外,所有模块的电源和时钟均正常供应,从而可以减少一些功耗。要进入IDLE模式,需要将PWRMODE.IDLE寄存器设置为“1”。在IDLE模式下,CPU时钟不供应,但电源正常供应,PLL正常运行。

唤醒源可以使用由中断控制器生成的所有S5P6818中断:GPIO中断、ALIVE GPIO中断、外部中断和RTC中断。唤醒源的中断应在进入IDLE模式之前启用。CPU在IDLE模式中被唤醒后立即返回到之前的状态。

4.5.2.2 STOP模式

在STOP模式下,包括ARM核心在内的所有模块都不供应时钟,因为如果不供应时钟,PLL也不会在时钟控制器中运行。然而,S5P6818在进入STOP模式之前将DRAM转换为自刷新模式以保护内存数据。与IDLE模式一样,需要将PWRMODE.STOP设置为“1”以进入STOP模式。

在STOP模式下,唤醒源有所限制。可用的唤醒源包括RTC中断、ALIVE GPIO中断等。唤醒源受到限制,因为除电源管理器和RTC模块外,不向所有其他模块供应时钟。由于RTC模块使用独立的电源和时钟,因此只有由RTC时钟生成的中断可以用作唤醒源。

与IDLE模式不同,当系统在STOP模式中被唤醒时,所有PLL都会停止运行,因此系统不能立即返回到之前的状态。因此,唤醒时间比IDLE模式长约70毫秒,以稳定内部PLL。

Power Down Mode

Power Supply

CPU Clock Supply

Other Clock Supply

SDRAM Mode

Wake Up Condition

IDLE Mode

ON

OFF

ON

NORMAL

RTC Interrupt, AliveGPIO Interrupt,

All Interrupt to Interrupt Controller, External IRQ

STOP Mode

ON

OFF

OFF

Self Refresh

RTC Interrupt, AliveGPIO Interrupt

4.5.2.3 睡眠模式1和睡眠模式2

请参阅“ALIVE”部分了解睡眠模式1和睡眠模式2的详细信息。

上图显示了进入电源降耗模式和唤醒过程的顺序。首先,唤醒源选择所需的事件(中断)并指定事件的属性。如果唤醒源是GPIO,则将设置更改为输入并执行挂起清除。此外,检测到指定的事件(中断)的状态并将软件复位使能设置为False以应对最坏情况(如果硬件未实现软件复位使能开关,则无需指定为False)。最后,系统启用相关中断(如果使用中断)并进入电源降耗模式。

在这种电源降耗模式下,S5P6818等待唤醒事件(中断)。如果发生唤醒事件(中断),S5P6818返回正常模式并在软件层面清除相关的中断挂起。

4.5.2.4 GPIO作为唤醒源

GPIO可用于所有电源降耗模式。然而,由于内部电源和时钟状态在各个电源模式下不尽相同,因此在每种电源模式下的操作状态会有所不同。

如上图所示(唤醒模块图),电源管理器使用不同的时钟。由于RTC时钟始终供应给电源管理器模块,因此PADs(GPIO引脚)可以用作唤醒源。

在电源降耗模式下唤醒过程的描述如下:

  • IDLE模式下的唤醒 在IDLE模式下,除CPU时钟外,其他模块的时钟和电源正常供应。因此,GPIO接收到的输入会应用于中断控制器并唤醒CPU。

  • STOP模式下的唤醒 在STOP模式下,除RTC时钟外,所有时钟(包括PLL和XTI)都不供应。中断控制器在STOP模式下不工作。这时,如果信号输入到电源管理器,电源管理器首先唤醒时钟管理器。由于这一唤醒,所有时钟(如PLL和PCLK、BCLK、MCLK和FCLK)被启用并供应给CPU和整个系统。换句话说,系统被唤醒。为了稳定PLL,唤醒时间比IDLE模式长约70毫秒。

4.6 复位生成

4.6.1 上电复位序列

电源管理块具有复位生成块。复位生成块使用在RTC时钟(32.768 kHz)下采样的nPORST。RTC时钟作为电源管理的主时钟使用。因此,即使不使用RTC功能,也必须供应RTC时钟。

下图显示了上电复位序列期间的时钟和复位行为。

Symbol

Min. (msec)

Max. (msec)

Description

tALIVE

–50

Infinity

RTC to VDDI10_ALIVE

tALIVEIO

0

50

VDDI10_ALIVE to ALIVE IO power

tCORE

0

Infinity

VDDP18_ALIVE/VDD33_ALIVE to VDDI

tARM

0

50

VDDI to VDDI_ARM

tDDR

0

150

VDDI_ARM to VDDQ (DDR IO power)

tIO

0

150

VDDI_ARM to DVDD33_IO (normal IO power)

tALL

0

150

VDDI_ARM to DVDD33_IO (normal IO power)

tRESETIN

0

Infinity

All power on to assert nRESET

tRESETOUT

200

200

NRESET to NGRESETOUT

4.6.2 睡眠模式唤醒序列

在启动睡眠模式唤醒序列之前,所有ALIVE和RTC电源应开启。

Symbol

Min. (msec)

Max. (msec)

Description

tARM

0

50

VDDI to VDDI_ARM

tDDR

0

150

VDDI_ARM to VDDQ (DDR IO power)

tIO

0

150

VDDI_ARM to DVDD33_IO (normal IO power)

tALL

0

150

VDDI_ARM to DVDD33_IO (normal IO power)

tRESETIN

0

Infinity

All power on to assert nRESET

tRESETOUT

200

200

NRESET to NGRESETOUT

4.6.3 关机序列

Symbol

Min. (msec)

Max. (msec)

Description

tALIVE_OFF

–50

Infinity

ALIVE IO power to ALIVE CORE

tALIVEIO_OFF

0

50

ALIVE IO power to ALIVE core power

tCORE_OFF

0

Infinity

VDDI to ALIVE power

tARM_OFF

0

Infinity

VDDI_ARM to ALIVE power

tDDR_OFF

0

50

VDDQ(DDR IO power) to VDDI

tIO_OFF

0

50

DVDD33_IO (normal IO power) to VDDI

tALL_OFF

0

50

Other VDD power to VDDI

4.6.4 软件复位和GPIO复位

S5P6818支持软件复位,CPU可以通过软件复位自我复位。要生成软件复位,必须先将SWRSTENB位设置为1,然后再设置PWRMODE.SWRST位。与上电复位不同,软件复位请求在稳定状态下进行,因此不需要时钟稳定时间。

S5P6818支持用户定义的GPIO复位。当定义为GPIO复位源的AliveGPIO引脚被置位或复位时,电源管理模块会生成复位信号。定义为GPIO复位源的AliveGPIO引脚在唤醒源寄存器中定义。将GPIORSTENB位设置为1启用AliveGPIO复位源功能。

4.6.5 看门狗复位

看门狗定时器模块用于在控制器操作受到系统错误等故障干扰时恢复操作。当电源管理模块检测到看门狗定时器事件时,它生成与上电复位完全相同的复位信号,因为看门狗复位事件发生在故障和未知状态下。

4.6.6 nPORST、软件复位、看门狗复位和GPIO复位

S5P6818有以下四种复位状态:

4.7 TIE OFF

Tieoff块是一组寄存器,包括在正常模式操作中不需要设置的特殊寄存器。Tieoff块包括用于ARM、HDMI、DRAM控制器、UART、USB 2.0主机控制器/Phy、USB 2.0 OTG控制器/Phy、以太网控制器、AXI总线和内部SRAM时序裕量控制的特殊功能寄存器。

4.8 AXI总线

ARM PL301(AXI3总线互连)为AXI总线提供可编程功能,其中包括QoS和可编程循环优先级。

4.8.1 可编程服务质量(ProgQoS)

QoS方案通过跟踪未完成事务的数量工作,当达到指定数量时,仅允许来自特定指定主控的事务。

QoS方案仅支持具有组合接受能力的从控,如PrimeCell动态内存控制器(PL340)。

直到AXI总线矩阵计算出在特定MI处存在与QoS标高寄存器中存储的值相等数量的未完成事务时,QoS方案才会生效。然后,它仅接受来自QoS访问控制寄存器中指定的从端口的事务。此限制将一直保持,直到未完成事务的数量再次小于QoS标高寄存器中存储的值。

建议将需要QoS支持的MI分配低MI编号。这种方法与循环优先级方案很好地对齐,因为需要QoS支持的MI通常是可以被认为是高排名从控的那些。详见PrimeCell高性能矩阵(PL301)技术参考手册。

4.8.2 仲裁方案

可以分别为每个MI配置可编程或固定的循环优先(RR)仲裁方案。

AW和AR通道有独立的仲裁器,可以通过APB编程接口进行编程(如果适用)和单独查询,但AW和AR通道配置是相同的。由于AW和AR通道是独立仲裁的,MI可以允许来自不同SI的同时读写事务。

仲裁机制记录仲裁决策,以便在随后的周期中使用。当前周期内做出的仲裁决策不会影响当前周期。

如果没有SI处于活跃状态,仲裁器采用默认仲裁,即最高优先级SI。如果这种情况发生,并且最高优先级接口在同一周期内或在任何其他SI之前变为活跃状态,则这不构成对活跃SI的授权,仲裁方案也不会因该传输而改变其状态。

如果启用了QoS规定并且处于活跃状态,则仅允许某些SI赢得仲裁,不能保证默认仲裁在这些SI中。在这种情况下,不允许任何事务使用默认仲裁,必须在有活跃SI时进行仲裁。

4.8.2.1 RR方案

在这些方案中,您可以在设计时选择:

  • 使用的槽数
  • 分配给它们的SI
  • 它们的顺序

每个连接的SI至少有一个槽,最多可以有32个槽。通过为SI分配多个槽,您可以按槽数的比例分配对从端的访问。如果槽的顺序适当,这也可以减少在保证授权之前的最长时间。如果选择可编程的RR方案,可以通过APB编程接口查询并更改与槽关联的SI。

每当仲裁授权给一个活跃SI时,槽会轮换,以使当前处于最高优先级位置的槽成为最低优先级,所有其他槽移动到更高优先级,但保持它们的相对顺序。这意味着,如果一个SI是最高优先级的活跃SI,但不是最高优先级接口,那么它会继续赢得仲裁,直到它成为最高优先级接口,然后成为最低优先级接口。

由于仲裁值是已注册的,本周期内做出的仲裁决策将在下一个周期中使用。这意味着,如果当前持有仲裁权的SI在本周期内仍然是最高优先级活跃SI,它将再次赢得仲裁,无论它在下一个周期内是否活跃,如下图A、B和C阶段所示的M3状态。

4.9 寄存器描述

4.9.1 寄存器映射摘要

  • 基地址:0XC001_0000

详情见原文

5 时钟生成器

5.1 IP时钟生成器概述

IP时钟生成器可以生成分频时钟。每个IP都有时钟方案,同时需要几个不同的分频比。因此,每个IP时钟生成器为各个IP提供所需的时钟。这些IP时钟生成器使用来自SYSCTRL的PLL或来自PAD的外部时钟。它可以通过2-n分频器对每个IP的所需时钟进行分频。

5.2 时钟生成器等级0

时钟生成器等级0没有时钟分频器。它只能进行时钟门控。它使用PCLK或BCLK门控。以下外设使用等级0时钟生成器:

  • CODA960
  • Crypto
  • I2C
  • 3D GPU
  • MPEGTSI
  • PDM
  • SCALLER
  • DEINTERLACE
  • MLC

寄存器描述见原文

5.3 时钟生成器等级1

时钟生成器等级1有一个时钟分频器。时钟分频器具有8位分频寄存器。分频寄存器可以达到256级,可以进行最多256级分频。

以下外设使用等级1时钟生成器:

  • MIPICSI
  • PPM
  • PWMTIMER
  • SDMMC
  • SPDIFTX
  • SSP
  • UART
  • VIP

寄存器描述见原文

5.4 时钟生成器等级2

时钟生成器等级2有两个时钟分频器。每个时钟分频器具有8位分频寄存器,每个寄存器可以达到256级分频,两个时钟分频器串联,因此时钟生成器等级2可以进行最多65,536级分频。

以下外设使用等级2时钟生成器:

  • GMAC
  • I2S
  • USBHOSTOTG
  • DPC
  • LVDS
  • HDMI
  • MIPIDSI

寄存器描述见原文

6 总线

6.1 概述

ARM PL301 提供 AXI3 总线、AHB 总线和 APB 总线。

AXI3 总线互连提供 AXI 总线的可编程功能,包括 QoS 和可编程循环优先。

CCI-400(缓存一致互连)将互连和一致性功能结合在一个模块中。

6.2 特点

  • 顶部总线:AXI 总线,主 1 通道,辅 4 通道
  • 底部总线:AXI 总线,主 1 通道,辅 4 通道
  • 显示总线:AXI 总线,主 1 通道,辅 2 通道
  • 静态总线:AXI 总线,主 2 通道,辅 3 通道
  • IOPER 总线:AXI 总线,主 3 通道,辅 4 通道
  • SFR 总线:AXI 总线,主 3 通道,辅 2 通道
  • SFR0 总线:AXI 到 APB 总线,辅 1 通道
  • SFR1 总线:AXI 到 APB 总线,辅 1 通道
  • SFR2 总线:AXI 到 APB 总线,辅 1 通道
  • CCI 总线:AXI 主 3 通道,AXI 辅 5 通道

6.3 描述

6.3.1 AXI 总线描述

ARM PL301(AXI3 总线互连)提供 AXI 总线的可编程功能,包括 QoS 和可编程循环优先。

6.3.2 可编程服务质量(ProgQoS)

QoS 方案通过跟踪未完成事务的数量工作,当达到指定数量时,仅允许来自特定指定主控的事务。

QoS 方案仅支持具有组合接受能力的从控,如 PrimeCell 动态内存控制器(PL340)。在 AXI 总线矩阵计算出在特定 MI 处存在与 QoS 标高寄存器中存储的值相等数量的未完成事务之前,QoS 方案没有效果。然后,它仅接受来自 QoS 访问控制寄存器中指定的从端口的事务。此限制将一直保持,直到未完成事务的数量再次小于 QoS 标高寄存器中存储的值。

建议将需要 QoS 支持的 MI 分配低 MI 编号。这种方法与循环优先方案很好地对齐,因为需要 QoS 支持的 MI 通常是可以被认为是高排名从控的那些。详见 PrimeCell 高性能矩阵(PL301)技术参考手册。

寄存器描述见原文

7 TrustZone 保护控制器 (TZPC)

7.1 概述

TZPC(TrustZone 保护控制器)控制 PL301 AXI 总线的信任区。

每个 AXI 到 APB 桥提供一个 AXI 从接口,并可以调解其本地 APB 总线上多达 16 个外设的访问。桥包含地址解码逻辑,根据传入的 AXI 事务生成 APB 外设选择。桥包括每个总线上的外设的单个 TZPCDECPROT 输入信号。该信号用于确定外设是否配置为安全或非安全;桥将拒绝非安全事务对安全外设地址范围的访问。

7.2 特点

  • 7 个 TZPC 模块
  • 每个 TZPC 模块提供 TZPCDECPROT0、TZPCDECPROT1、TZPCDECPROT2、TZPCDECPROT3、TZPCR0SIZE

寄存器描述见原文

8 系统L2缓存(PL-310 L2C)

8.1 概述

在片上添加二级缓存,也称为L2缓存,是在处理器生成大量内存流量时提高ARM系统性能的公认方法。二级缓存假定存在一级或一级缓存,紧密耦合或内部处理器。

内存访问速度最快的是L1缓存,其次是L2缓存。L3主内存的内存访问通常明显较慢。

8.2 特点

缓存控制器的特点:

  • 为高性能系统设计的从属和主AMBA AXI接口。
  • 支持C格式锁定,用于数据和指令。
  • 支持按行锁定。
  • 支持按主ID锁定。
  • L2缓存可用大小可配置为16 KB到8 MB,具体取决于配置和锁定寄存器的使用。
  • 固定行长度为32字节、8字或256位。
  • 与数据RAM的接口是字节可写的。
  • 支持所有AXI缓存模式:
    • 写通和写回
    • 读分配、写分配、读写分配。
  • 强制写分配选项始终将可缓存写入分配到L2缓存,用于不支持此模式的处理器。
  • 正常内存不可缓存共享读取被视为可缓存不可分配。正常内存不可缓存共享写入被视为可缓存写通不可写分配。有一个选项,Shared Override,可覆盖此行为。
  • 支持关键字优先行填充。
  • 伪随机或循环优先受害者选择策略。使用锁定寄存器可以使其确定性。
  • 四个256位行填充缓冲区(LFB),由主端口共享。这些缓冲区从主内存捕获行填充数据,等待完整行写入L2缓存。
  • 每个从端口有两个256位行读取缓冲区(LRB)。这些缓冲区在L2内存中持有一行缓存命中。
  • 三个256位驱逐缓冲区(EB)。这些缓冲区持有从L2缓存驱逐的行,写回主内存。
  • 三个256位存储缓冲区(STB)。这些缓冲区在排空到主内存或L2缓存之前持有可缓冲写入。它们允许将多个写入合并到同一行。
  • 软件选项启用独占缓存配置。
  • 配置寄存器可通过从端口中的地址解码访问。
  • 主端口中的地址过滤允许将某一地址范围重定向到一个主端口,而所有其他地址重定向到另一个端口。

8.3 模块图

8.4 功能描述

8.4.1 L2缓存用户配置

  • 系统L2缓存基地址:基地址:0xCF000000
  • 关闭和开启L2C:
    • 关闭偏移:0x100(基地址 + 0x100)设置为0
    • 开启偏移:0x100(基地址 + 0x100)设置为1
  • 早期写响应:
    • AXI协议规定,只有当最后一个写数据被接受时,写响应才能发送回AXI主控。此优化使L2C-310能够在存储缓冲区接受写地址后立即发送某些写事务的写响应。这种行为与AXI协议不兼容,默认情况下禁用。可以通过在辅助控制寄存器的位[30]中设置Early BRESP Enable位来启用此优化。L2C-310从端口仅在输入信号AWUSERSx[11],x=0或1,对于相应的写事务设置为1'b1时发送早期写响应。

8.4.2 初始化顺序

例如,典型的缓存控制器启动编程顺序包括以下寄存器操作:

  1. 使用读-修改-写操作写入辅助、标签RAM延迟、数据RAM延迟、预取和功率控制寄存器,以设置全局配置:
  • 关联性,方式大小
  • RAM访问的延迟
  • 分配策略
  • 预取和功率功能
  1. 使用偏移0x77C进行安全写操作,按方式无效所有缓存条目:
  • 向0x77C写入0xFFFF
  • 轮询缓存维护寄存器,直到无效操作完成
  1. 如果需要,写入锁定D和锁定I寄存器9。

  2. 写入中断清除寄存器以清除任何残留的原始中断。

  3. 如果需要启用中断,写入中断掩码寄存器。

  4. 将最低有效位设置为1写入控制寄存器1以启用缓存。

如果在启用L2缓存的情况下写入辅助、标签RAM延迟或数据RAM延迟控制寄存器,将导致SLVERR错误。必须在写入辅助、标签RAM延迟或数据RAM延迟控制寄存器之前,通过写入控制寄存器1禁用L2缓存。

寄存器描述见原文

9 DMA

9.1 概述

DMA控制器(DMAC)是一个高级微控制器总线架构(AMBA)模块,连接到高级高性能总线(AHB)。DMAC有一个用于编程的AHB从接口和两个用于数据传输的AHB主接口。S5P6818中有两个DMAC,每个DMAC有八个通道,每个通道最多可以缓冲4个字。每个通道可以通过任一AHB主接口以编程的数据宽度和字节序传输数据。DMAC支持16个DMA请求者,并为每个通道生成单独可屏蔽的终端计数和传输错误中断。

9.2 特点
  • 16个DMA通道。每个通道可以支持单向传输。
  • 16个DMA请求。DMAC提供16个外设DMA请求线路。
  • 单个DMA和突发DMA请求信号。连接到DMAC的每个外设可以发出突发DMA请求或单个DMA请求。您可以通过编程DMAC设置DMA突发大小。
  • 内存到内存、内存到外设、外设到内存和外设到外设的传输。
  • 通过使用链接列表支持散播或收集DMA。
  • 硬件DMA通道优先级。每个DMA通道有特定的硬件优先级。DMA通道0具有最高优先级,通道7具有最低优先级。如果两个通道的请求同时变为活跃,优先处理具有最高优先级的通道。
  • AHB从DMA编程接口。您可以通过AHB从接口写入DMA控制寄存器来编程DMAC。
  • 两个用于传输数据的AHB总线主接口。当DMA请求变为活跃时,使用这些接口传输数据。
  • 源和目的地址的递增或不递增寻址。
  • 可编程DMA突发大小。您可以编程DMA突发大小以更有效地传输数据。突发大小通常设置为外设FIFO大小的一半。
  • 每个通道内部有四字FIFO。
  • 支持8、16和32位宽的事务。
  • 支持大端和小端模式。DMAC在复位时默认为小端模式。
  • 分离和组合的DMA错误和DMA计数中断请求。您可以在发生DMA错误或DMA计数达到0时生成对处理器的中断。这通常用于指示传输已完成。有三个中断请求信号:
    • DMACINTTC表示传输已完成。
    • DMACINTERR表示发生了错误。
    • DMACINTR结合了DMACINTTC和DMACINTERR中断请求信号。在中断控制器请求输入较少的系统中可以使用DMACINTR中断请求。
  • 中断屏蔽。您可以屏蔽DMA错误和DMA终端计数中断请求。
  • 原始中断状态。在屏蔽之前,您可以读取DMA错误和DMA计数的原始中断状态。
  • 用于块和集成系统级测试的测试寄存器。
  • 唯一标识DMAC的识别寄存器。操作系统可以使用这些寄存器自动配置自己。
9.3 模块图

9.4 功能描述

9.4.1 软件注意事项

在编程DMAC时,必须考虑以下软件注意事项:

  • 在通道使能为高后,不得对活动通道的寄存器进行任何写操作。如果需要重新编程任何DMAC通道参数,必须在禁用DMAC通道后重新编程。
  • 如果源宽度小于目标宽度,传输大小值乘以源宽度必须是目标宽度的整数倍。
  • 当源外设是流控制器且源宽度小于目标宽度时,源外设在断言DMACLSREQ或DMACLBREQ之前执行的传输次数必须使得传输次数乘以源宽度是目标宽度的整数倍。如果违反此条件,数据可能会卡在FIFO中并丢失,导致不可预测的结果。可以通过禁用相关DMAC通道来中止传输。
  • 不得将DMACCxCONFIG寄存器中的SRCPERIPHERAL和DESTPERIPHERAL位字段编程为大于15的值。
  • DMACCxCONTROL寄存器中的SWIDTH和DWIDTH位字段不得表示超过32位宽的外设。
  • 在软件通过清除DMACCxCONFIG寄存器中的通道使能位禁用通道后,必须在轮询相应的DMACENBLDCHNS寄存器位为0后才能重新使能该位。这是因为实际禁用不会立即发生在清除通道使能位时。必须考虑进行中的AHB突发的延迟。
  • DMACCxLLIREG寄存器中的LLI字段不得表示大于0xFFFFFFF0的地址,否则四字LLI突发将在0x00000000处回绕,并且LLI数据结构不在连续的内存位置。
  • 当DMAC中编程的传输大小大于源或目标外设中FIFO的深度时,必须仅将DMAC编程为非递增地址生成。
  • 外设在接收DMACCLR信号时应取消断言任何DMACSREQ、DMACBREQ、DMACLSREQ或DMACLBREQ信号,无论DMACCLR是响应哪个请求断言的。这是因为DMACCLR不是针对单个请求信号、DMACSREQ或突发请求信号DMACSBEQ的。DMACCLR的握手通过DMAC中的所有DMA请求的逻辑OR实现。 注意:当DMACCLR为高时,外设发出新的DMACSREQ或DMACBREQ信号是非法的。
  • 如果在DMACCxCONTROL寄存器中将传输大小字段编程为零,并且DMAC是流控制器,则传输大小字段在其他流控制模式下没有意义,那么通道不会启动任何传输。必须通过写入DMACCxCONFIG寄存器中的通道使能位来禁用该通道,并重新编程该通道。
  • 不得对DMACCxCONTROL寄存器进行正常的读写测试,因为传输大小字段不是典型的写回读寄存器字段。在写入时,传输大小位字段类似于控制寄存器,因为它确定DMAC执行的传输次数。然而,在回读时,传输大小表现为状态寄存器,因为它返回以源宽度表示的剩余传输次数。因此,当传输大小回读时,它返回存储在称为TRFSIZEDST的单独计数器中的目标传输完成数乘以一个因子。不是对同一个物理寄存器进行写入和读出,因此不适用正常的写回读测试。
  • 在目标流控制模式下,执行外设到外设的传输,如果通道FIFO中有足够的数据来服务由目标外设引发的DMACLSREQ或DMACLBREQ请求,而不需要从源外设获取数据,那么源外设会收到DMACTC。
  • 在目标流控制情况下,执行外设到外设传输,且DWIDTH < SWIDTH时,目标外设请求的数据字节数必须是以字节表示的SWIDTH的整数倍。如果不确保这一点,DMAC可能会从源外设获取比所需更多的数据。这可能导致数据丢失。
  • 在低优先级通道的访问结束时,在AHB总线上插入一个空闲周期,以使其他主控能够访问总线。这确保了低优先级通道不会垄断总线。然而,这意味着在最坏的情况下,总线可能被对应于低优先级的事务占用最多16个周期。这适用于所有传输配置,包括内存到内存的传输。 注意:当DMACCLR为高时,外设发出新的DMACSREQ或DMACBREQ信号是非法的。

9.4.2 程序员模型

9.4.2.1 关于程序员模型

DMAC支持以下类型的事务:

  • 内存到内存
  • 内存到外设
  • 外设到内存
  • 外设到外设

每个DMA流配置为提供单源和目标的单向DMA传输。

例如,一个双向串行端口需要一个流用于发送,一个流用于接收。源和目标区域可以是内存区域或外设,可以通过相同的AHB主控访问,或一个区域由每个主控访问。

DMAC的基地址不是固定的,可能因具体系统实现而异。然而,任何特定寄存器相对于基地址的偏移是固定的。

寄存器字段

以下适用于DMAC使用的寄存器:

  • 不得访问保留或未使用的地址位置,因为这可能导致设备行为不可预测。
  • 必须将寄存器的保留或未使用位写为零,并在读取时忽略这些位,除非相关文本中另有说明。
  • 除非相关文本中另有说明,系统或上电复位会将所有寄存器位复位为逻辑0。
  • 除非相关文本中另有说明,所有寄存器都支持读写访问。写入更新寄存器内容,读取返回寄存器内容。
  • 除非相关文本中另有说明,仅可使用字读取和字写入访问此文档中定义的寄存器。

启用DMAC

通过在DMAC配置寄存器中设置DMA使能位E来启用DMAC。

禁用DMAC

要禁用DMAC:

  1. 读取DMACENBLDCHNS寄存器,确保已禁用所有DMA通道。如果有任何通道处于活动状态,请参见禁用DMA通道。

  2. 通过在DMAC配置寄存器中写入0来禁用DMAC。

启用DMA通道

通过在相关DMA通道配置寄存器中设置通道使能位来启用DMA通道。

注意:必须在启用通道之前完全初始化通道。此外,必须在启用任何通道之前设置DMAC的使能位。

禁用DMA通道

可以通过以下方式禁用DMA通道:

  1. 直接写入通道使能位。

    注意:如果使用此方法,会丢失FIFO中任何未完成的数据。

  2. 将活动位和暂停位与通道使能位结合使用。

  3. 等到传输完成。然后通道会自动禁用。

禁用DMA通道且丢失FIFO中的数据

清除相关通道配置寄存器中的通道使能位。当前的AHB传输(如果正在进行)完成后,通道会禁用。

注意:会丢失FIFO中的数据。

禁用DMA通道且不丢失FIFO中的数据

要禁用DMA通道且不丢失FIFO中的数据:

  1. 在相关通道配置寄存器中设置暂停位。这会导致忽略任何后续的DMA请求。

  2. 轮询相关通道配置寄存器中的活动位,直到其变为0。此位指示通道中是否有待传输的数据。

  3. 清除相关通道配置寄存器中的通道使能位。

设置新的DMA传输

要设置新的DMA传输:

  1. 如果通道未分配给DMA事务:

    • 读取DMACENBLDCHNS寄存器,确定非活动通道。
    • 选择具有必要优先级的非活动通道。
  2. 编程DMAC。

    • 在相关DMA通道配置寄存器中设置暂停位。当前的源请求会被服务。忽略任何后续的源DMA请求,直到清除暂停位。

编程DMA通道

要编程DMA通道:

  1. 选择具有必要优先级的空闲DMA通道。DMA通道0具有最高优先级,DMA通道7具有最低优先级。

  2. 通过写入DMAC INTTCCLEAR和DMACINTERRCLR寄存器清除要使用的通道上的任何未决中断。上一个通道操作可能已留下活动的中断。

  3. 将源地址写入DMACCxSRCADDR寄存器。

  4. 将目标地址写入DMACCxDESTADDR寄存器。

  5. 将下一个LLI的地址写入DMACCxLLI寄存器。如果传输由单个数据包组成,必须将0写入此寄存器。

  6. 将控制信息写入DMACCxCONTROL寄存器。

  7. 将通道配置信息写入DMACCxCONFIGURATION寄存器。如果设置了使能位,则DMA通道会自动启用。

 9.4.2.4 外设DMA请求ID

Index

Description

Index

Description

0

UART1 Tx

16

I2S2 Tx

1

UART1 Rx

17

I2S2 Rx

2

UART0 Tx

18

AC97 PCMOUT

3

UART0 Rx

19

AC97 PCMIN

4

UART2 Tx

20

AC97 MICIN

5

UART2 Rx

21

SPDIF RX

6

SSP0 Tx

22

SPDIF TX

7

SSP0 Rx

23

MPEGTSI0

8

SSP1 Tx

24

MPEGTSI1

9

SSP1 Rx

25

MPEGTSI2

10

SSP2 Tx

26

MPEGTSI4

11

SSP2 Rx

27

CRYPTO BR

12

I2S0 Tx

28

CRYPTO BW

13

I2S0 Rx

29

CRYPTO HR

14

I2S1 Tx

30

Reserved

15

I2S1 Rx

31

Reserved

9.4.2.5 地址生成

地址生成可以是递增的或非递增的。

注意:不支持地址环绕。突发不会跨越1 KB地址边界。

9.4.2.6 散播/收集

通过使用链接列表支持散播/收集。这意味着源和目标区域不必在内存中占据连续区域。如果不需要散播/收集,必须将DMACCxLLI寄存器设置为0。有关散播/收集DMA的更多信息,请参见附录B DMA接口。

链接列表项

一个LLI由四个字组成。这些字按以下顺序组织:

  1. DMACCxSCRADDR
  2. DMACCxDESTADDR
  3. DMACCxLLI
  4. DMACCxCONTROL

注意:DMACCxCONFIGURATION通道配置寄存器不属于LLI。

为散播/收集DMA编程DMAC

为散播/收集DMA编程DMAC:

  1. 将完整DMA传输的LLI写入内存。每个LLI包含四个字:

    • 源地址
    • 目标地址
    • 指向下一个LLI的指针
    • 控制字

    最后一个LLI的链接列表字指针设置为0。

  2. 选择具有所需优先级的空闲DMA通道。DMA通道0具有最高优先级,DMA通道7具有最低优先级。

  3. 将之前写入内存的第一个LLI写入DMAC中的相关通道。

  4. 将通道配置信息写入通道配置寄存器并设置通道使能位。然后,DMAC在每个LLI加载时传输第一个及后续的数据包。

  5. 在每个LLI结束时,根据DMACCxCONTROL寄存器中的终端计数位,可以生成中断。如果设置了此位,则在相关LLI结束时会生成中断。必须处理中断请求,并在DMACINTTCCLEAR寄存器中设置相关位以清除中断。如果是这样,必须处理此中断请求,并在DMACINTTCCLR寄存器中设置相关INTTCCLEAR位以清除中断请求。

通过链接列表操作进行散播/收集

一系列链接列表定义了源和目标数据区域。每个LLI控制一块数据的传输,然后可选地加载另一个LLI以继续DMA操作,或停止DMA流。第一个LLI被编程到DMAC中。

LLI描述的数据包通常需要一个或多个DMA突发,分别传输到源和目标。

下图显示了LLI的一个示例。必须将内存的一个矩形传输到外设。数据每行的地址在图的左侧以十六进制表示。描述传输的LLI应从地址0x20000开始连续存储。

第一个LLI

第一个LLI存储在0x20000,定义了要传输的第一个数据块。这些数据存储在地址0x0A200和0x0AE00之间:

  • 源起始地址:0x0A200
  • 目标地址设置为目标外设地址
  • 传输宽度:字(32位)
  • 传输大小:3072字节(0xC00)
  • 源和目标突发大小:16次传输
  • 下一个LLI地址:0x20010

第二个LLI

第二个LLI存储在0x20010,定义了要传输的下一个数据块:

  • 源起始地址:0x0B200
  • 目标地址设置为目标外设地址
  • 传输宽度:字(32位)
  • 传输大小:3072字节(0xC00)
  • 源和目标突发大小:16次传输
  • 下一个LLI地址:0x20020

描述符链

描述符链被构建,每个描述符指向系列中的下一个。为了初始化DMA流,第一个LLI(0x20000)被编程到DMAC中。当第一个数据包被传输后,下一个LLI会自动加载。

最后一个LLI

最后一个LLI存储在0x20070,包含以下信息:

  • 源起始地址:0x11200
  • 目标地址设置为目标外设地址
  • 传输宽度:字(32位)
  • 传输大小:3072字节(0xC00)
  • 源和目标突发大小:16次传输
  • 下一个LLI地址:0x0

因为下一个LLI地址被设置为零,这是最后一个描述符,在传输完最后一项数据后,DMA通道将被禁用。在这一点上,该通道可能会生成一个中断,以指示ARM处理器该通道可以重新编程。

9.4.2.7 中断请求

中断请求可以在遇到AHB错误或传输结束时生成,即在当前LLI对应的所有数据传输到目标后生成终端计数。可以通过编程相关DMACCxCONTROL和DMACCxCONFIGURATION通道寄存器中的相关位来屏蔽中断。

提供了中断状态寄存器。这些寄存器在中断屏蔽之前汇总所有DMA通道的中断请求(DMACRAWINTTCSTATUS、DMACRAWINTERRORSTATUS),以及中断屏蔽之后的中断请求(DMACINTTCSTATUS、DMACINTERRORSTATUS)。

DMACINTSTATUS寄存器将DMACINTTCSTATUS和DMACINTERRORSTATUS请求合并到一个寄存器中,以便快速找到中断源。通过将相应的位设置为高,写入DMACINTTCCLEAR或DMACINTERRCLR寄存器,可以选择性地清除中断。

DMAC提供了两种中断请求连接方案。最简单的连接方案具有组合错误和传输完成中断请求。要找到中断源,必须读取DMACINTSTATUS和DMACINTTCSTATUS寄存器。

为了更快的中断响应,可以使用另一种连接方案。该方案使用单独的错误和传输完成请求中断。读取DMACINTTCSTATUS或DMACINTERRORSTATUS寄存器以找到中断源。

组合终端计数和错误中断序列流程

当使用DMACINTR中断请求时:

  1. 必须等待组合中断请求从DMAC变为活动状态。假设在中断控制器和处理器中启用了中断,处理器会分支到中断向量地址并进入中断服务例程。
  2. 必须读取中断控制器状态寄存器并确定请求的来源是否是DMAC。
  3. 必须读取DMACINTSTATUS寄存器以确定生成中断的通道。如果有多个请求处于活动状态,建议首先检查优先级最高的通道。
  4. 必须读取DMACINTTCSTATUS寄存器以确定中断是否由于传输结束、终端计数或错误而生成。高位表示传输完成。
  5. 必须读取DMACINTERRORSTATUS寄存器以确定中断是否由于传输结束、终端计数或错误而生成。高位表示发生了错误。
  6. 必须在DMACINTTCCLEAR或DMACINTERRCLR寄存器中写入1到相应的位,以清除中断请求。

终端计数中断序列流程

当使用单独的DMACINTTC和DMACINTERR中断请求时:

  1. 必须等待终端计数DMA中断请求变为活动状态。假设在中断控制器和处理器中启用了中断,处理器会分支到中断向量地址并进入中断服务例程。
  2. 必须读取中断控制器状态寄存器以确定中断请求的来源是否是DMAC断言的DMACINTTC信号。
  3. 必须读取DMACINTTCSTATUS寄存器以确定生成中断的通道。如果有多个请求处于活动状态,建议首先服务优先级最高的通道。
  4. 必须服务中断请求。
  5. 必须在DMACINTTCCLEAR寄存器中写入1到相应的位,以清除中断请求。

错误中断序列流程

当使用单独的DMACINTTC和DMACINTERR中断请求时:

  1. 必须等待因DMA通道错误而变为活动状态的中断请求。假设在中断控制器和处理器中启用了中断,处理器会分支到中断向量地址并进入中断服务例程。
  2. 必须读取中断控制器状态寄存器以确定请求的来源是否是DMAC断言的DMACINTERR信号。
  3. 必须读取DMACINTERRORSTATUS寄存器以确定生成中断的通道。如果有多个请求处于活动状态,建议首先检查优先级最高的通道。
  4. 必须服务中断请求。
  5. 必须在DMACINTERRCLR寄存器中写入1到相应的位,以清除中断请求。

中断轮询序列流程

DMAC中断请求信号在中断控制器中被屏蔽或在处理器中被禁用。当轮询DMAC时,必须:

  1. 读取DMACINTSTATUS寄存器。如果没有位为高,重复此步骤,否则转到步骤2。如果有多个请求处于活动状态,建议首先检查优先级最高的通道。
  2. 读取DMACINTTCSTATUS寄存器,以确定中断是否由于传输结束、终端计数或错误而生成。高位表示传输完成。
  3. 服务中断请求。
  4. 对于错误中断,在DMACINTERRCLR寄存器的相关位写入1以清除中断请求。对于终端计数中断,在DMACINTTCCLR寄存器的相关位写入1。
9.4.2.8 DMAC数据流

内存到内存DMA流

对于内存到内存DMA流:

  1. 编程并启用DMA通道。
  2. 当DMA通道具有最高挂起优先级且DMAC获得AHB总线主控权时,传输数据。
  3. 如果在传输数据时发生错误,则生成错误中断并禁用DMA流。
  4. 递减传输计数。
  5. 如果计数已达到零:
    • 生成终端计数中断。可以屏蔽中断。
    • 如果DMACCxLLI寄存器不为0,则重新加载以下寄存器并返回步骤2:
      • DMACCxSRCADDR
      • DMACCxDESTADDR
      • DMACCxLLI
      • DMACCxCONTROL
      • 但是,如果DMACCxLLI为0,则禁用DMA流并结束流程序列。

内存到外设或外设到内存DMA流

对于外设到内存或内存到外设DMA流:

  1. 编程并启用DMA通道。
  2. 等待DMA请求。
  3. 当DMA请求变为活动状态,DMA流具有最高挂起优先级,并且DMAC是AHB总线主控时,DMAC开始传输数据。
  4. 如果在传输数据时发生错误,则生成错误中断,禁用DMA流,并结束流程序列。
  5. 如果DMAC控制流,则递减传输计数。
  6. 如果传输已完成,传输计数达到0(如果DMAC正在执行流控制)或外设设置了DMACLBREQ或DMACLSREQ信号(如果外设正在执行流控制),则:
    • DMAC断言DMACTC信号。
    • 生成终端计数中断。可以屏蔽中断。
    • 如果DMACCxLLI寄存器不为0,则重新加载以下寄存器并返回步骤2:
      • DMACCxSRCADDR
      • DMACCxDESTADDR
      • DMACCxLLI
      • DMACCxCONTROL
      • 但是,如果DMACCxLLI为0,则禁用DMA流并结束流程序列。

外设到外设DMA流

对于外设到外设DMA流:

  1. 编程并启用DMA通道。
  2. 等待源DMA请求。
  3. 当DMA请求变为活动状态,DMA流具有最高挂起优先级,并且DMAC是AHB总线主控时,DMAC开始传输数据。
  4. 如果在传输数据时发生错误,则生成错误中断,然后完成。
  5. 如果DMAC控制流,则递减传输计数。
  6. 如果传输已完成,传输计数达到0(如果DMAC正在执行流控制)或外设设置了DMACLBREQ或DMACLSREQ信号(如果外设正在执行流控制),则:
    • DMAC对源外设断言DMACTC信号。
    • 忽略后续源DMA请求。
  7. 当目标DMA请求变为活动状态且DMACFIFO中有数据时,将数据传输到目标外设。
  8. 如果在传输数据时发生错误,则生成错误中断,禁用DMA流,并结束流程序列。
  9. 如果传输已完成,传输计数达到0(如果DMAC正在执行流控制)或外设设置了DMACLBREQ或DMACLSREQ信号(如果外设正在执行流控制),则:
    • DMAC对目标外设断言DMACTC信号。
    • 生成终端计数中断。可以屏蔽中断。
    • 如果DMACCxLLI寄存器不为0,则重新加载以下寄存器并返回步骤2:
      • DMACCxSRCADDR
      • DMACCxDESTADDR
      • DMACCxLLI
      • DMACCxCONTROL
      • 但是,如果DMACCxLLI为0,则禁用DMA流并结束流程序列。

10 中断控制器

10.1 概述

GIC 是一个高性能、面积优化的中断控制器,具有 AXI 接口。它在 S5P6818 中检测、管理和分发中断。GIC 是支持和管理系统中断的集中资源。

10.2 特性

GIC 提供用于管理中断源、中断行为和中断路由到一个或多个处理器的寄存器。

支持:

  • ARM 架构的安全扩展
  • ARM 架构的虚拟化扩展
  • 启用、禁用和从硬件(外设)中断源生成处理器中断
  • 软件生成的中断(SGI)
  • 中断屏蔽和优先级排序
  • 单处理器和多处理器环境
  • 电源管理环境中的唤醒事件

GIC 包括支持以下功能的中断分组功能:

  • 将每个中断配置为组 0 或组 1
  • 使用 IRQ 或 FIQ 异常请求向目标处理器信号组 0 中断
  • 使用 IRQ 异常请求向目标处理器信号组 1 中断
  • 统一处理组 0 和组 1 中断优先级的方案
  • 可选的组 0 中断配置锁定 GIC 支持 4 种中断类型:
  • 16 个软件生成中断(SGI)
  • 每个处理器有 6 个外部私有外设中断(PPI)
  • 每个处理器有 1 个内部 PPI
  • 128 个共享外设中断(SPI)

10.3 安全扩展支持 在包括安全扩展的实现中:

  • 组 0 中断是安全中断,组 1 中断是非安全中断。
  • 处理器对 GIC 寄存器的访问行为取决于访问是安全还是非安全的。除非本文档明确指明,否则访问 GIC 寄存器时:
    • 非安全读取安全中断的寄存器字段状态信息返回零
    • GIC 忽略任何对安全中断状态信息寄存器字段的非安全写入。非安全访问只能读取或写入与非安全中断对应的信息。 安全访问可以读取或写入与非安全和安全中断对应的信息。
  • 安全系统软件单独定义每个实现的中断为安全或非安全。
  • 非安全中断向目标处理器信号 IRQ 中断请求。
  • 安全中断可以向目标处理器信号 IRQ 或 FIQ 中断请求。
  • 安全软件可以安全地管理中断源,而不会受到非安全软件的干扰。

安全系统与为没有安全扩展的系统编写的软件向后兼容。

10.4 虚拟化支持

处理器虚拟化扩展为虚拟化 VMSAv7 实现的非安全状态提供硬件支持。这些扩展支持系统使用虚拟机监控器(称为管理程序)来切换客户操作系统。

无论是在单处理器还是多处理器系统中实现,处理器虚拟化扩展支持在单个处理器上运行多个虚拟机。

中断处理是虚拟化实现中的一个主要考虑因素。管理程序可以自己处理物理中断,或者生成相应的虚拟中断并向虚拟机发出信号。管理程序还可以生成不对应物理中断的虚拟中断。

这些扩展支持在支持处理器虚拟化的系统中处理虚拟中断和物理中断。例如,在一个与实现 ARM 处理器虚拟化扩展的处理器集成的系统中,GIC 虚拟化扩展提供机制以最小化管理程序路由中断到虚拟机的开销。

10.5 术语

10.5.1 中断状态

以下状态适用于系统中 GIC 与每个处理器之间的接口:

  • 非活动:不活动或未挂起的中断。
  • 挂起:GIC 从源中检测到在硬件中断言或由软件生成的中断,正在等待目标处理器服务。
  • 活动:GIC 从源中检测到并由处理器确认的中断,正在服务但尚未完成。
    • 活动和挂起:处理器正在服务中断,同时 GIC 有来自同一源的挂起中断。

10.5.2 中断类型

实现此 GIC 架构的设备可以管理以下类型的中断:

  • 外设中断 这是由信号向 GIC 断言的中断。GIC 架构定义了以下类型的外设中断:
    • 私有外设中断(PPI):这是特定于单个处理器的外设中断。
    • 共享外设中断(SPI):这是分配器可以路由到任何指定组合处理器的外设中断。

每个外设中断可以是:

  • 边沿触发:这是在检测到中断信号上升沿时断言的中断,不管信号状态如何,直到按本规范定义的条件清除。

  • 电平敏感:这是当中断信号电平激活时断言的中断,当电平未激活时撤销。

  • 软件生成中断(SGI) 这是通过软件写入 GIC 中的 GICD_SGIR 寄存器生成的中断。系统使用 SGI 进行处理器间通信。

    SGI 具有边沿触发特性。触发中断的软件等效于中断请求信号的边沿转换。 当 SGI 发生在多处理器实现中时,中断确认寄存器 GICC_IAR 或别名中断确认寄存器 GICC_AIAR 中的 CPU ID 字段标识请求中断的处理器。

在包括 GIC 虚拟化扩展的实现中:

  • 当发生 SGI 时,GIC 虚拟化扩展中的管理寄存器使请求处理器报告给客户操作系统,符合 GIC 规范的要求。

  • 通过写入 GIC 虚拟化扩展中的管理寄存器,管理程序可以生成虚拟中断,使其在虚拟机中表现为 SGI。

  • 虚拟中断 在实现 GIC 虚拟化扩展的 GIC 中,一个目标是处理器上运行的虚拟机的中断,通常通过连接的虚拟 CPU 接口向处理器发出信号。

  • 维护中断 在实现 GIC 虚拟化扩展的 GIC 中,一种电平敏感中断,用于信号关键事件,例如某组中断的启用或禁用。

10.5.3 中断处理模型

在多处理器实现中,有两种中断处理模型:

  • 1-N 模型:仅一个处理器处理此中断。系统必须实现一种机制来确定哪个处理器处理编程为目标多于一个处理器的中断。
  • N-N 模型:所有处理器独立接收中断。当一个处理器确认中断时,挂起状态仅对该处理器清除。中断仍然对其他处理器挂起。

10.5.4 虚假中断

可能出现 GIC 向处理器信号的中断不再需要的情况。如果发生这种情况,当处理器确认中断时,GIC 返回一个特殊的中断 ID,将中断标识为虚假中断。

虚假中断的示例原因包括:

  • 在处理器确认中断之前:
    • 软件更改中断的优先级
    • 软件禁用中断
    • 软件更改中断的目标处理器
    • 对于 1-N 中断,另一个目标处理器已先前确认该中断。

10.5.5 处理器安全状态和 GIC 访问的安全与非安全

实现 ARM 安全扩展的处理器有一个安全状态,安全或非安全:

  • 非安全状态的处理器只能对 GIC 进行非安全访问。
  • 安全状态的处理器可以对 GIC 进行安全和非安全访问。
  • 在非安全状态下运行的软件称为非安全软件。
  • 在安全状态下运行的软件称为安全软件。

实现安全扩展的 GIC 的多处理器系统可能包括一个或多个不实现安全扩展的处理器。此类处理器实现为:

  • 仅对 GIC 进行安全访问,这意味着在处理器上运行的任何软件都是安全软件,只能进行安全访问。
  • 仅对 GIC 进行非安全访问,这意味着在处理器上运行的任何软件都是非安全软件。

10.5.6 寄存器bank

  • 中断bank在多处理器实现中,对于 PPI 和 SGI,GIC 可以有多个具有相同中断 ID 的中断。这种中断称为bank中断,通过其中断 ID 和其关联的 CPU 接口的组合唯一标识。

  • 寄存器银行 寄存器银行指的是在同一地址实现寄存器的多个副本。

    • 在多处理器实现中,为每个处理器提供独立的寄存器副本。
    • 在实现安全扩展的 GIC 中,为某些寄存器提供独立的安全和非安全副本。

10.6 功能概述

10.6.1 功能接口

GIC 的主要模块有:

  • AMBA 从接口
  • 分配器
  • CPU 接口
  • 虚拟接口控制
  • 虚拟 CPU 接口
  • 时钟和复位

10.6.1.1 AMBA 从接口

AMBA 从接口提供对 GIC 寄存器的访问,使您能够编程系统配置参数并获取状态信息。

  • AXI4 从接口

AXI4 从接口使用 32 位数据总线,由以下 AXI 通道组成:

  • 写地址 (AW)
  • 写数据 (W)
  • 写响应 (B)
  • 读地址 (AR)
  • 读数据 (R)

AWUSER 和 ARUSER 信号是 GIC 特有的。它们向 GIC 指示哪个处理器正在执行请求。识别请求者对于确定 AXI 访问应定向到哪个 CPU 接口或虚拟 CPU 接口是必要的。此外,这对于某些分配器寄存器访问(例如 GICD_SGIR)也是必要的。AWUSER 和 ARUSER 信号的格式是从 0 到 CPU 数量减 1 的二进制数,包括这两个数字。生成 AWUSER 和 ARUSER 信号的唯一严格要求是所选择的编号方案必须表示处理器和合法编码范围之间的一致映射。处理器可以通过读取中断处理器目标寄存器 0(GICD_ITARGETSR0)来发现 GIC 使用的 ID。

AXI4 不支持写入交错。因此,AXI3 主设备必须设置为不交错写入。

10.6.1.2 分配器

分配器接收中断并将最高优先级的挂起中断呈现给每个 CPU 接口。

此外,GIC 实现了中断组寄存器 GICD_IGROUPRn,这些寄存器控制每个中断是配置为组 0 还是组 1。中断组影响中断是否可以转发到 CPU 接口,并且还会影响 CPU 接口中的后续路由决策,可能包括它是否作为 FIQ 或 IRQ 异常请求向处理器发出信号。

分配器为每个处理器提供 6 个外部 PPI 输入和内部虚拟维护 PPI,以及 0 到 223 个以 32 为倍数的 SPI。每个处理器的 PPI 是独立的,分配器只将它们转发到相应的 CPU 接口。您可以编程分配器以控制它将每个 SPI 路由到哪个 CPU 接口。

10.6.1.3 CPU 接口

每个 CPU 接口向相应的处理器发出中断信号,并从该处理器接收确认和 EOI 访问。这些 AXI 访问传递中断 ID 及有关中断的其他信息,并触发分配器状态的更新。

只有当中断具有足够的优先级时,CPU 接口才会向处理器发出挂起的中断。中断是否具有足够的优先级由 CPU 接口的配置和某些活动中断的优先级决定。

10.6.1.4 虚拟接口

GIC 实现了可选的 GIC 虚拟化扩展。GIC 的一组功能组件和处理器中的一些软件组成了一个虚拟分配器,其角色类似于物理分配器。 管理程序和虚拟接口控制寄存器一起形成虚拟分配器:

  1. 管理程序为物理中断创建虚拟中断并分配优先级。

  2. 每组虚拟 CPU 接口控制寄存器对虚拟中断进行优先级排序,并将最高优先级的挂起中断转发到其相应的虚拟 CPU 接口。管理程序还通过使用地址转换表来捕获虚拟机对虚拟分配器的访问来支持虚拟化。管理程序确定这些访问的效果,并可能相应地更新虚拟接口控制寄存器。

下图显示了虚拟分配器如何部分在 GIC 中实现,部分在处理器中实现,以及它如何与 GIC 中的分配器和虚拟 CPU 接口交互。GIC 实现了虚拟接口控制寄存器,即 GICH 寄存器,而处理器实现了管理程序。

  • 虚拟接口控制块

GIC 实现了虚拟接口控制块,包括所有管理寄存器和四个列表寄存器。列表寄存器 GICH_LR0 - GICH_LR3 是虚拟接口控制寄存器的一个子集,定义了虚拟 CPU 接口的活动和挂起虚拟中断。管理寄存器,例如虚拟机控制寄存器 GICH_VMCR 和活动优先级寄存器 GICH_APR,使管理程序能够管理相应虚拟 CPU 接口的其他方面,并允许在虚拟机之间切换时保存和恢复状态。

  • 虚拟 CPU 接口

虚拟 CPU 接口寄存器类似于 CPU 接口寄存器。然而,虚拟 CPU 接口接收来自由管理程序管理的虚拟接口控制寄存器的信息,而不是来自分配器。

在接收到物理中断或其他情况下,如果管理程序需要向当前虚拟机发出虚拟中断信号,它通常会更新虚拟接口控制寄存器。这些寄存器,特别是列表寄存器 GICH_LRn,保存了发送到当前虚拟机的虚拟中断列表。虚拟中断处理的信号、确认和 EOI 步骤通常可以由虚拟 CPU 接口在硬件中处理。某些情况下可能需要管理程序干预,例如列表寄存器中存储的虚拟中断超过限制。虚拟接口控制寄存器控制何时生成内部 PPI,称为虚拟维护中断。这个虚拟维护中断,PPI ID 25,旨在通知管理程序它必须处理的事件。

处理器的地址转换表通常配置为将虚拟机对 CPU 接口的访问定向到虚拟 CPU 接口。这确保了 CPU 接口的虚拟化对虚拟机是透明的。

  • 管理程序

管理程序不是 GIC 的一部分,但对其操作至关重要。它是在每个运行虚拟机的处理器上执行的软件:

  • 负责将物理中断转换为虚拟中断,并使用虚拟接口控制寄存器管理所有虚拟中断。
  • 可以配置虚拟维护中断,以在需要管理虚拟中断时发出信号。通常,它会设置二级非安全地址转换表,以便虚拟机访问虚拟 CPU 接口而不是物理接口。
  • 负责虚拟化虚拟机对分配器的访问,通常通过捕获访问并在软件中处理它们。

10.6.2 分配器

分配器集中所有中断源,确定每个中断的优先级,并为每个 CPU 接口分配优先级最高的中断,以进行优先级屏蔽和抢占处理。

分配器提供以下编程接口:

  • 全局启用中断转发到 CPU 接口。
  • 启用或禁用每个中断。
  • 设置每个中断的优先级。
  • 设置每个中断的目标处理器列表。
  • 将每个外设中断设置为电平敏感或边沿触发。
  • 将每个中断设置为组 0 或组 1。
  • 将 SGI 转发到一个或多个目标处理器。

此外,分配器提供:

  • 每个中断状态的可见性。
  • 软件设置或清除外设中断挂起状态的机制。
10.6.2.1 中断 ID

来自源的中断通过 ID 号进行标识。每个 CPU 接口可以看到多达 1020 个中断。SPIs 和 PPIs 的银行增加了分配器支持的中断总数。

GIC 按如下分配中断 ID 号 ID0-ID1019:

  • 中断编号 ID32-ID1019 用于 SPIs。
  • 中断编号 ID0-ID31 用于对 CPU 接口私有的中断。这些中断在分配器中是bank化的。
  • bank化中断是分配器可以具有相同 ID 的多个中断。bank化中断由其 ID 号和关联的 CPU 接口编号唯一标识。bank化中断 ID 中:
    • ID0-ID15 用于 SGIs
    • ID16-ID31 用于 PPIs
    • 在多处理器系统中:
      • PPI 转发到特定的 CPU 接口,并且对该接口是私有的。分配器在为 CPU 接口优先排序中断时不考虑与其他接口相关的 PPIs。
      • 每个连接的处理器通过写入分配器中的 GICD_SGIR 发出 SGI。每次写入可以生成具有相同 ID 的 SGIs,目标是多个处理器。在分配器中,SGI 由中断号(ID0-ID15)、目标处理器 ID(CPUID0-CPUID7)和发出 SGI 的处理器源 ID(CPUID0-CPUID7)的组合唯一标识。当 CPU 接口向目标处理器传递中断 ID 时,它还提供处理器源 ID,使目标处理器能够唯一识别 SGI。
      • SGI bank化意味着 GIC 可以同时处理多个 SGI,而不会发生资源冲突。
      • 分配器忽略任何来自未连接到任何 CPU 接口的处理器的对 GICD_SGIR 的写入。分配器如何确定向 GICD_SGIR 写入的处理器的源 ID。
    • 在单处理器系统中,没有共享和私有中断的区别,因为所有中断对处理器都是可见的。在这种情况下,处理器源 ID 值为 0。
  • 中断编号 ID1020 至 ID1023 保留用于特殊用途。

系统软件设置每个中断的优先级。此优先级与中断 ID 号无关。在实现 ARM 安全扩展的任何系统中,为了支持处理器之间消息传递的一致模型,ARM 强烈建议所有处理器保留:

  • ID0 到 ID7 用于非安全中断
  • ID8 到 ID15 用于安全中断

10.6.3 CPU 接口

每个 CPU 接口块为连接到 GIC 的处理器提供接口。每个 CPU 接口提供以下编程接口:

  • 启用向处理器发出中断请求信号
  • 确认中断。
  • 指示中断处理的完成。
  • 设置处理器的中断优先级屏蔽。
  • 定义处理器的抢占策略。
  • 确定处理器的最高优先级挂起中断。

启用后,CPU 接口为其连接的处理器获取最高优先级的挂起中断,并确定中断是否具有足够的优先级以向处理器发出中断请求。为了确定是否向处理器发出中断请求,CPU 接口考虑中断优先级屏蔽和处理器的抢占设置。在任何时候,连接的处理器都可以从其 CPU 接口寄存器 GICC_HPPIR 中读取其最高优先级活动中断的优先级。

处理器通过读取 CPU 接口中断确认寄存器来确认中断。读取返回以下之一:

  • 如果中断具有足够的优先级以向处理器发出信号,则返回最高优先级挂起中断的 ID 号。这是对中断确认的正常响应。
  • 特殊情况下,返回一个指示虚假中断的 ID 号。

当处理器在 CPU 接口确认中断时,分配器将中断状态从挂起更改为活动或活动和挂起。此时,CPU 接口可以向处理器发出另一个中断信号,以抢占处理器上的活动中断。如果没有优先级足够高的挂起中断可以向处理器发出信号,接口将撤销对处理器的中断请求信号。

当处理器上的中断处理程序完成中断处理后,它会写入 CPU 接口以指示中断完成。

中断完成有两个阶段:

  • 优先级下降,意味着已处理中断的优先级不再阻止向处理器发出另一个中断信号
  • 中断去激活,意味着分配器移除中断的活动状态。

GICC_CTLR.EOI 模式位决定了:

  • 两个阶段是否同时发生,当处理器写入 CPU 接口的中断结束寄存器时
  • 两个阶段是否分开进行,这样:
    • 当处理器写入 CPU 接口的中断结束寄存器时,优先级下降
    • 中断去激活发生在稍后,当处理器写入 CPU 接口的去激活中断寄存器时。

10.7 中断处理和优先级排序

10.7.1 关于中断处理和优先级排序

中断处理描述了:

  • GIC 如何识别中断。
  • 软件如何编程 GIC 以配置和控制中断。
  • GIC 为每个 CPU 接口上的每个中断维护的状态机。
  • 处理器的异常模型如何与 GIC 交互。

优先级排序描述了:

  • 中断优先级的配置和控制。
  • 挂起中断的执行顺序。
  • 确定中断何时对目标处理器可见,包括:
    • 中断优先级屏蔽
    • 优先级分组
    • 活动中断的抢占
10.7.1.1 在多处理器系统中处理不同的中断类型

GIC 支持外设中断和软件生成的中断

在多处理器实现中,GIC 使用 N-N 模型处理软件生成的中断(SGI)。 GIC 使用 1-N 模型处理外设(硬件)中断。

10.7.1.2 识别支持的中断

GIC 为不同类型的中断定义了不同的 ID 值。然而,GIC 并不要求为任何中断类型实现连续的中断 ID 块。

为了正确处理中断,软件必须知道 GIC 支持哪些中断 ID。软件可以使用 GICD_ISENABLERn 来发现此信息。如果处理器实现了安全扩展,安全软件决定哪些中断对非安全软件可见。非安全软件必须知道它可以看到哪些中断,并可能使用此发现过程来获取此信息。

GICD_ISENABLER0 提供 SGI 和 PPI 的启用位,分别对应寄存器位 [15:0] 和 [31:16]。 其余的 GICD_ISENABLERn,从 GICD_ISENABLER1 开始,提供 SPI 的启用位,起始中断 ID 为 32。

软件发现支持的中断的方法:

  1. 读取 GICD_TYPER。GICD_TYPER.IT Lines Number 字段标识实现的 GICD_ISENABLERn 的数量,从而确定可能支持的最大 SPI 数量。

  2. 写入 GICD_CTLR 以禁用从分配器到 CPU 接口的中断转发。

  3. 对每个实现的 GICD_ISENABLERn,从 GICD_ISENABLER0 开始:

  • 写入 0xFFFFFFFF 到 GICD_ISENABLERn。
  • 读取 GICD_ISENABLERn 的值。读取为 1 的位对应支持的中断 ID。

软件使用 GICD_ICENABLERn 来发现永久启用的中断。对于每个实现的 GICD_ICENABLERn,从 GICD_ICENABLER0 开始,软件:

  1. 写入 0xFFFFFFFF 到 GICD_ICENABLERn。这样禁用所有可以禁用的中断。

  2. 读取 GICD_ICENABLERn 的值。读取为 1 的位对应永久启用的中断。

  3. 写入 1 到任何 GICD_ISENABLERn 位,对应必须重新启用的中断。

GIC 实现了相同数量的 GICD_ISENABLERn 和 GICD_ICENABLERn。

当软件完成其发现过程后,通常会写入 GICD_CTLR 以重新启用从分配器到 CPU 接口的中断转发。

如果 GIC 实现了安全扩展,软件可以使用安全访问来发现所有支持的中断 ID。

使用非安全访问的软件只能发现和控制配置为非安全的中断。如果安全软件在非安全软件发现其支持的中断后更改任何中断的安全配置,则必须将这些更改的影响传达给非安全软件。

在提供中断分组的 GIC 中,软件可以:

  • 写入 GICD_IGROUPRn 寄存器,将中断配置为组 0 或组 1
  • 使用 GICD_CTLR.EnableGrp0 和 GICD_CTLR.EnableGrp1 位独立控制组 0 和组 1 中断的转发。

10.7.2 中断的常规处理

分配器为每个 CPU 接口上的每个支持的中断维护一个状态机。中断的可能状态是:

  • 非活动
  • 挂起
  • 活动
  • 活动和挂起

当 GIC 识别中断请求时,它将其状态标记为挂起。重新生成挂起的中断不会影响中断的状态。

GIC 中断处理顺序如下:

  1. GIC 确定哪些中断是启用的。

  2. 对于每个挂起的中断,GIC 确定目标处理器或处理器组。

  3. 对于每个 CPU 接口,分配器将目标接口的最高优先级挂起中断转发给该接口。

  4. 每个 CPU 接口确定是否向其处理器发出中断请求信号,如果需要,则执行此操作。

  5. 处理器确认中断,GIC 返回中断 ID 并更新中断状态。

  6. 处理器处理完中断后,向 GIC 发出中断结束信号(EOI)。

详细说明如下:

  1. GIC 确定每个中断是否启用。未启用的中断对 GIC 没有影响。

  2. 对于每个启用且挂起的中断,分配器确定目标处理器或处理器组。

  3. 对于每个处理器,分配器根据其持有的每个中断的优先级信息,确定最高优先级挂起中断,并将中断转发到目标 CPU 接口。

  4. 如果分配器将中断请求转发到 CPU 接口,CPU 接口确定中断是否具有足够的优先级以向处理器发出信号。如果中断具有足够的优先级,GIC 向处理器发出中断请求信号。

  5. 当处理器接受中断异常时,它读取其 CPU 接口的 GICC_IAR 以确认中断。读取返回一个中断 ID,对于 SGI,还返回源处理器 ID,处理器使用这些信息选择正确的中断处理程序。当识别到此读取时,GIC 将中断状态更改如下:

  • 如果中断变为活动状态或中断再次生成,从挂起状态变为活动和挂起状态
  • 否则,从挂起状态变为活动状态
  1. 当处理器完成中断处理后,它必须向 GIC 发出中断完成信号。
  • 始终需要有效写入中断结束寄存器(EOIR)
  • 可能还需要随后写入去激活中断寄存器(GICC_DIR)。

对于每个 CPU 接口,GIC 架构要求有效的 EOIR 写入顺序与从 GICC_IAR 或 GICC_AIAR 读取的顺序相反,以便每个有效的 EOIR 写入对应于最近确认的中断。

如果在 EOIR 写入后,没有足够优先级的挂起中断,CPU 接口将撤销对处理器的中断异常请求信号。

CPU 接口从不向连接的处理器发出任何活动和挂起的中断。它仅向处理器发出挂起且优先级足够高的中断:

  • 对于 PPI 和 SGI,特定中断 ID 的活动状态在 CPU 接口之间是银行化的。这意味着如果特定中断 ID 在一个 CPU 接口上处于活动或活动和挂起状态,则该中断在其他接口上不发出信号。
  • 对于 SPI,中断的活动状态对所有 CPU 接口是共同的。这意味着如果中断在一个 CPU 接口上处于活动或活动和挂起状态,则不会在任何 CPU 接口上发出信号。

注意:

  1. 当处理器确认中断时,电平敏感的外设中断将持续存在,因为向 GIC 发出的中断信号保持断言状态,直到运行在处理器上的中断服务例程(ISR)访问断言信号的外设。
  2. 在多处理器实现中,GIC 处理:
  • 使用 GIC N-N 模型处理 PPI 和 SGI,其中一个处理器确认中断对其他 CPU 接口的中断状态没有影响
  • 使用 GIC 1-N 模型处理 SPI,其中一个处理器确认中断会清除其他目标处理器上的中断挂起状态。
  1. 在 GICC_CTLR.ACKCTL 位设置为 0 的软件模型中,使用不同的寄存器来管理组 0 和组 1 中断,如下所示:
  • 组 0 中断使用 GICC_IAR、GICC_EOIR 和 GICC_HPPIR
  • 组 1 中断使用 GICC_AIAR、GICC_AEOIR 和 GICC_AHPPIR ARM 不建议使用 GICC_CTLR.ACKCTL,强烈推荐使用 GICC_CTLR.ACKCTL 设置为 0 的软件模型。
10.7.2.1 优先级下降和中断去激活

当处理器完成中断处理时,它必须向 GIC 发出中断完成信号。中断完成需要对 GIC 状态进行以下更改:

  • 优先级下降:

优先级下降是对有效写入 EOIR(GICC_EOIR 或 GICC_AEOIR)的响应,运行优先级下降。有效写入是指未预测、不被忽略且未写入大于 1019 的中断 ID 值的写入。

优先级下降时,运行优先级从 EOIR 写入引用的中断的优先级降低到:

  • 尚未写入 EOIR 的最高优先级活动中断的优先级

  • 如果没有尚未写入 EOIR 的活动中断,则为空闲优先级。

  • 中断去激活:

中断去激活是中断状态的更改,从:

  • 活动和挂起状态变为挂起状态
  • 活动状态变为空闲状态。

当 GICC_CTLR.EOI 模式设置为 0 时,有效的 EOIR 写入也会去激活它引用的中断。

将 GICC_CTLR.EOI 模式设置为 1 将优先级下降和中断去激活操作分开,处理软件必须:

  1. 执行有效的 EOIR 写入,以在 GIC CPU 接口上导致优先级下降。
  2. 随后写入 GICC_DIR,以去激活中断。

GIC 架构规范要求有效的 EOIR 写入是有序的,因此:

  • 有效的 GICC_EOIR 写入对应于最近确认的中断
  • 有效的 GICC_AEOIR 写入对应于最近确认的组 1 中断。
  • GICC_EOIR 写入是否影响组 0 或组 1 中断取决于以下两者:
    • GICC_CTLR.ACKCTL 位的值
    • 如果 GIC 实现了 GIC 安全扩展,则写入是安全的还是非安全的。 GICC_DIR 写入没有排序要求。

然而,如果软件在以下情况下写入 GICC_DIR,其效果是不可预测的:

  • GICC_CTLR.EOI 模式设置为 0
  • GICC_CTLR.EOI 模式设置为 1 并且没有相应的 GICC_EOIR 或 GICC_AEOIR 写入。

在虚拟化物理中断时,ARM 建议,对于每个运行虚拟机的处理器对应的 CPU 接口:

  • GICC_CTLR.EOI 模式位设置为 1

如果 GIC 实现了 GIC 安全扩展,则 GICC_CTLR.EOI 模式 NS 位设置为 1

10.7.2.2 GIC 中的中断控制

以下部分描述了 GIC 中的中断控制:

  • 中断启用

  • 设置和清除中断的挂起状态

  • 查找中断的活动或挂起状态

  • 生成 SGI

  • 中断启用

对于外设中断,处理器:

  • 通过写入相应的 GICD_ISENABLERn 位启用中断。
  • 通过写入相应的 GICD_ICENABLERn 位禁用中断。

SGI 是永久启用的,或者可以通过写入 GICD_ISENABLERn 启用和禁用。

对 GICD_ISENABLERn 和 GICD_ICENABLERn 的写入控制分配器是否将特定中断转发到 CPU 接口。通过写入相应的 GICD_ICENABLERn 禁用中断不会阻止该中断更改状态,例如变为挂起状态。

  • 设置和清除中断的挂起状态

对于外设中断,处理器可以:

  • 通过写入相应的 GICD_ISPENDRn 位设置挂起状态
  • 通过写入相应的 GICD_ICPENDRn 位清除挂起状态。

对于电平敏感中断:

  • 如果处理器写入相应的 GICD_ICPENDRn 位时中断的硬件信号被断言,则对寄存器的写入对中断的挂起状态没有影响。
  • 如果处理器写入 1 到 GICD_ISPENDRn 位,则无论该中断的硬件信号状态如何,相应的中断变为挂起状态,并且无论信号的断言或撤销如何,保持挂起状态。

对于 SGI,GIC 忽略对相应 GICD_ISPENDRn 和 GICD_ICPENDRn 位的写入。处理器无法通过写入这些寄存器更改软件生成中断的状态。通常,通过写入 GICD_SGIR 来使 SGI 挂起。SGI 的挂起状态也可以使用 ICD_SPENDSGIRn 和 GICD_CPENDSGIRn 位直接修改。

  • 查找中断的活动或挂起状态

处理器可以查找:

  • 通过读取相应的 GICD_ISPENDRn 或 GICD_ICPENDRn 位来查找中断的挂起状态
  • 通过读取相应的 GICD_ISACTIVERn 或 GICD_ICACTIVERn 位来查找中断的活动状态

如果中断处于挂起或活动状态,则相应的寄存器位为 1。如果中断同时处于挂起和活动状态,则相应的位在两个寄存器中都为 1。

在保存或恢复 GIC 状态时,处理器必须考虑所有中断的挂起和活动状态。

对于 SGI,如果至少有一个生成处理器向读取 GICD_ISPENDRn 或 GICD_ICPENDRn 的处理器发送了挂起的中断,则相应的 GICD_ISPENDRn 和 GICD_ICPENDRn 位为只读。如果读取 GICD_ISPENDRn 或 GICD_ICPENDRn 的处理器有挂起的中断,则相应的 GICD_ISPENDRn 和 GICD_ICPENDRn 位为只读。在 GICv2 中,可以通过读取相应的 GICD_SPENDSGIRn 或 GICD_CPENDSGIRn 位来确定发出 SGI 的处理器。

  • 生成 SGI

处理器通过写入 GICD_SGIR 生成 SGI。SGI 可以针对多个处理器,GICD_SGIR 写入指定目标处理器列表。GICD_SGIR 包括以下优化:

  • 仅中断写入 GICD_SGIR 的处理器
  • 中断写入 GICD_SGIR 的处理器以外的所有处理器。

来自不同处理器的 SGI 使用相同的中断 ID。因此,任何目标处理器都可以接收具有相同中断 ID 的不同处理器的 SGI。

然而,如果以下任何一项不同,任何两个 SGI 的挂起状态都是独立的:

  • 中断 ID
  • 源处理器
  • 目标处理器。

在任何时候,CPU 接口上只能有一个具有特定中断 ID 的中断处于活动状态。这意味着 CPU 接口不能同时具有两个具有相同中断 ID 的活动 SGI,即使不同的处理器已向该处理器发送具有相同中断 ID 的 SGI。

在目标处理器的 CPU 接口上,读取 GICC_IAR 对于 SGI 返回中断 ID 和生成中断的处理器的 CPU ID,即中断的源处理器。中断 ID 和源 CPU ID 的组合使目标处理器能够唯一地识别中断。

在多处理器实现中,每个 SGI 中断 ID 的中断优先级由每个目标处理器独立定义,请参阅中断优先级寄存器 GICD_IPRIORITYRn。对于每个 CPU 接口,所有在该接口上挂起的具有特定中断 ID 的 SGI 具有相同的优先级,必须按顺序处理。CPU 接口按顺序处理这些 SGI 的顺序是实现特定的。

10.7.2.3 1-N 模型的影响

在多处理器实现中,GIC 使用 1-N 模型处理目标是多个处理器的外设中断,即 SPI。这意味着当 GIC 从目标处理器之一识别中断确认时,它会清除其他目标处理器上的中断挂起状态。GIC 实现必须确保任何使用 1-N 模型处理中断的中断只能由一个 CPU 接口确认,所有其他接口返回虚假中断 ID。

当多个目标处理器尝试确认中断时,可能会发生以下情况:

  • 处理器读取 GICC_IAR 并获得要服务的中断 ID。
  • 如果处理器在非常相似的时间读取其 GICC_IAR 寄存器,多个目标处理器可能获得相同的中断 ID。系统可能需要目标处理器上的软件确保只有一个处理器运行其中断服务例程。实现这一目标的典型机制是在共享内存中实现中断服务例程(ISR)上的锁。
  • 处理器读取 GICC_IAR 并获得中断 ID 1023,指示虚假中断。处理器可以在其中断服务例程中返回,而不写入其 GICC_EOIR。虚假中断 ID 表明原始中断不再挂起,通常是因为另一个目标处理器正在处理它。

注意:GIC 实现可能确保只有一个处理器可以使 1-N 中断活动,从而消除 ISR 上的锁的需求。这不是架构要求,通用 GIC 代码不能依赖此行为。对于任何处理器,如果中断是活动和挂起的,则 GIC 不会向任何处理器发出中断异常请求,直到清除活动状态。

10.7.2.4 中断处理状态机

GIC 为每个 CPU 接口上的每个支持的中断维护一个状态机。下图显示了此状态机的一个实例以及可能的状态转换。

当分配器启用中断转发和 CPU 接口启用中断信号时,引起每个状态转换的条件如下:

  • 转换 A1 或 A2,添加挂起状态

对于 SGI,如果以下任一情况发生:

  • 软件写入 GICD_SGIR,指定处理器作为目标。
  • 目标处理器上的软件写入与所需源处理器和中断 ID 对应的 GICD_SPENDSGIRn 位。

对于 SPI 或 PPI,如果以下任一情况发生:

  • 外设断言中断请求信号。

  • 软件写入 GICD_ISPENDRn。

  • 转换 B1 或 B2,移除挂起状态

对于 SGI,如果目标处理器上的软件写入 GICD_CPENDSGIRn 的相关位。对于 SPI 或 PPI,如果以下任一情况发生:

  • 电平敏感中断仅因输入信号的断言而挂起,并且该信号被撤销。

  • 中断仅因边沿触发中断信号的断言或写入 GICD_ISPENDRn 而挂起,且软件写入相应的 GICD_ICPENDRn。

  • 转换 C,挂起到活动

如果中断已启用且优先级足够高以向处理器发出信号,则在软件从 GICC_IAR 读取时发生。

  • 转换 D,挂起到活动和挂起

对于 SGI,此转换在以下任一情况下发生:

  • 如果将 SGI 状态设置为挂起的写入操作与读取 GICC_IAR 的操作几乎同时发生。
  • 当两个或两个以上具有相同中断 ID 的挂起 SGI 来自相同源处理器并针对相同处理器时。如果其中一个 SGI 发生转换 C,则其他 SGI 发生转换 D。

对于 SPI 或 PPI,如果以下所有条件成立,此转换发生:

  • 中断已启用。

  • 软件从 GICC_IAR 读取。此读取将活动状态添加到中断中。

  • 此外,以下条件之一适用:

    • 对于电平敏感中断,中断信号保持断言。通常情况下是这样,因为外设在处理器服务中断之前不会撤销中断。
    • 对于边沿触发中断,此转换是否发生取决于读取 GICC_IAR 的时间相对于中断重新断言的检测时间。否则,读取 GICC_IAR 导致转换 C,可能随后是转换 A2。
  • 转换 E1 或 E2,移除活动状态

当软件通过写入 GICC_EOIR 或 GICC_DIR 去激活中断时发生。在实现虚拟化扩展的 GIC 中,如果虚拟 CPU 接口信号指示相应的物理中断已去激活,也会发生此转换。

10.7.2.5 特殊中断编号

GIC 架构保留中断 ID 号 1020-1023 用于特殊用途。在未实现安全扩展的 GIC 中,唯一使用的是 ID 1023。如果没有足够优先级的挂起中断可以向处理器发出信号,则在中断确认响应中返回此值,描述为虚假中断的响应。

见原文

11 看门狗定时器

11.1 概述

看门狗定时器用于在控制器操作受到噪声和系统错误等故障干扰时恢复控制器操作。它可以用作普通的 16 位间隔定时器以请求中断服务。看门狗定时器生成复位信号。

看门狗定时器与 PWM 定时器的使用区别在于看门狗定时器生成复位信号。

11.2 特性

  • 带有中断请求的普通间隔定时器模式
  • 当定时器计数值达到 0(超时)时,内部复位信号被激活。
  • 电平触发中断机制

11.3 功能描述

11.3.1 看门狗定时器操作

下图显示了看门狗定时器的功能模块图。看门狗定时器仅使用 PCLK 作为其源时钟。PCLK 频率被预分频以生成相应的看门狗定时器时钟,结果频率再次被分频。

预分频器值和频率分频因子在看门狗定时器控制(WDTCON)寄存器中指定。有效的预分频器值范围为 0 到 28-1。频率分频因子可以选择为 16、32、64 或 128。

使用以下方程计算看门狗定时器时钟频率和每个定时器时钟周期的持续时间:

11.3.2 WTDAT 和 WTCNT

一旦启用看门狗定时器,监控定时器数据(WTDAT)寄存器的值不能自动重新加载到定时器计数器(WTCNT)中。因此,在看门狗定时器启动之前,必须向看门狗定时器计数(WTCNT)寄存器写入初始值。

11.3.3 调试环境的考虑

当 MDIRAC-III 处于调试模式嵌入式 ICE 时,看门狗定时器必须停止工作。看门狗定时器可以从 CPU 内核信号(DBGACK 信号)中确定它当前是否处于调试模式。一旦 DBGACK 信号被断言,看门狗定时器超时时,其复位输出不被激活。

11.3.4 特殊功能寄存器

11.3.4.1 内存映射

Register

Type

Description

Reset Value

WTCON

RW

Watchdog timer control register

0x8021

WTDAT

RW

Watchdog timer data register

0x8000

WTCNT

RW

Watchdog timer count register

0x8000

WTCLRINT

W

Watchdog timer interrupt register

11.3.4.2 看门狗定时器控制 (WTCON) 寄存器

WTCON 寄存器允许用户启用/禁用看门狗定时器,从 4 个不同的源中选择时钟信号,启用/禁用中断,以及启用/禁用看门狗定时器输出。

看门狗定时器用于在电源打开后恢复故障。如果不需要控制器重新启动,应禁用看门狗定时器。

如果用户想使用看门狗定时器提供的普通定时器,应启用中断并禁用看门狗定时器。

11.3.4.3 看门狗定时器数据 (WTDAT) 寄存器

WTDAT 寄存器用于指定超时持续时间。在初始看门狗定时器操作中,WTDAT 的内容不能自动加载到定时器计数器中。然而,使用 0x8000(初始值)将驱动首次超时。在这种情况下,WTDAT 的值将自动重新加载到 WTCNT 中。

11.3.4.4 看门狗定时器计数 (WTCNT) 寄存器

WTCNT 寄存器在正常操作期间包含看门狗定时器的当前计数值。注意,当看门狗定时器最初启用时,WTDAT 寄存器的内容不能自动加载到计数寄存器中,因此在启用之前必须将 WTCNT 寄存器设置为初始值。

11.3.4.5 看门狗定时器中断 (WTCLRINT) 寄存器

WTCLRINT 寄存器用于清除中断。中断服务例程负责在中断服务完成后清除相关中断。向此寄存器写入任何值都会清除中断。禁止读取此寄存器。

寄存器描述见原文

12 实时时钟 (RTC)

12.1 概述

实时时钟 (RTC) 模块可以在系统电源关闭时由备用电池供电。RTC 模块由 32 位自由计数寄存器组成,使用外部 32.768 kHz 晶体工作,并且可以执行闹钟功能。

12.2 特性

  • 32 位计数器
  • 闹钟功能:闹钟中断或从掉电模式唤醒
  • 独立电源引脚 (VDD_RTC)
  • 支持掉电模式的 1 Hz 时间中断
  • 生成电源管理复位信号

12.3 模块图

在上图中显示了 RTC 模块图。RTC 模块接收 32.768 kHz 的外部时钟,并将其分频成 1 Hz。RTC 计数器根据外部时钟工作。

注意:如上图所示,中间虚线左右两部分分别使用 RTC 电源和正常电源。RTC 电源模块使用汞电池,但实际使用汞电池的模块是 RTC 电源模块中的 RTC 计数器。电池寿命约为五年。

在上图中,点 [A] 的输出应用于电源管理器或中断控制器。输出在正常模式下应用于中断控制器,在电源模式下应用于电源管理器。

注意:即使不使用 RTC,也应提供 RTC 电源和 RTC 时钟。

12.4 功能描述

12.4.1 备用电池操作

如上图所示,由于 RTC 模块使用独立的电源(纽扣电池),即使外部电源关闭,RTC 模块仍能工作。

即使系统电源关闭,RTC 逻辑也可以通过 VDD_RTC 引脚从备用电池供电。当系统电源关闭时,应屏蔽 CPU 和 RTC 逻辑的接口,备用电池仅驱动振荡电路和内部 32 位 RTC 计数器以最小化功耗。换句话说,当 S5P6818 转入掉电模式时,RTC 模块可以用作唤醒源。

要使用 RTC 模块作为唤醒源,需要在系统进入掉电模式之前将 RTCCTRL.ACCESSENB 位设置为“0”。将其设置为“0”是为了在系统进入掉电模式时仍能使用 RTC 作为唤醒源。

即使不使用 RTC 模块,也必须将 RTC 时钟连接到 S5P6818,因为 RTC 时钟用作电源管理操作的时钟。

12.4.2 RTC 操作

RTC 在掉电模式或正常操作模式下在指定时间生成闹钟信号。在正常操作模式下,闹钟中断被激活。在掉电模式下,电源管理唤醒信号和 RTCALARM 被激活。闹钟时间设置寄存器 (RTCALARM) 决定闹钟时间设置的条件,RTCINTENB.ALARMINTENB 位决定闹钟启用/禁用状态。

生成闹钟中断的步骤如下: 首先,将计数值写入 RTCCNTWRITE 寄存器。(为此,应提前检查 RTCCTRL.RTCCNTWAIT 的忙状态。写入值在两个 32.768 kHz 时钟周期后应用到寄存器。)之后,将希望生成中断的点的值写入 RTCALARM 寄存器。RTC 计数器以 1 Hz 的间隔增加计数值。如果 RTCINTENB.ALARMINTENB 位设置为“1”时,两个寄存器(RTCCNTWRITE 和 RTCALARM 寄存器)的值相等,则会发生中断。

以类似的方式,在 1Hz 上升沿检测到 RTC 中断。在这种情况下,通过将 RTCINTENB.RTCINTENB 位设置为“1”来生成中断。

此外,RTCINTENB 寄存器包含挂起清除功能,挂起清除通过写入“0”执行。

12.4.3 访问 RTC 时间计数设置/读取寄存器

要访问 RTC 时间计数读取寄存器 (RTCCNTREAD) 和 RTC 时间计数设置寄存器 (RTCCNTWRITE),在访问这些寄存器之前,将 RTCCTRL.RTCCNTWRITEENB 位设置为“1”。当 CPU 完成访问这些寄存器时,应将 RTCCTRL.RTCCNTWRITEENB 位设置为“0”,以保护 RTC 计数器的内容免受异常状态下未知问题的影响。RTCCNTWRITEENB 位决定 RCCNTWRITE 寄存器值对 RTC 计数器的反映。

12.4.4 中断挂起寄存器

对于 S5P6818 的 RTCINTPND 寄存器,仅提供“读取”功能,但可以读取当前的挂起状态。

由于 RTCINTPND 寄存器只有“读取”功能,挂起清除功能由 RTCINTENB 寄存器控制。通过禁用相关中断来清除中断挂起状态。因此,如果将 RTCINTENB 寄存器的相应位设置为“1”,则启用相关中断。如果将相应位设置为“0”,则禁用中断并清除挂起位。

12.4.5 电源管理复位时间控制

RTC 控制从 CorePOR 释放 nPWRMANRST(电源管理复位)的时间。有关设置 nPWRMANRST 释放时间,请参阅 RTCCORERSTIMESEL 寄存器。

13 ALIVE

13.1 概述

在去除 S5P6818 核心电源的状态下,一些 PAD 需要持续供电并保持驱动 PAD 为某一特定值。

例如,控制 STN LCD 的位在去除核心电源的状态下应保持驱动 PAD 为低电平。32 位值可以保存在暂存寄存器中,即使在核心电源关闭的情况下也能保持该值。

用户可以通过按下开关来开启/关闭系统电源,ALIVE 在这些瞬时电源控制中执行必要的功能。

13.2 特性

  • ALIVE GPIO PADs 都是输入/输出 PAD。
  • 即使在核心电源关闭时,ALIVE 模块的值仍然保持。
  • ALIVE 模块不会解锁。要更改控制寄存器的值,需要直接对 SR-触发器的设定/复位引脚进行编程。
  • 芯片睡眠模式唤醒源 (AliveGPIO, VDDToggle, RTCIRQ)
  • 电源 IC 启用。
  • 支持 PAD 保持功能
  • 扫描链未插入到 ALIVE GPIO。

13.3 电源隔离

13.3.1 核心电源关闭

在核心电源(CoreVDD)关闭的情况下,由于 ALIVE VDD 保持供电,ALIVE 寄存器保持其值。连接到 NPOWERGATING 的下拉寄存器在核心电源关闭或不稳定的间隔期间执行保持 ALIVE 寄存器控制位的功能。

13.3.2 电源门控

在核心电源关闭的情况下,应保持设定/复位值为低,以确保 ALIVE 寄存器的值安全。因此,由于 NPOWERGATING 寄存器连接到下拉寄存器,它设计为在核心电源关闭的情况下保持低值。

13.4 ALIVE 寄存器

除 NPOWERGATING/AliveDetectPending 寄存器外,ALIVE 模块的所有寄存器在核心电源关闭时保持寄存器中写入的值,并在 ALIVE 电源关闭时复位。ALIVE 寄存器没有自己的时钟,在 NPOWERGATING 寄存器为 "1"(NPOWERGATING = 1)时可以读写。特别是在写模式下,可以通过 SET/RST(复位)寄存器写入 ALIVE 寄存器。以下是根据寄存器 SET/RST 的寄存器功能示例。

13.4.1 ALIVE GPIO 检测寄存器

对于 ALIVE GPIO 输入,在异步/同步检测模式下,ALIVE GPIO 检测寄存器可用作核心电源开启、ALIVE 中断、睡眠模式唤醒源。当检测到这些事件时,ALIVEGPIODETECTPENDREG[n] 寄存器被设置为 "1"。以下是根据检测模式的操作示例。

13.4.2 暂存寄存器

程序员可以在暂存寄存器中保存任何 32 位值。在 CoreVDD 电源关闭的情况下,暂存寄存器的值仍然保持。

13.4.3 ALIVE GPIO 控制寄存器

无论 GPIO 块如何,ALIVE GPIO 都通过 ALIVE 块进行控制。

控制寄存器具有 ALIVE GPIO 输入/输出模式启用、上拉和 ALIVE GPIOPADOut 功能。

13.5 瞬时电源控制

13.5.1 CoreVDD 电源开启

通过 VDDPWRTOGGLE 开关、ALIVE GPIO 检测、RTC 中断,可以将核心电源从关闭状态切换到开启状态。在电源开启的情况下,系统启动后可以通过设置 VDDPWRON_DDR/VDDPWRON 位来处理 VDDPWRTOGGLE 开关、ALIVE GPIO 检测和 RTC 中断。(当电池故障发生时,不允许电源开启。)

13.5.2 CoreVDD 电源关闭

通过清除 VDDPWRON_DDR/VDDPWRON 位,可以将核心电源从关闭状态切换到开启状态。

核心块和 ALIVE 块通过 PowerGating 寄存器连接,这使得即使在清除 VDDPWRON_DDR/VDDPWRON 位后核心电源关闭时,ALIVE 寄存器仍然能够安全地保持其自身的值。

以下是芯片电源序列示例:

  1. 不要保持初始 Pad 状态。(NPADHOLDx = 1)

  2. 在关闭电源之前保持 Pad 状态。(NPADHOLDx 寄存器 = 0)

  3. 关闭 VDDPWRON

  4. 电源关闭后,非 ALIVE POR 被设为低电平

  5. 按下切换开关开始供电

  6. 当内部 POR 打开时,Pad 释放保持状态(这为防止电源开启后 Pad 保持释放提供了稳定性)

  7. 系统启动后,VDDPWRON 和 PadHold 寄存器应同时释放。

  8. 释放 VDDPWRON。

除电源开启复位外,NPADHOLDENBx 寄存器应设置为“0”。

13.6 睡眠模式

S5P6818 支持两种睡眠模式(SleepMode1,SleepMode2)。在睡眠模式下核心电源关闭,芯片通过唤醒源(如 ALIVE GPIO 检测、RTC 中断和 nVDDPWRTOGGLE 开关按下)从睡眠模式中唤醒。(如果发生电池故障,则无法唤醒)

  • 清除 ALIVE GPIO 检测挂起寄存器
  • 在用户关闭电源之前保持 Pad 状态。(SleepMode1: NPADHOLDx[2:1] = 2'b00, SleepMode2: NPADHOLDx[2:0] == 3'b000)
  • 清除 VDDPWRON 寄存器
  • 清除 NPOWERGATING 寄存器
  • 设置 S5P6818 停止模式(参见时钟和电源管理部分)

13.7 电源管理单元 (PMU)

13.7.1 概述

PMU 是 ALIVE 内部的一个模块。它控制芯片内子模块的内部电源开关。PMU 可以控制这些模块的电源开关:

  • GPU (图形处理单元)
  • MFC (多功能编解码器)

14 ID 寄存器

14.1 概述

S5P6818 的 ECID 模块在 e-fuse ROM 上存储 128 位的 DIEID 信息。每个芯片都有自己的 DIEID 以识别它。

14.2 特性

  • 支持 128 位 DIEID
  • 支持 128 位安全启动 ID
  • 支持 128 位安全 JTAG ID
  • 支持 128 位后门 JTAG ID
  • 可编程安全启动 ID、安全 JTAG ID、后门 JTAG ID

详细操作见原文

15 内存控制器

15.1 概述

S5P6818 内存控制器基于统一内存架构 (UMA)。该控制器由两个控制单元组成:MCU-A 和 MCU-S。每个单元都有专用的控制引脚。

15.1.1 统一内存架构 (UMA)

• 两个独立的内存控制器:

  • MCU-A: DDR3/LVDDR3 (低电压 DDR3)/LPDDR3/LPDDR2
  • MCU-S: 静态内存
  • MCU-A 特性:
  • MCU-A 由 DREX 和 DDRPHY 组织
  • 支持 DDR3/LVDDR3 (低电压 DDR3)/LPDDR3/LPDDR2 内存
  • 支持 8/16/32 位 2 GB SDRAM
  • 单bank内存 (32 位数据总线宽度)
  • 支持省电模式
  • 支持自刷新模式
  • MCU-S 特性:
  • 静态内存
  • 两个静态内存芯片选择
  • NAND 闪存接口
  • 使用锁存地址支持 23 位地址
  • SLC NAND, MLC NAND,带有 ECC (支持 BCH 算法)
  • 静态内存映射影像

15.3 功能描述

S5P6818 的内存控制器区域分为 MCU-A 和 MCU-S bank。MCU-A bank 连接到 DDR3/LVDDR3 (低电压 DDR3)/LPDDR3/LPDDR2,是 S5P6818 的主内存,数据总线宽度为 32 位。

MCU-S bank 是静态bank,可以连接到静态内存/设备、NAND。

15.3.1 MCU-A Bank 特性

• 兼容 JEDEC 标准 LPDDR2-S4/LPDDR3/LVDDR3 (低电压 DDR3)/DDR3 SDRAM • 支持总线时钟和内存时钟之间的 1:2 同步操作 • 集成 TrustZone 地址空间控制单元 • 支持多达两个内存级 (芯片选择) 和每个内存芯片 4/8 个bank • 支持每个芯片选择 512 Mb、1 Gb、2 Gb、4 Gb、8 Gb 和 16 Gb 的密度 • 支持 QoS 方案以确保实时应用的低延迟 • 无序调度策略以提高性能 • 支持提前写入响应 • 支持级/bank交错 • 支持未完成的独占访问 • 支持bank选择预充电策略 • 包含嵌入式性能监视器 • DREX 时钟:MBCLKn(40e0xMHezl) • DDRPHY 时钟:MCLK(800 MHz,待定),MDCLK(800 MHz,待定) • MBCLK:MCLK = 1:MBCLKx2 • MDCLK:MDCLK 0° 相位主 DLL 时钟(400 到 800 MHz)。该时钟应与正常模式下的 clk2x 频率相同,并由与 MCLK 使用相同的 PLL 生成。但主 DLL 无法在 400 MHz 以下锁定。如果 MCLK 低于 400 MHz,可以使用 clk2x 的双频率来锁定主 DLL 以进行低频操作

15.3.2 MCU-S Bank 特性

• 锁存寻址
外部连接的引脚数量为 ADDR [18:0]。然而,MCU-S Bank 的总地址为 26 位。ADDR[8:2] 和 ADDR[25:19] 分配到相同的引脚,系统具有两次输出地址的结构。如果系统使用 ADDR[19] 或以上,通过系统配置引脚 (CfgSTLATADD) 可以设置更高地址 (ADDR[25:19])。在这种情况下,首先应通过使用外部锁存 IC 锁存由 ADDR[25:19] 配置的地址。 • 16 位数据总线宽度除 NAND 闪存 (8 位) 外的静态内存寄存器具有总线宽度选择寄存器 • 静态内存控制器正常的静态内存 (SRAM 和 ROM) 或静态设备连接。存在多达两个静态芯片选择信号。 • NAND 闪存控制器支持小块和大块 NAND 闪存。最多可连接两个 NAND 闪存。 支持 SLC 和 MLC NAND 闪存。 使用二进制 BCH 编码,支持多达 4/8/16/24/40/60 位错误校正 (1024 或 512 字节)。

15.3.3 内存映射

内存映射大致分为一个 SDRAM Bank (MCU-A) 和一个静态 bank (MCU-S)。静态 bank 由 NAND 闪存控制器和静态内存控制器组成。MCU-A bank 包括一个线性阵列区域和显示阵列区域。

15.3.4 MCU-A 地址映射

DREX 将来自 AXI 从端口的 AXI 事务地址修改为内存地址,包括芯片选择、bank地址、行地址、列地址和内存数据宽度。 “宽度”表示所用 DRAM 的数据宽度,固定为 32 位(4 字节),因此,在字节寻址的地址值上,相应的宽度固定为 2。

相关的 SFR 在 MEMCONFIG0/1 寄存器中的 BANK_LSB、CHIP_INTER_EN、BIT_SEL_EN 和 CHIP_MAP。在芯片交错的情况下,两个芯片的配置应相同。 要将内存设备的芯片选择映射到地址映射的特定区域,需要设置 MEMCONFIG0 寄存器的 CHIP_BASE 和 CHIP_MASK 位字段(参见寄存器描述)。如果存在内存设备的 chip1,则还必须设置 MEMCONFIG1 寄存器。然后,AXI Master 请求的 AXI 地址被分为 AXI 基地址和 AXI 偏移地址。AXI 基地址激活相应的内存芯片选择,AXI 偏移地址根据 MEMCONFIG0/1 和 MEMCONTROL 寄存器设置的 bank、行、列号和数据宽度映射到内存地址。

有两种方式来映射 AXI 偏移地址,如下所示:

  • 简单交错映射
  • 列分割交错映射
  • 随机交错映射
  • 芯片交错映射
15.3.4.1 列分割交错映射

CHIP_INTER_EN = 0x0, BIT_SEL_EN = 0x0 和 CHIP_MAP = 0x2 表示列分割交错映射。

如图 所示,列分割交错映射方法按行、列高、bank、列低和宽度的顺序映射 AXI 地址。

相关的 SFR 是“BANK_LSB”,它选择列低大小(参见寄存器描述)。如果 BANK_LSB 与实际内存页大小相同,则列不会被分割。

15.3.4.2 随机交错映射

除了列分割交错地址映射,DREX 还支持随机交错映射。如下面的图所示,通过将选自 AXI 地址的附加位与 bank 地址进行异或操作来实现 bank 地址的随机化。通过更积极地将内存访问分布到多个 bank 中,这进一步提高了性能。

CHIP_INTER_EN = 0x0 和 BIT_SEL_EN = 0x1 表示随机交错映射。

15.3.4.3 级交错映射

RANK_INTER_EN = 0x1 表示级交错映射。如果启用了 RANK_INTER_EN,那么上图将分别更改为下图。

Rank Interleaved Address Mapping (CHIP_MAP = 0X2, BIT_SEL_EN = 0X0)

Rank Interleaved Address Mapping (CHIP_MAP = 0x2, BIT_SEL_EN = 0x1)

15.3.5 低功耗操作

控制器以以下五种方式执行低功耗内存操作。每个功能彼此独立并可同时执行。

当内存处于 SREF 状态时,如果收到 AXI 请求,控制器将自动发出 SRX 命令。

15.3.5.1 AXI 低功耗通道

控制器有一个 AXI 低功耗通道接口,用于与系统控制器等低功耗管理单元通信,使内存设备进入自刷新模式。

15.3.5.2 动态掉电

SDRAM 设备具有激活/预充电掉电模式。通过将 CKE 解除为低电平触发该模式。当任何一个 bank 打开时,它进入激活掉电模式。否则,它进入预充电掉电模式。

当请求缓冲器在一定数量的周期内保持为空时(PWRDNCONFIG.DPWRDN_CYC 寄存器),DREX-1 自动将内存设备的状态更改为激活/预充电掉电模式。内存设备根据 SFR 设置进入激活/预充电掉电模式或强制预充电掉电模式。两种掉电模式的描述如下:

  1. 激活/预充电掉电模式:在不考虑是否有行打开的情况下进入掉电。

  2. 强制预充电掉电模式:关闭所有 bank 后进入掉电。

当 DREX-1 在内存设备处于掉电模式时收到新的 AXI 事务时,它会自动唤醒内存设备并执行正常操作。

15.3.5.3 动态自刷新

与动态掉电功能类似,如果请求缓冲器在一定数量的周期内保持为空(PWRDNCONFIG.DSREF_CYC 寄存器),DREX-1 将内存设备的状态更改为自刷新模式。由于退出掉电模式需要很多周期,因此建议动态自刷新入口的空闲周期阈值比动态掉电的阈值更长。

15.3.5.4 时钟停止

为了减少内存设备和控制器的 I/O 功耗,如果 LPDDR / LPDDR2-S4 处于空闲模式或自刷新模式,并且 DDR3 处于自刷新模式,可以停止时钟。如果启用此功能,控制器将自动执行时钟停止功能。在 DDR3 中,时钟停止功能必须通过软件考虑 tCKSRX / tCKSRE / tCKESR 时间打开和关闭。

15.3.5.5 直接命令

使用直接命令功能,通过 APB3 端口直接向内存设备发送内存命令。这样,可以强制内存设备进入激活/预充电掉电、自刷新或深度掉电模式。

15.3.6 预充电策略

对于预充电策略,DREX 有两个选项 - 端口选择预充电和每端口超时预充电。

15.3.6.1 端口选择预充电

由于应用程序对页面策略的偏好不同,工程师难以决定使用开放页面策略还是关闭页面(自动预充电)策略。与其将页面策略应用于所有端口,不如端口选择预充电策略允许用户为每个端口选择预充电策略(参见 PRECHCONFIG.PORT_POLICY)。这样,可以为某些应用程序分配开放页面策略,为其他应用程序分配关闭页面(自动预充电)策略。

  • 开放页面策略:在读取或写入后,访问的行保持打开状态。
  • 关闭页面(自动预充电)策略:当 DREX 发出最后一个读取或写入 CAS 命令时,它会增加一个自动预充电标志。
15.3.6.2 超时预充电

如果某个端口使用开放页面策略,数据访问后该行保持打开。如果发生这种情况,并且保持打开状态的 bank 在特定数量的周期内未调度(PRECHCONFIG.TP_CNT 位字段),控制器将自动发出预充电命令以关闭该 bank。

15.3.7 服务质量

DREX 提供服务质量 (QoS) 功能,以确保实时主设备的低延迟。具体来说,DREX 使用基于超时的 QoS 执行方案。

  • 当 DREX 接收到 AXI 事务时,会为相应的内存请求分配一个预定义的 QoS 超时值。
  • 当计时器到期时,请求会提升到最高优先级,以便在仲裁阶段立即选择。
15.3.7.1 BRB 仲裁

端口中 AXI 请求 FIFO 头部的 AXI 请求被仲裁到 Bank 请求缓冲区 (BRB)。每个端口的优先级由 FIFO 中 AXI 请求的最高 AxQoS 值决定。当 AXI 请求 FIFO 计时器 (CONCONTROL.TIMEOUT_LEVEL0) 到期时,FIFO 的端口具有最高优先级,以防止低优先级端口的饥饿。

15.3.7.2 基于 AxQoS 的 QoS

当 DREX 接收到 AXI 请求时,它根据 AxQoS 值(0 到 15)分配预定义的 BRB 超时值 (QOSCONTROL_N.CFG_QOS, n= 0 到 15)。当 BRB 计时器到期时,请求在请求调度器中具有最高优先级。当 BRB 已满或请求的数据缓冲区已满时,BRB 计时器按预定义值 (BRBQOSCONFIG.BRB_QOS_TIMER_DEC) 递减,而不是 1。

15.3.7.3 BRB 空间预留

当为 AXI AR/AW 端口启用 BRB 空间预留 (BRBRSVCONTROL.BRB_RSV_EN_{W, R}{0,1,2,3}) 时,当目标 BRB 的占用超过 BRB 阈值 (BRBRSVCONFIG.BRB_RSV_TH_{W, R}{0,1,2,3}) 时,AXI 端口停止发出 BRB 仲裁请求。

15.3.7.4 紧急优先级提升

除了传统的 QoS 方案外,DREX-1 支持基于紧急信号的优先级提升。此功能使用两个附加输入信号实现:

  • 每个 AXI 端口有附加的 ARMARKER[4:0] 和 AWMARKER[4:0] 输入信号。这些信号用于标识给定请求的 QoS 类,例如,发送请求的主设备,或在特定应用场景中两个特定主设备之间发生的通信。
  • EMERGENCY_R[30:0] 和 EMERGENCY_W[30:0] 输入信号,用于指定需要更高优先级的流量类。

默认情况下,主设备将 EMERGENCY_R 和 EMERGENCY_W 的值驱动为 31'b0。当某个请求类需要更高优先级时,主设备驱动相应的 EMERGENCY_R(读取)或 EMERGENCY_W(写入)位,以提升该类所有流量的优先级。具体而言,当 EMERGENCY_R[n] 驱动为 1 时,所有 ARMARKER 值为 n + 1 的读取请求优先级提高,当 EMERGENCY_W[n] 驱动为 1 时,所有 AWMARKER 值为 n + 1 的写入请求优先级提高。

当相应的 EMERGENCY_R/EMERGENCY_W 信号返回到 0 时,优先级返回到其原始优先级。注意,无论 EMERGENCY_R/EMERGENCY_W 信号如何,超时计数器应继续递减。

有可编程寄存器(每 AxMARKER 值),用于确定在优先级提升情况下移动到的优先级级别。用户可以在“超时”优先级和“紧急页面未命中”优先级之间进行选择。

15.3.8 Trust Zone 地址空间控制 (TZASC)

TZASC 对内存的 AXI 访问执行安全检查。这支持可配置数量的区域。每个区域的大小、基地址、启用和安全参数都是可编程的。使用 SECURE_BOOT_LOCK 输入信号,可以锁定程序员视图以防止错误写入。它提供在使用 AXI 响应通道和中断报告故障的可编程性。

15.3.8.1 区域

一个区域是一个连续的地址空间。TZASC 为每个区域提供一个可编程的安全权限字段。安全权限值用于使 TZASC 接受或拒绝对该区域的事务访问。事务使用 arprots[2:0] 或 awprots[2:0] 信号来确定该事务的安全设置。区域特征如下:

  • 最小区域粒度:64 KB
  • 区域数量:8 个不重叠区域(区域 1 到 8)+ 1 个默认区域(区域 0)
  • 区域优先级:priority_of_region_1 到 8 > priority_of_region_0
  • 区域的地址空间
    • 基地址:对齐到 64 KB
    • 区域大小:64 KB × N
    • 区域最大大小:4 GB
    • 区域 0 覆盖整个地址空间
  • 不支持子区域

区域的安全属性功能如下:

  • 4 位权限
    • 每个位表示是否允许(安全读取、安全写入、非安全读取、非安全写入)
    • 例如)具有安全属性 b'1100 的区域允许安全访问(读取和写入),但禁止非安全访问
  • 1 位区域锁定
    • SECURE_BOOT_LOCK 断言后,区域配置(SFR)被锁定
  • 1 位区域启用
    • 区域 1 到 8 由 SFR 启用
    • 区域 0 始终启用
15.3.8.2 拒绝的 AXI 事务

如果 AXI 事务没有足够的安全权限,则对于:

  • 读取:TZASC 通过将读数据总线 RDATA 的所有位设置为零来响应主设备。
  • 写入:TZASC 阻止数据写入内存。

TZASC 动作寄存器控制当区域权限失败时,TZASC 是否向主设备发出信号,以及它提供的响应类型。

15.3.8.3 防止对寄存器的写入和使用 SECURE_BOOT_LOCK

TZASC 期望 SECURE_BOOT_LOCK 信号至少被断言一个时钟周期。在 TZASC 采样到 SECURE_BOOT_LOCK 为高电平后的一个时钟周期内,除非通过断言 ARESETn 重置 DREX,否则以下寄存器不能被写入。

断言 SECURE_BOOT_LOCK 信号使以下寄存器变为只读:

  • TZASC 锁定选择寄存器

通过适当编程 TZASC 锁定选择寄存器并断言 SECURE_BOOT_LOCK 信号,使以下寄存器变为只读:

  • TZASC 锁定范围寄存器

通过编程 TZASC 锁定选择寄存器和 TZASC 锁定范围寄存器并断言 SECURE_BOOT_LOCK 信号,可以锁定 TZASC 的行为,以防止意外或错误写入 TZASC 锁定范围寄存器中指定的区域。然而,允许读取访问这些区域:

  • TZASC 区域设置低寄存器 n
  • TZASC 区域设置高寄存器 n
  • TZASC 区域属性寄存器 n
15.3.8.4 使用独占访问

如果主设备对地址区域执行独占访问,则必须对 TZASC 进行编程,以允许该地址区域的读取和写入访问,针对 arprots[1] 和 awprots[1] 的预期设置,否则读取或写入事务可能会失败。TZASC 权限失败的独占访问不会修改独占监视器的状态。

15.3.9 MCU-A 应用说明

15.3.9.1 DREX 初始化 LPDDR2/3

以下顺序应用于初始化 LPDDR2 设备。除非另有说明,否则这些步骤是强制性的。

  1. 为内存设备提供稳定的电源,DREX 必须将 CKE 断言并保持为逻辑低电平。然后应用稳定的时钟。

  2. 设置 PHY 为 DDR3 操作模式,RL/WL/BL 寄存器和处理 ZQ 校准。请参阅 PHY 手册中的“初始化”。

  3. 将 CONCONTROL.DFI_INIT_START 字段断言为高,但其他字段保留默认值。(AREF_EN 和 IO_PD_CON 应关闭)。初始化和训练序列中应禁用 CGCONTROL 中的时钟门控。

  4. 等待 PHYSTATUS0.DFI_INIT_COMPLETE 字段变为“1”。

  5. 将 CONCONTROL.DFI_INIT_START 字段解除为低电平。

  6. 设置 PHY 为 DQS 下拉模式。(参阅 PHY 手册)

  7. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“1”以更新 DLL 信息。

  8. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“0”。

  9. 设置 MEMBASECONFIG0 寄存器。如果有两个外部内存芯片,设置 MEMBASECONFIG1 寄存器。

  10. 设置 MEMCONFIG0 寄存器。如果有两个外部内存芯片,也要设置 MEMCONFIG1 寄存器。

  11. 设置 PRECHCONFIG0/1 和 PWRDNCONFIG 寄存器。

  12. 根据内存 AC 参数设置 TIMINGAREF、TIMINGROW、TIMINGDATA 和 TIMINGPOWER 寄存器。

  13. 如果需要 QoS 方案,设置 QosControl0 到 15 和 QosConfig0 到 15 寄存器。

  14. 设置 PHY 为 LPDDR2/3 初始化。LPDDR2/3 初始化时钟周期为 18 ns 至 100 ns。如果 LPDDR2/3 初始化时钟周期为 20ns,则按以下步骤 15 至 21(参见 PHY 手册)。

  15. 将 PHY CTRL_OFFSETR0 和 CTRL_OFFSETW0 值设置为 0x7F。

  16. 将 PHY CTRL_OFFSETD 值设置为 0x7F。

  17. 将 PHY CTRL_FORCE 值设置为 0x7F。

  18. 将 PHY CTRL_DLL_ON 设置为低电平。

  19. 等待 10 个 PCLK 周期。

  20. 将 PHYCONTROL0.FP_RESYNC 位字段设置为 1 以更新 DLL 信息。

  21. 将 PHYCONTROL0.FP_RESYNC 位字段设置为 0。

  22. 确认 CKE 在上电后至少 100ns 处于逻辑低电平。

  23. 使用 DIRECTCMD 寄存器发出 NOP 命令,将 CKE 断言并保持为逻辑高电平。

  24. 等待至少 200 us。

  25. 使用 DIRECTCMD 寄存器发出 MRS 命令以重置内存设备并编程操作参数。

  26. 等待至少 10 us。

  27. 根据规格书发出适当的 lpddr2 初始化命令,例如 IO 校准(MR #10)、设备特性 1、2(MR #1、#2)。详情请参阅 LPDDR2/3 规格书。

  28. 如果有两个外部内存芯片,请对 chip1 内存设备执行步骤 23 至 27。

  29. 将 PHY CTRL_OFFSETR0 和 CTRL_OFFSETW0 值设置为 0x0。

  30. 将 PHY CTRL_OFFSETD 值设置为 0x0。

  31. 启用 PHY CTRL_DLL_ON。

  32. 等待 10 个 PCLK 周期。

  33. 将 PHY CTRL_START 值设置为“0”。

  34. 将 PHY CTRL_START 值设置为“1”。

  35. 等待 10 个 PCLK 周期。

  36. 等待 PHYSTATUS0.DFI_INIT_COMPLETE 字段变为“1”。

  37. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“1”以更新 DLL 信息。

  38. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“0”。

  39. 如果需要任何调平/训练,启用 CTRL_ATGATE、P0_CMD_EN、INITDESKEWEN 和 BYTE_RDLVL_EN。禁用 CTRL_DLL_ON 并设置 CTRL_FORCE 值。(参见 PHY 手册)

  40. 如果不需要 LPDDR3 的写入调平,请跳过此过程。如果需要写入调平,请使用 MRS 命令将 LPDDR3 设置为写入调平模式,设置 ODT 引脚高电平并使用 WRLVL_CONFIG0 寄存器(偏移量 = 0x120)设置 tWLO,并通过 PHY APB I/F 设置相关的 PHY SFR 字段(参见 PHY 手册)。要生成 dfi_wrdata_en_p0 的 1 个周期脉冲,请向 WRLVL_CONFIG1 寄存器(偏移地址 = 0x124)写入 0x1。要读取内存数据的值,请使用 CTRL_IO_RDATA(偏移量 = 0x150)。如果写入调平完成,则将 ODT 引脚设置为低电平并禁用 LPDDR3 的写入调平模式。

  41. 如果不需要 LPDDR3 的 CA 校准,请跳过此过程。如果需要 CA 校准,请通过 PHY APB I/F 设置相关的 PHY SFR 字段(参见 PHY 手册)。通过 MR41 将 LPDDR3 设置为 CA 校准模式。对于 CKE 断言、解除、CA 值和 tADDR 设置,请使用 CACAL_CONFIG0(偏移量 = 0x160)。要生成 dfi_csn_p0 的 1 个周期脉冲,请使用 CACAL_CONFIG1(偏移量 = 0x164)。要读取内存数据的值,请使用 CTRL_IO_RDATA_CH0/CH1(偏移量 = 0x150, 0x154)。请注意,发出 MR41/48/42 命令时应断言 CKE 引脚,并且在 CA 校准期间应解除 CKE 引脚。另外,请注意,由于 CA SDLL 代码更新需要一些周期才能完成,因此在发出下一条命令之前需要 10 个 PCLK 周期。

  42. 如果不需要读取调平,请跳过此过程。如果需要读取调平,请将适当的值设置为 PHY 控制寄存器。进行读取调平。(参见 PHY 手册)

  43. 如果不需要写入训练,请跳过此过程。如果需要写入训练,请通过 PHY APB I/F 设置相关的 PHY SFR 字段。要发出 ACT 命令,请启用和禁用 WRTRACONFIG.WRITE_TRAINING_EN。有关行和 bank 地址的定义,请参阅该寄存器定义。进行写入训练。(参见 PHY 手册)

  44. 完成所有调平/训练后,启用 CTRL_DLL_ON。(参见 PHY 手册)

  45. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“1”以更新 DLL 信息。

  46. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“0”。

  47. 如果需要,通过 PHY APB I/F 禁用 PHY 门控控制(CTRL_ATGATE,参见 PHY 手册)。

  48. 使用直接命令对所有芯片发出 PALL 命令。如果进行了写入训练,这是一个重要步骤。

  49. 设置 MEMCONTROL 和 PHYCONTROL0 寄存器。

  50. 设置 CONCONTROL 寄存器。应开启 AREF_EN。

  51. 设置 CGCONTROL 寄存器以启用时钟门控。

DDR3

  1. 上电。内存的 RESET# 引脚需要在电源稳定的情况下保持至少 200us。CKE 应在 RESET# 取消断言之前的任何时间被拉低(最短时间 10 ns)。

  2. 设置 PHY 为 DDR3 操作模式,RL/WL/BL 寄存器和处理 ZQ 校准。请参阅 PHY 手册中的“初始化”。

  3. 将 CONCONTROL.DFI_INIT_START 字段断言为高,但其他字段保留默认值。(AREF_EN 和 IO_PD_CON 应关闭)初始化和训练序列中应禁用 CGCONTROL 中的时钟门控。

  4. 等待 PHYSTATUS0.DFI_INIT_COMPLETE 字段变为“1”。

  5. 将 CONCONTROL.DFI_INIT_START 字段解除为低电平。

  6. 设置 PHY 为 DQS 下拉模式。(参见 PHY 手册)

  7. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“1”以更新 DLL 信息。

  8. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“0”。

  9. 设置 MEMBASECONFIG0 寄存器,如果需要,还要设置 MEMBASECONFIG1 寄存器。

  10. 设置 MEMCONFIG0 寄存器,如果需要,还要设置 MEMCONFIG1 寄存器。

  11. 设置 PRECHCONFIG 和 PWRDNCONFIG 寄存器。

  12. 根据内存 AC 参数设置 TIMINGAREF、TIMINGROW、TIMINGDATA 和 TIMINGPOWER 寄存器。

  13. 如果需要 QoS 方案,设置 QosControl0 到 15 和 QosConfig0 到 15 寄存器。

  14. 确认在 RESET# 取消断言后,CKE 激活前已过去 500 us。

  15. 确认在 CKE 激活前,时钟 (CK, CK#) 需要启动并稳定至少 10 ns 或 5 个 tCK(取较大者)。

  16. 使用 DIRECTCMD 寄存器发出 NOP 命令,将 CKE 断言并保持为逻辑高电平。

  17. 等待 tXPR(最大值(5nCK,tRFC(最小)+ 10 ns))或在步骤 17 之前将 tXP 设置为 tXPR 值。如果系统将 tXP 设置为 tXPR,则系统必须在正常内存操作前将 tXP 设置为适当的值。

  18. 使用 DIRECTCMD 寄存器发出 EMRS2 命令以编程操作参数。应禁用动态 ODT。A10 和 A9 应该为低电平。

  19. 使用 DIRECTCMD 寄存器发出 EMRS3 命令以编程操作参数。

  20. 使用 DIRECTCMD 寄存器发出 EMRS 命令以启用内存 DLL。

  21. 使用 DIRECTCMD 寄存器发出 MRS 命令以重置内存 DLL。

  22. 使用 DIRECTCMD 寄存器发出 MRS 命令以编程操作参数,而不重置内存 DLL。

  23. 使用 DIRECTCMD 寄存器发出 ZQINIT 命令。

  24. 如果有更多外部内存芯片,请对其他内存设备执行步骤 17 到 24 的过程。

  25. 如果需要任何调平/训练,启用 CTRL_ATGATE、P0_CMD_EN、INITDESKEWEN 和 BYTE_RDLVL_EN。禁用 CTRL_DLL_ON 并设置 CTRL_FORCE 值。(参见 PHY 手册)

  26. 如果不需要写入调平,请跳过此步骤。如果需要写入调平,请使用 MRS 直接命令将 DDR3 设置为写入调平模式,设置 ODT 引脚高电平并使用 WRLVL_CONFIG0 寄存器(偏移量 = 0x120)设置 tWLO,并通过 PHY APB I/F 设置相关的 PHY SFR 字段(参见 PHY 手册)。要生成 dfi_wrdata_en_p0 的 1 个周期脉冲,请向 WRLVL_CONFIG1 寄存器(偏移地址 = 0x124)写入 0x1。要读取内存数据的值,请使用 CTRL_IO_RDATA(偏移量 = 0x150)。如果写入调平完成,请在 PHY 寄存器中禁用写入调平模式,并将 ODT 引脚设置为低电平,并禁用 DDR3 的写入调平模式。

  27. 如果不需要门控调平,请跳过步骤 27 到 28。如果需要门控调平,请使用 MRS 直接命令将 DDR3 设置为 MPR 模式,并通过 PHY APB I/F 设置相关的 PHY SFR 字段。进行门控调平。(参见 PHY 手册)

  28. 如果门控调平完成,请使用 MRS 命令将 DDR3 设置为正常操作模式,并禁用 DQS 下拉模式。(参见 PHY 手册)

  29. 如果不需要读取调平,请跳过步骤 29 到 30。如果需要读取调平,请使用 MRS 直接命令将 DDR3 设置为 MPR 模式,并将适当的值设置为 PHY 控制寄存器。进行读取调平。(参见 PHY 手册)

  30. 如果读取调平完成,请使用 MRS 直接命令将 DDR3 设置为正常操作模式。

  31. 如果不需要写入训练,请跳过此步骤。如果需要写入训练,请通过 PHY APB I/F 设置相关的 PHY SFR 字段(参见 PHY 手册)。要发出 ACT 命令,请启用和禁用 WRTRACONFIG.WRITE_TRAINING_EN。有关行和 bank 地址的定义,请参阅该寄存器定义。进行写入训练。(参见 PHY 手册)

  32. 完成所有调平/训练后,启用 CTRL_DLL_ON。(参见 PHY 手册)

  33. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“1”以更新 DLL 信息。

  34. 将 PHYCONTROL0.FP_RESYNC 位字段设置为“0”。

  35. 如果需要,通过 PHY APB I/F 禁用 PHY 门控控制(CTRL_ATGATE,参见 PHY 手册)。

  36. 使用直接命令对所有芯片发出 PALL 命令。如果进行了写入训练,这是一个重要步骤。

  37. 设置 MEMCONTROL 和 PHYCONTROL0 寄存器。

  38. 设置 CONCONTROL 寄存器。应开启 AREF_EN。

  39. 设置 CGCONTROL 寄存器以启用时钟门控。

15.3.9.2 DDR-PHY 初始化

在上电和系统 PLL 锁定时间后,系统复位 (rst_n) 被释放。

  1. 选择内存类型(= PHY_CON0[12:11])。

    • CTRL_DDR_MODE = 2'b11 (LPDDR3)
    • CTRL_DDR_MODE = 2'b10 (LPDDR2)
    • CTRL_DDR_MODE = 2'b01 (DDR3)                                                                                                                                                                                                           注意:如果 CTRL_DDR_MODE[1] = 1'b1,CMD_ACTIVE = 14'h000E(= LP_DDR_CON3[13:0]),CMD_DEFAULT = 14'h000F(= LP_DDR_CON4[13:0])UPD_MODE = 1’b1(= OFFSETD_CON0[28])
  2. 设置读取延迟 (RL)、突发长度 (BL) 和写入延迟 (WL)。

    • 在 PHY_CON4[4:0] 中设置 RL。
    • 在 PHY_CON4[12:8] 中设置 BL。
    • 在 PHY_CON4[20:16] 中设置 WL。
  3. ZQ 校准(详情请参阅“ZQ I/O 控制过程”部分)。

    • 在 ZQ_CON0[18] 中启用和禁用 "ZQ_CLK_DIV_EN"
    • 在 ZQ_CON0[1] 中启用 "ZQ_MANUAL_STR"
    • 等待 "ZQ_CAL_DONE"(= ZQ_CON1[0])启用。
    • 禁用 "ZQ_MANUAL_STR"(= ZQ_CON0[1])
  4. 内存控制器应从低到高断言 "DFI_INIT_START"。

  5. 内存控制器应等待 "DFI_INIT_COMPLETE" 设置。

    • DLL 锁定将被处理。 注意:在操作期间,请不要更改 "MCLK" 的频率或电压。这些条件应在没有内存访问时更改。更改后,应清除并重新设置 "CTRL_START" 以再次锁定。
  6. 启用 DQS 下拉模式。

    • 在使用 72 位 PHY 时设置 "CTRL_PULLD_DQS = 9’h1FF"(= LP_CON0[8:0])。
    • 请注意,只有在完成门控调平后才能禁用 DQS 下拉。
  7. 内存控制器应在 "DFI_INIT_COMPLETE" 设置后断言 "DFI_CTRLUPD_REQ"。

    • 在完成调平和训练之前,请保持“控制启动更新”模式。
  8. 内存控制器开始内存初始化。

  9. 如果不需要调平和训练(可选功能),请跳过以下步骤。

    • 调平期间的约束
      • 支持调平期间的 BL = 4 或 8。(不要使用 BL = 16)
      • 在写入 DQ 校准期间不支持内存 ODT(片上终端)。
      • 在 PHY_CON0[6] 中启用 "CTRL_ATGATE"。
    • 在 PHY_CON0[14] 中启用 "P0_CMD_EN"。
    • 在 PHY_CON2[6] 中启用 "INITDESKEWEN"。
    • 在 PHY_CON0[13] 中启用 "BYTE_RDLVL_EN"。
    • 建议在 PHY_CON1[19:16] 中设置 "RDLVL_PASS_ADJ = 4"
    • 使用 DDR3 时
      • 将 "CMD_ACTIVE = 14'h105E" 设置为默认值(= LP_DDR_CON3[13:0])
      • 将 "CMD_DEFAULT = 14'h107F" 设置为默认值(= LP_DDR_CON4[13:0])
    • 使用 LPDDR2 或 LPDDR3 时
      • 将 "CMD_ACTIVE = 14'h000E" 设置为默认值(= LP_DDR_CON3[13:0])
      • 将 "CMD_DEFAULT = 14'h000F" 设置为默认值(= LP_DDR_CON4[13:0])
    • 建议将 "RDLVL_INCR_ADJ = 7’h01" 设置为最佳裕度。
      • 通过在 PHY_CON2[22:16] 中调整 "RDLVL_INCR_ADJ" 可以缩短校准时间。
    • 在调平前禁用 MDLL_CON0[5] 中的 "CTRL_DLL_ON"。
      • 读取 MDLL_CON1[16:8] 中的 "CTRL_LOCK_VALUE[8:0]"。
      • 使用 "CTRL_LOCK_VALUE[8:0]" 的值更新 MDLL_CON0[15:7] 中的 "CTRL_FORCE[8:0]"。
    • 写入调平(请参阅写入调平)
    • CA 校准(请参阅 CA 校准)
    • 门控调平(请参阅门控调平)
      • 仅应用于 DDR3(800MHz)。
    • 读取 DQ 校准(= 读取调平)(请参阅读取 DQ 校准)
    • 写入调平校准(请参阅写入调平)
    • 读取 DQ 校准后,请参阅 "T_RDDATA_EN" 了解 "DFI_RDDATA_ENP0/P1" 的启用时间。
      • 读取 T_RDDATA_CON0 中的 "T_RDDATA_EN" 时序参数。
    • 写入 DQ 校准(请参阅写入 DQ 校准)
    • 设置 MDLL_CON0[5] 中的 "CTRL_DLL_ON = 1"。
    • 设置 PHY_CON2[12] 中的 "DLLDESKEWEN = 1" 以补偿操作期间的电压、温度变化。 注意:在调平或训练期间不要断言 CTRL_CTRLUPD_REQ。
  10. 将 "UPD_MODE = 0" 设置为 PHY 初始化更新(= OFFSETD_CON0[28])。

  • 如果使用控制启动更新,请设置 "UPD_MODE = 1"
  1. 为确保所有 SDLL 已更新,启用并禁用 "CTRL_RESYNC"(= OFFSETD_CON0[24])。

注意:数据眼训练(= 读取、写入 DQ 校准)的目的是识别读取 DQS 上升沿与相关 DQ 数据眼的开始和结束转换对齐的延迟。通过识别这些延迟,系统可以计算这些延迟之间的中点,并准确地将读取 DQS 居中于 DQ 数据眼内。

15.3.9.2.1 写入调平

写入调平补偿由封装、板和芯片内与时钟有关的附加飞行时间偏移延迟。

<H/W 写入调平>

  1. 内存控制器应将内存(DDR3、LPDDR3)配置为写入调平模式。

    • 将 "CMD_DEFAULT[8:7] = 2’b11"(LPDDR_CON4[8:7])设置为启用写入调平期间的 "ODT[1:0]" 信号。
  2. 将 PHY 配置为写入调平模式。

    • 在 PHY_CON0[16] 中启用 "WRLVL_MODE"。
  3. 通过设置 "wrlvl_start = 1’b1"(= PHY_CON3[16])开始写入调平。

  4. 等待 "wrlvl_resp = 1’b1"(= PHY_CON3[24])。

  5. 通过设置 "wrlvl_start = 1’b0"(= PHY_CON3[16])完成写入调平。

  6. 将 PHY 配置为正常模式。

    • 在 PHY_CON0[16] 中禁用 "WRLVL_MODE"。
  7. 将 "CMD_DEFAULT[8:7] = 2’b00"(LPDDR_CON4[8:7])设置为禁用 "ODT[1:0]" 信号。

  8. 将 "reg_mode[0] = 1'b1"(= PHY_CON3[0])设置为 1。

  9. 内存控制器应将内存(DDR3、LPDDR3)配置为正常模式。

  10. 启用并禁用 "CTRL_RESYNC"(= OFFSETD_CON0[24])以确保所有 SDLL 已更新。

  11. 建议设置 "CTRL_READDURADJ = 1"。

<S/W 写入调平>

  1. 内存控制器应将内存(DDR3,LPDDR3)配置为写入调平模式。

    • 在写入调平期间,内存控制器应断言 "dfi_odt_p0/p1" 以启用 "ODT[1:0]"。
  2. 将 PHY 配置为写入调平模式。

    • 在 PHY_CON0[16] 中启用 "WRLVL_MODE"。
    • 在 "WRLVL_MODE" = 1 期间应使用 "NOP"(时钟上升沿的 CS 高)。
  3. 找出 CL 和 DQS 之间对齐的最佳写入调平去偏 DLL 代码。

    • 为所有数据切片设置写入调平代码(WR_LVL_CON0、WR_LVL_CON1、WR_LVL_CON2)。(1)
      • 起始代码值应为 0x8。
    • 更新 SDLL 代码(WR_LVL_CON0、WR_LVL_CON1、WR_LVL_CON2)。(2)
      • 启用 "ctrl_wrlvl_resync"(= WR_LVL_CON3[0])
      • 禁用 "ctrl_wrlvl_resync"(= WR_LVL_CON3[0])
    • 内存控制器应生成 1 个周期脉冲的 "dfi_wrdata_en_p0"。(3)
    • 内存控制器应读取 PHY 的输出值 "ctrl_io_rddata[8x*]"。(4)
      • 如果为零,则将 "ctrl_wrlvl_code*" 增加 1,然后转到 "2" 更新 "Data_Slice *" 的代码。
      • 如果起始代码(= 0x8)为 1,则继续将 "ctrl_wrlvl_code*" 增加 1,直到它为零。转到 "2" 更新 "Data Slice" 的代码。
      • 如果上一步为零,则 "ctrl_wrlvl_code* - 1" 将是 "Data_Slice *" 的最佳代码。
      • 如果所有数据切片的最佳代码都已找到,则转到 "5"。否则,转到 "2" 更新递增的代码。 注意:"ctrl_io_rdata" 也可以从 DQ_IO_RDATA0、DQ_IO_RDATA1 和 DQ_IO_RDATA2 读取。"*" 对于 72 位 PHY 表示 0, 1, 2, 3, 4, 5, 6, 7, 8,对于 32 位 PHY 表示 0, 1, 2, 3。
  4. 完成步骤 4 后将 PHY 配置为正常模式。(5)

    • 禁用 "WRLVL_MODE"(= PHY_CON0[16])
  5. 内存控制器应将内存(DDR3,LPDDR3)配置为正常模式。(6)

  6. 启用并禁用 "CTRL_RESYNC"(= OFFSETD_CON0[24])以确保所有 SDLL 已更新。

  7. 建议设置 "CTRL_READDURADJ = 1"

注意:内存控制器应生成 1 个周期脉冲的 "dfi_wrdata_en_p0"。如果支持写入调平,内存控制器应添加寄存器以读取 "ctrl_io_rdata[31:0]"。

<写入调平 DLL 手动设置>

在准确知道板和封装延迟后,可以使用以下手动设置代替写入调平。

  1. 为每个数据切片设置 WR_LVL_CON0、WR_LVL_CON1 和 WR_LVL_CON2。

    • 例如,假设以下条件
      • "CTRL_LOCK_VALUE[8:0] = 0x7F(= 127)"
      • CK 的延迟约为 118 ps、295 ps、512 ns、704 ps、920 ps、1137 ps、1196 ps、1329 ps 和 861 ps 在 DIMM 的每个 DRAM 处。
    • 通过在 800 MHz 时计算 "1250/127",精细步进延迟约为 9.84 ps。
    • CK 的延迟可以用精细步进延迟单位表示为 0x0C、0x1E、0x34、0x47、0x5D、0x73、0x79、0x08 和 0x57。
      • 如果 DRAM 处的 CK 延迟大于 1 或 2 个周期,请在设置 "WR_LVL_CON*" 时忽略该周期延迟。例如,7th DRAM 处的 CK 延迟为 1329 ns,精细步进延迟应为 0x85,但在忽略 0x7F(= 1250 ns)后,设置值将为 0x08。
    • 请设置 "WR_LVL_CON0 = 0x47341E0C","WR_LVL_CON1 = 0x0879735D" 和 "WR_LVL_CON2 = 0x57"。
  2. 设置 "WRLVL_MODE = 1"(= PHY_CON0[16])。

  3. 设置 "WRLVL_MODE = 0"(= PHY_CON0[16])。

  4. 启用并禁用 "CTRL_RESYNC"(= OFFSETD_CON0[24])以确保所有 SDLL 已更新。

15.3.9.2.2 CA 校准
  1. 控制器应将内存(LPDDR3)配置为 CA 校准模式。

  2. 将 PHY 配置为 CA 校准模式。

    • 在 PHY_CON0[16] 中启用 "WRLVL_MODE"。
    • 在 PHY_CON2[23] 中启用 "ca_cal_mode"。
  3. 如何找到最佳的 CA SDLL 代码。(= OFFSETD_CON0[7:0])

    • 在 OFFSETD_CON0[7:0] 中更改 CA SDLL 代码。(1)
      • 起始代码值应为 0x8。
    • 在 OFFSETD_CON0[7:0] 中更新 CA SDLL 代码。(2)
      • 在 OFFSETD_CON0[24] 中启用 "CTRL_RESYNC"
      • 在 OFFSETD_CON0[24] 中禁用 "CTRL_RESYNC"
    • 更改 CA 到 DQ 映射以校准 CA[3:0] 和 CA[8:5]。(3)
      • 由控制器写入模式寄存器到 MR#41。
      • 内存控制器应禁用 "dfi_cke_p0" 和 "dfi_cke_p1"。(dfi_cke_p0/p1 = 0)
    • 内存控制器应生成 1 个周期脉冲的 "dfi_cs_n_p0" 并设置 "dfi_address_p0 = 20'h3FF"。
    • 内存控制器应读取并保存 PHY 的输出值 "ctrl_io_rddata[15:0]"。
      • CK 上升沿的 CA[3:0](= CA_L[3:0])等于 {ctrl_io_rdata[6], ctrl_io_rdata[4], ctrl_io_rdata[2], ctrl_io_rdata[0]}。
      • CK 上升沿的 CA[8:5](= CA_L[8:5])等于 {ctrl_io_rdata[14], ctrl_io_rdata[12], ctrl_io_rdata[10], ctrl_io_rdata[8]}。
      • CK 下降沿的 CA[3:0](= CA_H[3:0])等于 {ctrl_io_rdata[7], ctrl_io_rdata[5], ctrl_io_rdata[3], ctrl_io_rdata[1]}。
      • CK 下降沿的 CA[8:5](= CA_H[8:5])等于 {ctrl_io_rdata[15], ctrl_io_rdata[13], ctrl_io_rdata[11], ctrl_io_rdata[9]}。
    • 更改 CA 到 DQ 映射以校准 CA[4] 和 CA[9]。(4)
      • 内存控制器应启用 "dfi_cke_p0" 和 "dfi_cke_p1"。(dfi_cke_p0/p1 = 1)
      • 由控制器写入模式寄存器到 MR#48。
      • 内存控制器应禁用 "dfi_cke_p0" 和 "dfi_cke_p1"。(dfi_cke_p0/p1 = 0)
    • 内存控制器应生成 1 个周期脉冲的 "dfi_cs_n_p0" 并设置 "dfi_address_p0 = 20'h3FF"。
    • 内存控制器应读取并保存 PHY 的输出值 "ctrl_io_rdata[1:0]" 和 "ctrl_io_rdata[8:9]"。
      • CK 上升沿的 CA[4](= CA_L[4])等于 "ctrl_io_rdata[0]"。
      • CK 上升沿的 CA[9](= CA_L[9])等于 "ctrl_io_rdata[8]"。
      • CK 下降沿的 CA[4](= CA_H[4])等于 "ctrl_io_rdata[1]"。
      • CK 下降沿的 CA[9](= CA_H[9])等于 "ctrl_io_rdata[9]"。
      • 检查 "CA_L = 10'h3FF" 和 "CA_H = 10'h000" 是否相等。(5)
        • 如果不相等,
          • 继续执行步骤 "6" 直到找到最左侧的代码值。(7)
          • 如果已经保存了最左侧的代码值,请将当前 SDLL 代码保存为最右侧代码值(= VWMR)。转到 "11"。(10)
        • 如果相等,
          • 如果第一次匹配,请将当前 SDLL 代码保存为最左侧代码值(= VWML)。转到 "6"。(8)
          • 继续执行步骤 "6" 直到找到最右侧的代码值。(9)
    • 将 SDLL 代码增加 "1",然后转到 "2" 以更新 SDLL 代码。(6)
  4. 计算最佳 CA SDLL 代码(= PHY_CON10[7:0])。(11)

    • 通过以下公式计算最佳 CA SDLL 代码(= VWMC)。
    • VWMC = VWML + (VWMR - VWML)/2
    • 使用 "VWMC" 更新 CA SDLL 代码。
  5. 将 PHY 配置为正常模式。

    • 在 PHY_CON0[16] 中禁用 "WRLVL_MODE"。
  6. 内存控制器应将内存(LPDDR3)配置为正常模式。

注意:内存控制器应生成 1 个周期脉冲的 "dif_cs_n_p0"。如果支持 CA 校准,内存控制器应添加寄存器以读取 "ctrl_io_rdata[15:0]"。建议内存控制器在发出 MRW CA 训练进入命令之前和之后的一个周期内保持 CA 总线稳定,以确保 CA 总线上的设置和保持时间。

15.3.9.2.3 门控调平

门控训练的目标是找到初始读取 DQS 上升沿与读取 DQS 门(= ctrl_gate_p0/p1)上升沿对齐的延迟。一旦确定这一点,可以在 DQS 之前调整读取 DQS 门,使其接近读取 DQS 序言的中点。当使用 800 MHz 以上的 "DDR3 内存" 时,可以使用 "门控调平"。

  1. 控制器应将内存(DDR3)配置为 MPR 模式。(请参阅 JEDEC 标准)

  2. 设置门控调平模式。(1)

    • 在 PHY_CON2[24] 中启用 "gate_cal_mode"
    • 在 PHY_CON0[8] 中启用 "ctrl_shgate"
    • 以以下方式设置 "ctrl_gateduradj[3:0]"(= PHY_CON1[23:20])。
      • 4'b0000"(DDR3,DDR2)
      • 4'b1011"(LPDDR3)
      • 4'b1001"(LPDDR2) 注意:在生产中使用 LPDDR2 或 LPDDR3 时不要使用门控调平。
  3. 启用 "gate_lvl_start"(= PHY_CON3[18])以进行读取调平。(2)

  4. 等待 "rd_wr_cal_resp"(= PHY_CON3[26])设置。(3)

    • 最大等待时间为 20 us。如果在 20 us 内需要任何命令(刷新或预充电命令),请在 "(1)" 之前发出这些命令。
  5. 在 "rd_wr_cal_resp"(= PHY_CON3[26])禁用后禁用 "gate_lvl_start"(= PHY_CON3[18])。

  6. 禁用 DQS 下拉模式。(4)

  7. 内存控制器应将内存(DDR3)配置为正常模式。

15.3.9.2.4 读取 DQ 校准(= 读取调平,读取去偏)

读取 DQ 校准调整包、板和芯片上的延迟,这些延迟会影响读取周期。

  1. 在使用 DDR3 内存的情况下,

    • 内存控制器应将内存配置为 MPR 模式。(请参阅 JEDEC 标准)
    • 如果在 MPR 模式下 "预定义数据模式" 是 "[0x0000_0000,0x0101_0101, 0x0000_0000,0x0101_0101]" 或 "[0x0000_0000,0xFFFF_FFFF, 0x0000_0000,0xFFFF_FFFF]",请将 "PHY_CON1[15:0]" 设置为 "0xFF00"。
  2. 在使用 LPDDR3 或 LPDDR2 内存的情况下,

    • 如果 "MRR32 DQ 模式" 是 "[0x0101_0101,0x0000_0000, 0x0101_0101, 0x0000_0000]" 或 "[0xFFFF_FFFF,0x0000_0000, 0xFFFF_FFFF, 0x0000_0000]"(BYTE_RDLVL_EN = 1),请将 "PHY_CON1[15:0]" 设置为 "0x00FF"。
    • 将 "lpddr2_addr = 20'h208"(= LP_DDR_CON0[19:0])设置为在校准期间发出 MR32。
      • 在 CA 交换模式下,将 "lpddr2_addr" 设置为 20'h041 以在校准期间发出 MR32。
  3. 设置读取调平模式。(1)

    • 在 PHY_CON2[25] 中启用 "rd_cal_mode"。
  4. 启用 "rd_cal_start"(= PHY_CON3[19])以进行读取调平。(2)

  5. 等待 "rd_wr_cal_resp"(= PHY_CON3[26])设置。(3)

    • 最大等待时间为 20 us。如果在 20 us 内需要任何命令(刷新或预充电命令),请在 "(1)" 之前发出这些命令。
  6. 在 "rd_wr_cal_resp"(= PHY_CON3[26])启用后禁用 "rd_cal_start"(= PHY_CON3[19])。(4)

  7. 在使用 DDR3 内存的情况下,

    • 内存控制器应禁用 SDRAM 设备中的 MPR(MR3= 0,请参阅 JEDEC 标准)。
15.3.9.2.5 写入延迟校准

写入延迟校准可以在检查是否有某些 DQS 信号比 CK 延迟后调整每个切片的写入延迟。为了确保读取操作,在写入调平校准之前需要进行读取 DQ 校准。在设计封装和电路板时,应尽量减少每个切片上 DQS 和 DQ 之间的偏移,以进行写入调平校准。

  1. 在写入延迟校准之前设置写入延迟(= ctrl_wrlat)。

    • 设置 "ctrl_wrlat"(= PHY_CON4[20:16])
    • WL 定义为写入命令和 DQS 第一个有效上升沿之间的时钟周期数。
  2. 内存控制器应发出“激活命令”。

  3. PHY 将写入和读取 "PHY_CON1[15:0]" 中的模式,以了解写入调平是否正常完成(需要读取 DQ 校准)。

    • 在使用 LPDDR2 或 LPDDR3 内存的情况下
      • 列地址应在 "lpddr2_addr"(= LP_DDR_CON0[19:0])中定义。
      • "lpddr2_addr[9:0]" 对应 CK 上升沿的 CA[9:0],"lpddr2_addr[19:10]" 对应 CK 下降沿的 CA[19:10]。
      • 应为“读取”命令。
      • 例如,如果列地址为 0x0 且 bank 地址为 0x0,则在 CA 交换模式下,lpddr2_addr = 20'h204。
  4. 设置 "wl_cal_mode = 1"(= PHY_CON3[20])。

  5. 设置 "wl_cal_start = 1"(= PHY_CON3[21])以进行写入调平校准。

  6. 等待 "wl_cal_resp"(= PHY_CON3[27])设置。

  7. 设置 "wl_cal_start = 0"(= PHY_CON3[21])。

15.3.9.2.6 写入 DQ 校准(= 写入去偏)

写入 DQ 校准调整包、板和芯片上的延迟,这些延迟会影响写入周期。

  1. 在写入训练之前设置写入延迟(WL)。(1)

    • 通过 "WL" 设置 "ctrl_wrlat"(= PHY_CON4[20:16])
    • WL 定义为写入命令和 DQS 第一个有效上升沿之间的时钟周期数。
  2. 内存控制器应发出“激活命令”。

  3. PHY 将根据以下设置不断写入和读取 "PHY_CON1[15:0]" 中的模式,以进行写入 DQ 校准。(2)

    • 在使用 LPDDR2 或 LPDDR3 内存的情况下

      • 列地址应在 LP_DDR_CON0[19:0] 中定义。
      • "lpddr2_addr[9:0]" 对应 CK 上升沿的 CA[9:0],"lpddr2_addr[19:10]" 对应 CK 下降沿的 CA[19:10]。
      • 应为“读取”命令。例如,如果列地址为 0x0 且 bank 地址为 0x0,在 CA 交换模式下,lpddr2_addr = 20'h204。
      • 设置 "PHY_CON1[15:0] = 0x0001" 和 "BYTE_RDLVL_EN = 1"(= PHY_CON0[13])。
      • 设置 "PHY_CON1[15:0] = 0x00FF" 和 "BYTE_RDLVL_EN = 0"(= PHY_CON0[13])进行去偏。
    • 在使用 DDR3 内存的情况下

      • 列地址应在 LP_DDR_CON2[15:0] 中定义。
      • 例如,如果列地址为 0x0,PHY 将在 BL = 4 的情况下在 0x0 处写入和读取预定义的模式(= PHY_CON1[15:0])以进行 DQ 校准。
      • 设置 "PHY_CON1[15:0] = 0x0100" 和 "BYTE_RDLVL_EN = 1"(= PHY_CON0[13])。
      • 设置 "PHY_CON1[15:0] = 0xFF00" 和 "BYTE_RDLVL_EN = 0"(= PHY_CON0[13])进行去偏。
  4. 设置写入训练模式 (3)

    • 设置 "wr_cal_mode"(= PHY_CON2[26])。
  5. 设置 "wr_cal_start=1"(= PHY_CON2[27])以进行写入 DQ 校准。(4)

  6. 等待 "rd_wr_cal_resp"(= PHY_CON3[26])设置。(5)

    • 最大等待时间为 50 us。如果在 50 us 内需要任何命令(刷新或预充电命令),请在 "(3)" 之前发出这些命令。
  7. 在 "dfi_rdlvl_resp" 启用后禁用 PHY_CON2[27] 中的 "wr_cal_start"。(6)

15.3.9.3 低频操作

即使 "clk2x" 的工作频率超出 MDLL 输入频率(400 至 800 MHz)的范围,DDR PHY 也可以在低频下工作,因为 MDLL 输入时钟与 PHY 输入时钟分离。建议在正常操作中进行读取调平。以下顺序说明如何使用不同的 MDLL 时钟在低频下操作 PHY。

  1. 如果 "DFI_INIT_START" = 0,控制器应将 "DFI_INIT_START" 从低断言为高。

  2. 在控制器检查 "DFI_INIT_COMPLETE" 后,读取 "CTRL_LOCK_VALUE" 的值。

  3. 进入自刷新(CKE = 0)。

  4. 进入低频。

    • 将 "clk2x" 更改为低频,但不要更改 "clkm" 的频率(400 至 800 MHz)。
  5. 将 CTRL_LOCK_VALUE[8:0] 的倍乘值写入 CTRL_FORCE[8:0]。

    • 例如,如果工作频率将是 MDLL 时钟的一半,应将 CTRL_LOCK_VALUE 的两倍乘值写入 "CTRL_FORCE"。
    • 如果 "倍乘值" 大于 0x1FF,"CTRL_FORCE" 将为 "0x1FF"。
  6. 低频低于 100 MHz,

    • "CTRL_FORCE" = 0x1FF,"CTRL_OFFSETD" = 0x7F,CTRL_OFFSETR* = 0x7F,CTRL_OFFSETW* = 0x7F(* 表示 0 到 3)
    • CA0DeSkewCode 到 CA9DeSkewCode = 0x60。
    • 关闭 "CTRL_DLL_ON"。
  7. 在 CTRL_DLL_ON 禁用后,应发出超过 10 个周期的 "DFI_CTRLUPD_REQ"。

  8. 退出自刷新(CKE = 1)。

  9. 在低频下操作。

注意:在 400 MHz(= clk2x)以下时,"CTRL_ATGATE"(= PHY_CON0[6])应为 "0"。控制器应生成 "ctrl_gate_p0/p1" 和 "ctrl_read_p0/p1"。

如果再次返回到原始高频,请参考以下程序。

  1. 进入自刷新(CKE = 0)。

  2. 如果 "CTRL_DLL_ON = 0",请打开 "CTRL_DLL_ON"。

  3. "CTRL_OFFSETD" = 0x08,CTRL_OFFSETR* = 0x08,CTRL_OFFSETW* = 0x08(* 表示 0 到 3)。

  4. CA0DeSkewCode 到 CA9DeSkewCode = 0x8。

  5. 等待 "ctrl_clock = 1"。

  6. 在 "ctrl_clock = 1" 后,控制器应断言 "DFI_CTRLUPD_REQ" 以应用新的 "CTRL_LOCK_VALUE"。

  7. 退出自刷新(CKE = 1)。

15.3.9.4 偏移控制

ctrl_offset0 到 ctrl_offset3 控制 DQS 的 90° 相移或 270° 时钟的偏移。CTRL_OFFSETD 和 ctrl_offset0 到 ctrl_offset3 仅用于调试或裕度测试目的(之后,可以对偏移进行编程以进行补偿以最大化裕度)。

15.3.9.5 DLL 锁定过程
  1. 在上电和系统 PLL 锁定时间后,系统复位 (rst_n) 被释放。

  2. CPU 设置 CTRL_OFFSETC*、CTRL_OFFSETR*、CTRL_OFFSETW*、ctrl_shiftc*、CTRL_START_POINT 和 ctrl_inc 值。通常可以使用默认值。(如果这些值或频率在正常操作期间发生变化,在清除 CTRL_DLL_ON 后应再次应用以下步骤。'*' 表示 0、1、2、3)

    • CTRL_OFFSETC* = 0x0,ctrl_shiftc* = 0x0
    • CTRL_OFFSETR* = 0x0,CTRL_OFFSETW* = 0x0
    • CTRL_START_POINT = 0x10,ctrl_inc = 0x10
  3. 将 "DFI_INIT_START" 从低断言为高。

  4. 当 DLL 锁定完成时,设置 "DFI_INIT_COMPLETE"。

  5. 在内存访问之前,应应用 "DFI_CTRLUPD_REQ"。建议内存控制器应在刷新周期开始时自动设置和清除 "DFI_CTRLUPD_REQ" 以定期更新 DLL 锁定信息。

DLL 用于补偿 PVT 条件。因此,除频率缩放的情况外,不应关闭 DLL 以确保可靠操作。(仅允许降低频率缩放)要关闭 DLL,请按以下步骤操作:

  1. DLL 锁定后,CPU 读取 CTRL_LOCK_VALUE 并将 CTRL_LOCK_VALUE[8:0] 写入 CTRL_FORCE。

  2. 通过清除 CTRL_DLL_ON 可以关闭 DLL。

  3. 在设置和清除 CTRL_DLL_ON 后,应发出 "DFI_CTRLUPD_REQ" 超过 6 个周期。

15.3.9.6 ZQ I/O 控制过程

ZQ I/O 通过参考从 ZQ 引脚外部连接到地的电阻 (RZQ) 值校准 I/O 以匹配驱动和终端阻抗。对于 DDR2/DDR3,RZQ 应为 240 Ω。ZQ I/O 控制过程提供了一次校准。有两种模式可用于一次校准。一种是“长校准模式”,另一种是“短校准模式”。

<一次校准>

  1. 在上电和系统 PLL 锁定时间后,系统复位 (rst_n) 被释放。

  2. 将 ctrl_zq_clk_div[31:0] 设置为适当的值(= 0x7)。

  3. 将 ZQ_CLK_DIV_EN 从 1'b0 设置为 1'b1 以更新分频器设置(ctrl_zq_clk_div[31:0] = 0x7)。

  4. 设置 zq_manual_mode

    • 长校准模式:2'b01
    • 短校准模式:2'b10
  5. 通过将 ZQ_MANUAL_STR 从 1'b0 设置为 1'b1 来启动 ZQ I/O 校准。

  6. 校准完成时,zq_done (= PHY_CON17[0]) 将被设置(四个周期系统时钟)。

  7. 在 zq_done (= PHY_CON17[0]) 断言后,清除 ZQ_MANUAL_STR。

  8. 清除 ZQ_CLK_DIV_EN。

<手动设置>

  1. 在上电和系统 PLL 锁定时间后,系统复位 (rst_n) 被释放。

  2. 将 ctrl_zq_clk_div[31:0] 设置为适当的值(= 0x7)。

  3. 将 ZQ_CLK_DIV_EN 从 1'b0 设置为 1'b1 以更新分频器设置(ctrl_zq_clk_div[31:0] = 0x7)。

  4. 设置 zq_manual_mode = 2'b00(= 强制校准模式)。

  5. 通过将 ZQ_MANUAL_STR 从 1'b0 设置为 1'b1 来启动 ZQ I/O 校准。

  6. 在 zq_done (= PHY_CON17[0]) 断言后,清除 ZQ_MANUAL_STR。

15.3.10 MCU-S

15.3.10.1 静态内存映射影像

下图显示了静态内存由静态#0 到 #1(外部静态内存)、静态#13(内部 ROM)和 NAND 组成。

然而,根据系统启动模式,内部 ROM 和 nSCS[0] 的基地址会发生变化。在内部 ROM 启动模式下,内部 ROM 的基地址应与 nSCS[0] 的基地址交换。

在外部静态启动的情况下,先前的基地址保持不变。

15.3.10.2 接口

MCU-A Bank 的 32 位数据总线宽度 SDRAM 接口

MCU-A 分别支持 CS[0] 和 CS[1] 的 32 位数据总线宽度。

16 位数据总线宽度的 MCU-A Bank SDRAM 接口

16 位 DDR3 SDRAM 可以分别向 CS[0] 和 CS[1] 添加两个内存,总共四个内存。

15.3.11 NAND 概述

15.3.11.1 正常访问序列

<读取周期>

  • 在 NFCMD 寄存器中写入 NAND Flash 命令。
  • 根据 NAND Flash 地址类型,将地址写入 NFADDR 寄存器。(参见 NAND Flash 数据手册)
  • 检查 IRQPEND 位。
  • 从 NAND Flash 备用阵列中读取 ECC 数据并写入 ORGECC 寄存器。
  • 从 NAND Flash 主阵列中读取数据(512/1024 字节)。
  • 检查 NFECCDECDONE 寄存器。
  • 检查 NFCHECKERROR 寄存器。

<写入周期>

  • 将 NAND Flash 命令写入 NFCMD 寄存器。(参见 NAND Flash 数据手册)
  • 根据 NAND Flash 的类型,通过 3 到 5 次访问将要访问的内存地址写入 NFADDR 寄存器。(参见 NAND Flash 数据手册)
  • 通过 NFDATA 寄存器写入数据(512/1024 字节)。
  • 检查 NFECCENCDONE 寄存器。
  • 通过 NFECC 寄存器读取 ECC 的结果。(仅小块)
  • 将 NAND Flash 命令写入 NFCMD 寄存器。(参见 NAND Flash 数据手册)
  • 通过读取 NFCONTROL 寄存器中的 IRQPEND 位,检查 NAND Flash 是否准备就绪。(有关 NAND Flash 的确切顺序,请参见 NAND Flash 数据手册)
15.3.11.2 ECC (BCH)

<特性>

  • 硬件 ECC 生成、检测和指示(软件校正),支持 4/8/16/24/40/60 位错误校正和检测
  • 错误检测码/错误校正码 (EDC/ECC)
    • 基于 NAND 的 MLC Flash 容易出现错误,因此需要错误处理方法。S5P6818 可以执行基于 BCH(Bose-Chaudhuri-Hocquenghem)算法的 EDC(错误检测码)和 ECC(错误校正码)。EDC 由硬件运行以减少 CPU 过载并提高 CPU 性能。相比之下,ECC 由软件运行。每 512/1024 字节页面计算奇偶校验位。
    • 从 NAND Flash 读取每个数据时计算综合症,并在错误校正操作中使用该值。
  • 硬件 ECC 生成重置
    • 当 NAND 地址或命令寄存器被任何值写入时,断言此重置。
    • 当 ECCRST 位(NFCONTROL 寄存器 [11] 位)设置为 1 时,也会断言此重置。
    • 此重置初始化 NFECCL、NFECCH、NFCNT、NFECCSTATUS、NFSYNDRONE0 至 7 寄存器。

16 GPIO 控制器

16.1 概述

通用输入/输出 (GPIO) 是 S5P6818 上的通用引脚,其行为(包括是输入引脚还是输出引脚)可以由用户在运行时进行控制。

16.2 特性

  • 可编程上拉控制
  • 边沿/电平检测
  • 支持可编程上拉电阻
  • 支持四种事件检测模式
    • 上升沿检测
    • 下降沿检测
    • 低电平检测
    • 高电平检测
  • GPIO 的数量:160

16.3 模块图

16.4 功能描述

S5P6818 的 GPIO 引脚具有 100 kΩ 的内部上拉电阻。上拉电阻的电流(对于 VDD = 3.3 V 和 V(PAD) = 0 V)列在下表中:

Pull Up

Min.

Typ.

Max.

Unit

ENABLE

10

33

72

uA

DISABLE

0.1

uA

S5P6818的大多数GPIO端口包含备用功能(某些端口支持最多备用功能2)。所有GPIO端口应设置为适合用户用途的GPIO功能或备用功能,并且可以通过GPIO寄存器轻松执行此设置。此外,所有GPIO上拉电阻均可启用/禁用。此设置在系统完全启动时操作,不会影响系统的初始启动。如果在系统启动时需要确定一个值,则通过从外部插入上拉/下拉电阻来给出该值。

16.4.1 输入操作

要将GPIO用作输入,应通过将GPIO备用功能选择寄存器的相关位设置为b'00来选择GPIO功能。此外,还应通过将GPIOx输出使能寄存器(GPIOxOUTENB)设置为“0”来选择GPIO输入模式。

可以通过使用GPIOx事件检测模式寄存器选择所需的检测类型来检测输入信号。可以检测四种类型的输入信号:低电平、高电平、下降沿和上升沿。GPIOx事件检测模式寄存器包括GPIOx事件检测模式寄存器0(GPIOxDETMODE0)和GPIOx事件检测模式寄存器1(GPIOxDETMODE1)。

要使用中断,将GPIOx中断使能寄存器(GPIOxINTENB)设置为“1”。

GPIOx事件检测寄存器(GPIOxDET)允许通过GPIO检查事件的生成,并可用作中断发生时的挂起清除功能。

当GPIOx PAD状态寄存器(GPIOxPAD)设置为GPIO输入模式时,可以检查相关GPIOx PAD的电平。

开漏引脚(GPIOB[7:4]和GPIOC[8])仅在GPIOx输出寄存器(GPIOxOUT)设置为“1”时在输入模式下操作。即使GPIOx输出使能寄存器(GPIOxOUTENB)设置为输入模式,开漏引脚也由GPIOx输出寄存器(GPIOxOUT)操作。

16.4.2 输出操作

要将GPIO用作输出,应通过设置GPIOx备用功能选择寄存器的相关位为b'00来选择GPIO功能。此外,还应通过将GPIOx输出使能寄存器设置为“1”来选择GPIOx输出模式。

如果在GPIOx输出寄存器(GPIOxOUT)中设置所需的输出值(低电平:“0”,高电平:“1”),则该值将反映到相应的位。

开漏引脚(GPIOB[7:4]和GPIOC[8])仅在GPIOx输出寄存器(GPIOxOUT)设置为“0”时在输出模式下操作。即使GPIOx输出使能寄存器(GPIOxOUTENB)设置为输入模式,开漏引脚也由GPIOx输出寄存器(GPIOxOUT)操作。

16.4.3 备用功能操作

在S5P6818的151个GPIO引脚中,大多数GPIO引脚具有备用功能。然而,备用功能和GPIO功能不应同时使用。因此,通过将GPIOx备用功能选择寄存器的相应位设置为b'01和b'10,分别操作备用功能1和备用功能2。

17 以太网 MAC

17.1 概述

GMAC使主机能够通过以太网传输和接收数据,符合IEEE802.3-2008标准。

EMAC支持10/100/1000 Mbps数据传输速率,并具有与外部PHY芯片通信的简化千兆媒体独立接口(RGMII)。

17.2 特性

17.2.1 MAC 核心特性

  • 支持10/100/1000 Mbps数据传输速率,具有以下PHY接口:
    • RGMII接口,用于与外部千兆PHY通信
  • 支持全双工和半双工操作
  • 自动CRC和填充生成,可控接收帧
  • 可编程帧长度,支持标准或最大16 KB的以太网巨型帧
  • 可编程帧间间隔(以8位时间为步长,最大4096位时间)
  • 支持多种灵活的地址过滤模式
  • 独立的传输、接收和控制接口
  • 用于PHY设备配置和管理的MDIO主接口
  • 符合以下标准:
    • IEEE802.3-2002以太网MAC标准
    • IEEE1588-2002精确网络时钟同步标准
    • HP/Marvell的RGMII规范2.0版本

17.2.2 DMA 块特性

  • 32/64/128位数据传输
  • 单通道传输和接收引擎
  • 针对带有帧分界符的数据包DMA传输优化
  • 数据缓冲支持字节对齐寻址
  • 描述符架构,允许在最小CPU干预下传输大块数据;每个描述符最多可传输8 KB数据
  • 为传输和接收DMA引擎提供最佳主机总线利用率的可编程突发大小
  • 针对不同操作条件的可编程中断选项
  • 每帧传输/接收完成中断控制
  • 在接收和传输引擎之间的轮询或固定优先级仲裁
  • 启动/停止模式
  • 用于主机CSR(控制和状态寄存器)访问和主机数据接口的独立端口

17.3 模块图

18 SD/MMC 控制器

18.1 概述

本节描述了S5P6818支持的安全数字(SD/SDIO)、多媒体卡(MMC)、CT-ATA主控制器及相关寄存器。移动存储主机是系统与SD/MMC卡之间的接口。

18.2 特性

  • 兼容多媒体卡系统规范(MMC 4.41,eMMC 4.5)
  • 兼容安全数字存储规范(SD 3.0)
  • 兼容安全数字I/O规范(SDIO 3.0)
  • 支持时钟速度高达50 MHz
  • 包含内部时钟预分频器
  • 包含32字节FIFO用于数据接收/发送

18.2.1 移动存储主机的特性

  • 移动存储主机具有以下特性:

    • 支持安全数字存储协议命令
    • 支持安全数字I/O协议命令
    • 支持多媒体卡协议命令
    • 支持CE-ATA数字协议命令
    • 支持命令完成信号和对主处理器的中断
    • 命令完成信号禁用功能
  • 支持以下MMC4.41的特性:

    • GO_PRE_IDLE_STATE命令(带参数0xF0F0F0F0的CMD命令)
    • 新的EXTCSD寄存器
    • MMC 4.41支持的硬件复位
  • 支持以下eMMC 4.5的IP特定特性:

    • 支持SDR50(仅适用于SD通道2)
    • 支持DDR50(仅适用于SD通道2的8位)
    • 支持打包命令CMD21,CMD49
    • 支持1.2/1.8/3.3 V的操作控制
    • DDR模式的起始位行为变化
  • 不支持以下MMC 4.41的IP特定特性:

    • DDR模式下的启动

18.3 模块图

在上图中展示了移动存储主机的模块图。

  • 总线接口单元 (BIU):提供用于寄存器和数据读/写的 AMBA AHB/APB 和 DMA 接口。
  • 卡接口单元 (CIU):处理 SD_MMC_CEATA 协议并提供时钟管理。

BIU 提供了寄存器的主机接口。它还通过主机接口单元 (HIU) 提供数据 FIFO。此外,它通过 DMA 接口提供独立的数据 FIFO 访问。可以将主机接口配置为 AMBA APB 从接口。

IDMAC 负责在 FIFO 和主机内存之间交换数据。一组 IDMAC 寄存器可由主机通过 AMBA APB 从接口访问,以控制 IDMAC 操作。移动存储 CIU 控制特定于卡的协议。在 CIU 内,命令路径控制单元和数据路径控制单元与控制器的 SD_MMC_CEATA 卡的命令和数据端口接口。CIU 还提供时钟控制。

18.3.1 时钟相位移位器

SD/MMC 卡从主控制器接收带有卡时钟的 DATA/CMD。为了同步时钟和 DATA/CMD,需要在 Tx/Rx 时钟路径中插入时钟延迟。为此,在设计中添加了逻辑,如下图所示,可以使用本节末尾的 CLKSEL 寄存器进行时钟选择。

该时钟相位移位器分别为 Tx/Rx 生成 0、90、180、270 相移的时钟。为了生成 50 MHz 的相移时钟,SDCLKIN 应为 100 MHz。

19 脉冲周期测量 (PPM)

19.1 概述

脉冲周期测量 (PPM) 测量从外部输入的1位信号的高电平和低电平的周期。

19.2 特性

PPM 提供以下功能:

  • 16位脉冲周期测量计数器
  • 溢出检查
  • 控制输入极性

19.3 模块图

  • PPMLOWPERIOD:PPM低周期寄存器:如果PPM信号从低电平变为高电平(上升沿检测),16位计数器的计数值存储在PPMLOWPERIOD寄存器中,并且16位计数器复位。
  • PPMHIGHPERIOD:PPM高周期寄存器:如果PPM信号从高电平变为低电平(下降沿检测),16位计数器的计数值存储在PPMHIGHPERIOD寄存器中,并且16位计数器复位。
  • 如果高电平或低电平周期过长以致无法通过16位计数器测量,则会发生溢出中断。

19.4 功能描述

当检测到PPM信号的上升沿或下降沿时,在将16位计数器的值存储到PPMLOWPERIOD寄存器或PPMHIGHPERIOD寄存器后,16位计数器复位。如果检测到下降沿,计数器值存储在PPMHIGHPERIOD寄存器中,然后计数器复位。如果检测到上升沿,计数器值存储在PPMLOWPERIOD寄存器中,然后计数器复位。如果高电平或低电平周期过长以致无法通过16位计数器测量,则会发生溢出中断。因此,应检查输入信号的IP-Remo,并指定合适的PPL时钟值以防止溢出中断的发生。

19.4.1 红外遥控协议示例

下图显示了通过红外接收模块的IP远程信号的代表性波形。

为了防止发生溢出中断,PPM时钟频率应在850 kHz至6.75 MHz之间。通过时钟分频器设置,可以在843,750 Hz至13,500,000 Hz范围内选择PPM时钟频率(1到31)。

19.4.2 定时

19.4.3 流程图

下图显示了一个检查红外遥控信号的流程图示例。PPM初始化过程:

  1. 设置GPIO
  2. 选择时钟源(XTI)
  3. 设置时钟分频器(1到31)
  4. 设置极性
  5. 设置中断模式(下降沿、上升沿和溢出)
  6. 初始化PPM状态寄存器
  7. 启用中断

20 脉宽调制 (PWM) 定时器

20.1 概述

S5P6818 有五个 32 位脉宽调制 (PWM) 定时器。这些定时器为 ARM 子系统生成内部中断。此外,定时器 0、1、2 和 3 包括驱动外部 I/O 信号的 PWM 功能。定时器 0 的 PWM 具有可选的死区生成能力,以支持大电流设备。定时器 4 是没有输出引脚的内部定时器。

定时器使用 APB-PCLK 作为源时钟。定时器 0 和 1 共享一个可编程的 8 位预分频器,提供 PCLK 的第一级分频。定时器 2、3 和 4 共享另一个 8 位预分频器。每个定时器都有自己的私有时钟分频器,提供第二级时钟分频(预分频器除以 2、4、8 或 16)。

每个定时器都有自己的 32 位向下计数器,由定时器时钟驱动。向下计数器最初从定时器计数缓冲寄存器 (TCNTBn) 加载。当向下计数器达到零时,生成定时器中断请求,通知 CPU 定时器操作完成。当定时器向下计数器达到零时,相应的 TCNTBn 值自动重新加载到向下计数器中,开始下一个周期。然而,当定时器停止时,例如,通过在定时器运行模式期间清除 TCONn 的定时器使能位,TCNTBn 的值不会重新加载到计数器中。

PWM 功能使用 TCMPBn 寄存器的值。如果向下计数器值与定时器控制逻辑中的比较寄存器值匹配,定时器控制逻辑更改输出电平。因此,比较寄存器确定 PWM 输出的开启或关闭时间。

TCNTBn 和 TCMPBn 寄存器是双缓冲的,因此允许在一个周期中间更新定时器参数。新值在当前定时器周期完成之前不会生效。下面的图示展示了一个简单的 PWM 周期示例。

将 TCNTBn 寄存器初始化为 159(50 + 109),将 TCMPBn 初始化为 109。启动定时器:设置启动位,并手动将此位更新为关闭。

TCNTBn 的值 159 被加载到向下计数器中。然后,输出 TOUTn 设置为低电平。当向下计数器从 TCNTBn 的值倒计数到 TCMPBn 寄存器中的值 109 时,输出从低电平变为高电平。

当向下计数器达到 0 时,会生成中断请求。向下计数器会自动重新加载 TCNTBn。这会重新开始周期。

下图说明了单个 PWM 通道的时钟生成方案:

20.2 特性

PWM 支持以下特性:

  • 五个 32 位定时器
  • 两个 8 位时钟预分频器,为 PCLK 提供第一级分频,五个时钟分频器和多路复用器,为预分频器时钟提供第二级分频
  • 为单个 PWM 通道提供可编程时钟选择逻辑
  • 四个独立的 PWM 通道,具有可编程占空比控制和极性
  • 静态配置:PWM 停止
  • 动态配置:PWM 运行
  • 自动重载模式和单次脉冲模式
  • 两个 PWM 输出的死区生成器
  • 电平中断生成

PWM 有两种操作模式:

  • 自动重载模式:在此模式下,基于编程的占空比和极性连续生成 PWM 脉冲
  • 单次脉冲模式:在此模式下,仅基于编程的占空比和极性生成一个 PWM 脉冲

为了控制 PWM 的功能,提供了 18 个特殊功能寄存器。PWM 是一个可编程输出和时钟输入 AMBA 从模块。它连接到高级外设总线 (APB)。PWM 内的这 18 个特殊功能寄存器通过 APB 事务访问。

20.3 PWM 操作

20.3.1 预分频器和分频器

一个 8 位预分频器和 3 位分频器生成这些输出频率。下表列出了基于预分频器和时钟分频器值的最小和最大分辨率:

4-bit Divider Settings

Minimum Resolution (Prescaler = 1)

Maximum Resolution (Prescaler = 255)

Maximum Interval (TCNTBn = 4294967295)

1/1 (PCLK = 66 MHz)

0.030us (33.0 MHz)

3.87us (258 kHz)

16659.27s

1/2 (PCLK = 66 MHz)

0.061us (16.5 MHz)

7.75us (129 kHz)

33318.53s

1/4 (PCLK = 66 MHz)

0.121us (8.25 MHz)

15.5us (64.5 kHz)

66637.07s

1/8 (PCLK = 66 MHz)

0.242us (4.13 MHz)

31.0us (32.2 kHz)

133274.14s

1/16 (PCLK = 66 MHz)

0.485us (2.06 MHz)

62.1us (16.1 kHz)

266548.27s

20.3.2 基本定时器操作

下图展示了基本定时器操作:

定时器(除定时器通道4外)包含四个寄存器:TCNTBn、TCNTn、TCMPBn 和 TCMPn。当定时器达到 0 时,TCNTBn 和 TCMPBn 寄存器被加载到 TCNTn 和 TCMPn 中。当 TCNTn 达到 0 时,如果中断已启用,则会发生中断请求。TCNTn 和 TCMPn 是内部寄存器的名称。从 TCNTOn 寄存器读取 TCNTn 寄存器。

要在 TOUTn 的三周期间隔生成中断,请设置 TCNTBn、TCMPBn 和 TCON。生成中断的步骤:

  1. 设置 TCNTBn = 3 和 TCMPBn = 1。
  2. 设置自动重载 = 1 和手动更新 = 1。当手动更新位为 1 时,TCNTBn 和 TCMPBn 值会加载到 TCNTn 和 TCMPn。
  3. 设置下一个操作的 TCNTBn = 2 和 TCMPBn = 0。
  4. 设置自动重载 = 1 和手动更新 = 0。如果设置手动更新 = 1,TCNTn 会变为 2,TCMP 变为 0。因此,中断在两周期而不是三周期的间隔生成。为下一次操作自动设置自动重载 = 1。
  5. 设置启动 = 1 以开始操作。然后,TCNTn 进行向下计数。当 TCNTn 为 0 时,会生成中断,并且如果启用了自动重载,TCNTn 会加载 2(TCNTBn 值)和 TCMPn 加载 0(TCMPn 值)。
  6. 在停止之前,TCNTn 进行向下计数。

20.3.3 自动重载和双缓冲

PWM 定时器包括双缓冲功能,该功能在不停止当前定时器操作的情况下更改下一个定时器操作的重载值。

定时器值写入 TCNTBn(定时器计数缓冲寄存器),定时器的当前计数器值从 TCNTOn(定时器计数观察寄存器)读取。如果读取 TCNTBn,读取值不反映计数器的当前状态。它反映下一个定时器周期的重载值。

当 TCNTn 达到 0 时,自动重载将 TCNTBn 复制到 TCNTn。当 TCNTn 达到 0 并启用自动重载时,写入 TCNTBn 的值会加载到 TCNTn。当 TCNTn 为 0 并且自动重载位为 0 时,TCNTn 不会进一步操作。

下图展示了双缓冲的示例:

20.3.4 定时器操作

定时器操作步骤:

  1. 启用自动重载功能。将 TCNTBn 设置为 159(50+109),将 TCMPBn 设置为 109。设置手动更新位为开启,然后将手动更新位关闭。设置反相器开启/关闭位。手动更新位将 TCNTn 和 TCMPn 设置为 TCNTBn 和 TCMPBn 的值。

  2. 将 TCNTBn 和 TCMPBn 分别设置为 79(40 + 39)和 39。

  3. 启动定时器:在 TCON 中设置启动位。

  4. 当 TCNTn 和 TCMPn 具有相同的值时,TOUTn 的逻辑电平从低变为高。

  5. 当 TCNTn 达到 0 时,会生成中断请求。

  6. TCNTn 和 TCMPn 会自动重新加载为 TCNTBn 和 TCMPBn,分别为 79(40 + 39)和 39。在中断服务程序 (ISR) 中,将 TCNTBn 和 TCMPBn 分别设置为 79(20 + 59)和 59。

  7. 当 TCNTn 和 TCMPn 具有相同的值时,TOUTn 的逻辑电平从低变为高。

  8. 当 TCNTn 达到 0 时,会生成中断请求。

  9. TCNTn 和 TCMPn 会自动重新加载为 TCNTBn 和 TCMPBn,分别为 79(20 + 59)和 59。在 ISR 中禁用自动重载和中断请求以停止定时器。

  10. 当 TCNTn 和 TCMPn 具有相同的值时,TOUTn 的逻辑电平从低变为高。

  11. 即使 TCNTn 达到 0,也不会生成中断请求。

  12. TCNTn 不会重新加载,并且定时器会停止,因为自动重载被禁用。

20.3.5 初始化定时器(设置手动更新和反相器)

用户必须定义 TCNTn 的起始值,因为当向下计数器达到 0 时,定时器会发生自动重载操作。在这种情况下,起始值必须通过手动更新位加载。

启动定时器的顺序如下:

  1. 将初始值写入 TCNTBn 和 TCMPBn。

  2. 设置手动更新位,并仅清除相应定时器的手动更新位。

注意:建议设置反相器的开/关位(无论是否使用反相器)。

  1. 设置相应定时器的启动位以启动定时器。

PWM(脉宽调制)

下图展示了一个 PWM 示例:

使用 TCMPBn 实现脉宽调制 (PWM) 功能。PWM 频率由 TCNTBn 决定。PWM 值由 TCMPBn 决定,如上图所示。

对于较高的 PWM 值,减小 TCMPBn 的值。对于较低的 PWM 值,增大 TCMPBn 的值。当输出反相器启用时,增减值可以相反。

由于双缓冲特性,TCMPBn 的值可以在当前 PWM 周期的任何时刻由 ISR 写入,以用于下一个 PWM 周期。

保持 TOUT 为高电平或低电平的步骤(假设反相器关闭):

  1. 关闭自动重载位。TOUTn 变为高电平,当 TCNTn 达到 0 后,定时器停止。这种方法推荐使用。

  2. 通过将定时器启动/停止位清零来停止定时器。当 TCNTn <= TCMPn 时,输出电平为高。当 TCNTn > TCMPn 时,输出电平为低。

  3. 通过 TCON 中的反相器开/关位反相 TOUTn。反相器消除了调整输出电平的附加电路。

20.3.6 死区生成器

此功能在两个不同开关设备的关闭和开启之间插入时间间隔。这个时间间隔禁止两个开关设备同时开启,即使是非常短的时间。

TOUT_0 指定 PWM 输出。nTOUT_0 指定 TOUT_0 的反相。当启用死区时,TOUT_0 和 nTOUT_0 的输出波形分别为 TOUT_0_DZ 和 nTOUT_0_DZ。由于死区间隔,TOUT_0_DZ 和 nTOUT_0_DZ 不能同时开启。为了功能正确,死区长度必须设置得比比较计数器值小。

下图展示了启用死区功能时的波形:

21 模拟数字转换器 (ADC)

21.1 概述

ADC2802A 是一种 28 nm CMOS 1.8 V 12 位模拟数字转换器 (ADC),具有 8 通道模拟输入多路复用器和低电压数字接口的电平移位器。它将单端模拟输入信号转换为 12 位数字输出代码,最大转换速率为 1 MSPS。

该设备是一种循环型单片 ADC,提供片上采样保持和掉电模式。

21.2 特性

  • 28 nm 低功耗 CMOS 工艺
  • 分辨率:12 位
  • 最大转换速率 (Fs)
    • 1 MSPS(主时钟:6 MHz/采样时钟:1 MHz)
  • 功耗:
    • 1.0 mW (Fs = 1 MSPS) @ 正常工作模式典型值
    • 0.005 mW @ 掉电模式典型值
  • 输入范围:0 到 AVDD18(通常为 1.8 V)
  • 输入频率:DC 到 100 kHz (@Fs = 1 MSPS)
  • 工作温度范围(环境):–25 °C 到 85 °C

21.3 模块图

21.4 功能描述

S5P6818 可以接收八个 ADC 输入,并使用 ADCCON.ASEL[2:0] 选择其中一个 ADC 输入。这八个 ADC 输入的大小取决于 VREF 的大小。

ADC 控制器使用 PCLK,并在预分频器中将 PCLK 分频后应用于 ADC。此时,ADCCON.APEN 位用于 CLKIN 的应用。预分频器的时钟分频值可以从 20 到 256。实际上,由于寄存器输入值是 [时钟分频值 - 1],较小的分频值使采样更详细。时钟分频值由 ADCCON.APSV 位决定。

如果 ADC 块在上电后连续接受输入,它会不必要地消耗电流。在这种情况下,最好使用 ADCCON.STBY 位关闭 A/D 转换器的电源。ADCCON.STBY 位决定 ADC 块的电源输入。如果 ADCCON.STBY 位为 "0",ADC 块在上电后等待 ADC 输入。之后,如果将 ADCCON.ADEN 位设置为 "1" 以接受 ADC 输入,ADC 操作实际上就会执行。

另一方面,如果 ADCCON.STBY 位为 "1",ADC 块进入掉电状态,即电源未被应用。这称为待机模式。在待机模式下,只有大约 20uA 的电流消耗。

如果不使用 ADC 块,请将 ADCCON.STBY 位设置为 "1" 并关闭 ADC 块的电源。这样可以减少 ADC 块的不必要功耗。此外,由于可以使用 ADCCON.APEN 位确定时钟的供给,当不需要供给时停止时钟供给可以进一步减少功耗。

21.4.1 I/O 表

21.4.2 时序图

上述图表显示了 ADC 的时序图。AIN[7:0] 从外部连续输入,并通过 ADCCON.APEN 位提供 CLKIN。使用 ASEL[2:0] 选择 AIN[7:0] 后,通过将 ADCCON.STBY 位设置为 "0" 为 ADC 块供电。最后,通过将 ADCCON.ADEN 位设置为 "1" 来进行 A/D 转换。转换完成后,会发生 EDO,并且 ADCCON.ADEN 位会自动清零为 "0"。此后,可以通过 ADCDAT.ADCDAT 读取 A/D 转换后的数据 (D1)。由于 10 位转换总是需要 5 个周期,因此 S5P6818 的最大转换速率为 1MSPS。将 ADCCON.ADEN 位设置为 "1" 以再次操作 ADC。

SOC 信号应在 CLK 的 "TSAFE" 区域内进行由低到高的过渡(如上图所示)。

SEL[3:0] 信号的转换应在虚线区域之前完成(即 SOC 上升沿之后的第一个 CLK 低电平期间)。

21.4.3 模拟输入选择表

CHANNEL

ASEL[2]

ASEL[1]

ASEL[0]

Analog Input [0]

0

0

0

Analog Input [1]

0

0

1

Analog Input [2]

0

1

0

Analog Input [3]

0

1

1

Analog Input [4]

1

0

0

Analog Input [5]

1

0

1

Analog Input [6]

1

1

0

Analog Input [7]

1

1

1

21.4.4 流程图

  • PCLK 供给:CLKENB.PCLKMODE = 1
  • 模拟输入选择:ADCCON.ASEL
  • ADC 电源开启:ADCCON.STBY = 0
  • CLKIN 分频值:ADCCON.APSV
  • CLKIN 开启:ADCCON.APEN
  • ADC 使能:ADCCON.ADEN
  • A/D 转换过程
  • 读取 ADCDAT.ADCDAT
  • CLKIN 关闭
  • ADC 电源关闭

22 I2C 控制器

22.1 概述

S5P6818 应用处理器支持 3 个多主 I2C 总线串行接口。为了在连接到 I2C 总线的总线主设备和外围设备之间传递信息,使用了专用的串行数据线 (SDA) 和串行时钟线 (SCL)。SDA 和 SCL 线都是双向的。

在多主 I2C 总线模式下,多个 S5P6818 应用处理器接收或发送从设备的串行数据。主 S5P6818 应用处理器通过 I2C 总线启动和终止数据传输。S5P6818 中的 I2C 总线使用标准的总线仲裁程序。

要控制多主 I2C 总线操作,必须向以下寄存器写入值:

  • 多主 I2C 总线控制寄存器:I2CCON
  • 多主 I2C 总线控制/状态寄存器:I2CSTAT
  • 多主 I2C 总线 Tx/Rx 数据移位寄存器:I2CDS
  • 多主 I2C 总线地址寄存器:I2CADD

如果 I2C 总线空闲,SDA 和 SCL 线都应为高电平。从高到低的 SDA 过渡表示总线忙碌。主设备始终生成起始和停止条件。在启动条件启动后,通过 SDA 线传输的数据字节中的第一个 7 位地址值可以确定总线主设备选择的从设备。第 8 位确定传输的方向(读或写)。

每个数据字节放到 SDA 线上后总共应为 8 位。在总线传输操作期间发送或接收字节没有限制。数据总是从最高有效位 (MSB) 开始发送,每个字节应紧跟一个确认 (ACK) 位。

22.2 特性

  • 3 通道多主、从 I2C 总线接口(3 通道用于通用)
  • 7 位地址模式
  • 串行、8 位定向、双向数据传输
  • 标准模式下支持高达 100 kbit/s
  • 快速模式下支持高达 400 kbit/s
  • 支持主发送、主接收、从发送和从接收操作
  • 支持中断或轮询事件
  • 输入频率:DC 到 100 kHz (@Fs = 1 MSPS)
  • 工作温度范围(环境):–25 °C 到 85 °C

22.3 模块图

22.4 功能描述

22.4.1 I2C 总线的概念

S5P6818 I2C 总线接口有 4 种操作模式:

  • 主发送模式
  • 主接收模式
  • 从发送模式
  • 从接收模式

以下描述了这些操作模式之间的功能关系。下表显示了 I2C 总线的基本术语。

22.4.2 I2C 协议

SDA 和 SCL 都是双向线路,通过电流源或上拉电阻连接到正电源电压。下图显示了 I2C 总线的硬件布局。当总线空闲时,两条线路都是高电平。连接到总线的设备的输出级必须具有开漏或集电极开路,以执行有线与功能。I2C 总线上的数据可以以标准模式下最高 100 kbit/s 或快速模式下最高 400 kbit/s 的速率传输。

下图显示了 I2C 总线垫结构的附加信息。

22.4.3 启动/停止操作

如果 I2C 总线接口处于非活动状态,通常处于从模式。换句话说,接口应在 SDA 线上检测到启动条件之前处于从模式(启动条件是在 SCL 时钟信号为高电平时,SDA 线从高到低的过渡)。如果接口状态更改为主模式,SDA 线启动数据传输并生成 SCL 信号。

启动条件通过 SDA 线传输一个字节的串行数据,停止条件终止数据传输。停止条件是在 SCL 高电平时,SDA 线从低到高的过渡。主设备生成启动和停止条件。如果生成启动条件,I2C 总线变得繁忙。另一方面,停止条件释放 I2C 总线。

如果主设备启动一个启动条件,它应发送从设备地址以通知从设备。一个字节的地址字段由 7 位地址和 1 位传输方向指示符(指示写或读)组成。

如果第 8 位是 0,则表示写操作(发送操作);如果第 8 位是 1,则表示请求数据读取(接收操作)。

主设备通过发送停止条件完成传输操作。如果主设备希望继续向总线传输数据,它应生成另一个启动条件以及一个从设备地址。通过这种方式,以各种格式执行读写操作。

22.4.4 数据传输格式

放置在 SDA 线上的每个字节应为 8 位长度。每次传输的字节数量没有限制。启动条件后的第一个字节应包含地址字段。如果 I2C 总线处于主模式,主设备会发送地址字段。每个字节后应跟一个确认 (ACK) 位。串行数据和地址的最高有效位 (MSB) 先发送。

22.4.5 ACK 信号传输

为了完成一个字节的传输操作,接收方会向发送方发送一个 ACK 位。ACK 脉冲出现在 SCL 线的第九个时钟周期。一个字节的数据传输需要八个时钟周期。主设备会生成传输 ACK 位所需的时钟脉冲。

如果接收到 ACK 时钟脉冲,发送方会将 SDA 线设置为高电平以释放 SDA 线。接收方在 ACK 时钟脉冲期间将 SDA 线驱动为低电平,从而 SDA 在第九个 SCL 脉冲的高电平期间保持低电平。软件(I2CSTAT)启用或禁用 ACK 位传输功能。然而,要完成一个字节的数据传输操作,第九个 SCL 时钟上的 ACK 脉冲是必需的。

22.4.6 读写操作

在发送模式下传输数据时,I2C 总线接口会等待 I2C 总线数据移位 (I2CDS) 寄存器接收到新数据。在新数据写入寄存器之前,SCL 线保持低电平。数据写入后,线路才会释放。I2C 会保持中断以标识当前数据传输的完成。当 CPU 接收到中断请求后,它会再次将新数据写入 I2CDS 寄存器。

如果在接收模式下接收数据,I2C 总线接口会等待 I2CDS 寄存器被读取。在新数据被读出之前,SCL 线保持低电平。数据读取后,线路才会释放。I2C 会保持中断以标识新数据接收的完成。当 CPU 接收到中断请求后,它会从 I2CDS 寄存器读取数据。

22.4.7 总线仲裁程序

仲裁在 SDA 线上进行,以防止两个主设备在总线上的争用。如果一个主设备检测到 SDA 为高电平而其他主设备为低电平,它不会启动数据传输,因为总线上的当前电平与其自身的电平不一致。仲裁过程会一直持续到 SDA 线变为高电平。

如果主设备同时将 SDA 线拉低,则每个主设备会评估是否自己获得了主控权。为了进行评估,每个主设备都会检测地址位。当每个主设备生成从设备地址时,它会检测 SDA 线上的地址位,因为 SDA 线可能会变低而不是变高。

假设一个主设备将第一个地址位生成为低电平,而另一个主设备保持高电平。在这种情况下,由于低电平在电源中优先于高电平,两个主设备在总线上都会检测到低电平。如果发生这种情况,生成低电平(作为地址的第一位)的主设备获得主控权,而生成高电平(作为地址的第一位)的主设备放弃主控权。如果两个主设备将第一个地址位生成为低电平,则对第二个地址位再次进行仲裁。这种仲裁会一直持续到最后一个地址位。

22.4.8 中止条件

如果从接收器无法确认从地址的确认信号,它会将 SDA 线的电平保持为高电平。在这种情况下,主设备生成停止条件并取消传输。

如果主接收器参与中止的传输,它会在接收到从设备的最后一个数据字节后,通过取消生成 ACK 信号来表示从设备传输操作的结束。从发送器释放 SDA 以允许主设备生成停止条件。

22.4.9 配置 IIC 总线

为了控制串行时钟 (SCL) 的频率,可以在 I2CCON 寄存器中编程 4 位预分频器值。I2C 总线接口地址存储在 I2C 总线地址 (I2CADD) 寄存器中(默认情况下,I2C 总线接口地址具有未知值)。

编程指南

22.5.1 各模式下操作的流程图

S5P6818 应用处理器支持 3 个多主 I2C 总线串行接口。为了在连接到 I2C 总线的总线主设备和外围设备之间传递信息,使用了专用的串行数据线 (SDA) 和串行时钟线 (SCL)。SDA 和 SCL 线都是双向的。

在进行任何 I2C 发送/接收操作之前,必须执行以下步骤:

  1. 如果需要,在 I2CADD 寄存器中写入自己的从设备地址。

  2. 设置 I2C CON 寄存器

    • 启用中断
    • 定义 SCL 周期
  3. 设置 I2CSTAT 以启用串行输出

23 SPI/SSP

23.1 概述

SPI/SSP 是一种全双工同步串行接口。它支持串行外设接口 (SPI) 和同步串行协议 (SSP)。它可以连接到各种外部转换器、串行存储器和许多其他使用串行协议传输数据的设备。

与 SPI/SSP 传输相关的 4 个 I/O 引脚信号:SSPCLK,SSPRXD 数据接收线,SSPTXD 数据传输线,SSPFSS(SPI 模式下的芯片选择,在 SSP 模式下的帧指示器)。

S5P6818 具有三个 SPI/SSP 端口,可以在主模式和从模式下操作。

23.2 特性

  • 支持 Motorola SPI 协议和 National Semiconductor Microwire
  • 支持 8 位/16 位/32 位总线接口
  • 主模式和从模式
  • DMA 请求服务传输和接收 FIFO
  • 支持 DMA 单一或 4 个突发
  • 最大 SSP CLKGEN 频率为 100 MHz
  • 最大操作频率
    • 主模式:50 MHz(接收数据为 20 MHz,或反馈时钟配置为 40 MHz)
    • 从模式:8 MHz

23.3 模块图

PAD接口

  • SSPCLK
  • SSPFSS
  • SSPTXD(MOSI: SSPTXD输出/SSPRXD输入)
  • SSPRXD(MISO: SSPTXD输入/SSPRXD输出)

23.4 功能描述

23.4.1 时钟/复位配置

23.4.1.1 复位配置

SPI/SSP通过全局复位信号PRESETn复位。在S5P6818中,PRESETn由复位控制器控制。用户可以通过CPU设置SPI/SSP的复位信号。

23.4.1.2 时钟配置

当SPI/SSP传输或接收SPI/SSP协议时,使用SPI_EXT_CLK。SPI_EXT_CLK由SPI/SSP的时钟生成器产生。每个SPI/SSP都有自己的时钟生成器。因此,用户必须在SPI配置阶段之前设置SPI/SSP时钟生成器。

SPI/SSP 提供了多种时钟选项。如图所示,在 SPI 配置中,SPI 使用来自 SPI/SSP 时钟生成器的 SPI_EXT_CLK。您还可以从各种时钟源中选择 SPI_EXT_CLK。SPI 内部有一个 2x 时钟分频器。SCLK_SPI 应配置为 SPI 操作时钟频率的两倍。

23.4.2 串行外设接口的操作

SPI 在外部设备之间传输 1 位串行数据。SPI 支持 CPU 或 DMA 分别传输或接收 FIFO,并同时双向传输数据。SPI 有两个通道,TX 通道和 RX 通道。TX 通道从 Tx FIFO 到外部设备,RX 通道从外部设备到 RX FIFO。

CPU(或 DMA)必须在 SPI_TX_DATA 寄存器上写入数据以在 FIFO 中写入数据。寄存器上的数据会自动移动到 Tx FIFO。要从 Rx FIFO 读取数据,CPU(或 DMA)必须访问 SPI_RX_DATA 寄存器,数据会自动发送到 SPI_RX_DATA 寄存器。

SPI 的操作频率可以通过 SPI/SSP 时钟生成器控制。SPI 主时钟频率是 SPI_EXT_CLK 的一半。

23.4.3 FIFO 访问

SPI 支持 CPU 和 DMA 访问 FIFO。CPU 和 DMA 访问 FIFO 的数据大小可以选择为 8 位、16 位或 32 位。如果选择了 8 位数据大小,则有效位为 0 位到 7 位。用户可以定义触发阈值以向 CPU 发出中断。每个 FIFO 的触发水平是从 0 字节到 252 字节,以 4 字节步长设置。必须设置 SPI_MODE_CFG 寄存器的 TxDMAOn 或 RxDMAOn 位才能使用 DMA 访问。DMA 访问仅支持单次传输和 4 次突发传输。在 Tx FIFO 中,DMA 请求信号在 Tx FIFO 满时保持高电平。在 Rx FIFO 中,如果 FIFO 不为空,则 DMA 请求信号保持高电平。

23.4.4 尾字节中断

Rx FIFO 中的数据可能小于 INT 模式下的 Rx 中断触发水平或 DMA4 突发模式下的 4 字节。如果没有接收到更多数据,则无法通过 INT 或 DMA 检索 Rx FIFO 中的剩余数据。Rx FIFO 中的剩余数据称为尾字节,可以通过尾字节中断处理。

SPI 内部有尾字节计数器。当 Rx FIFO 接收到数据时,尾字节计数器设置为 MODE_CFGn 寄存器中的计数值 TRAILNG_CNT。尾字节计数器在 Rx FIFO 计数小于 INT 模式下的 Rx 中断触发水平或 DMA4 突发模式下的 4 字节时减少,并发生尾字节中断,CPU 可以在计数值为零时移除尾字节。

23.4.5 数据包数量控制

SPI 控制在主模式下接收的数据包数量。设置 SFR(PACKET_CNT_REG)以接收任意数量的数据包。如果数据包数量与 PACKET_CNT_REG 相同,SPI 停止生成 SPICLK。一个数据包的大小与通道宽度相同(如果通道宽度配置为字节,则一个数据包是一个字节;如果通道宽度配置为字,则一个数据包是四个字节)。在重新加载此功能之前,必须遵循软件或硬件重置(软件重置可以清除所有寄存器,除了特殊功能寄存器,但硬件重置会清除所有寄存器)。

23.4.6 片选控制

片选 SSPFSS 是低电平有效信号。换句话说,当 SSPFSS 输入为 0 时,选中一个芯片。SSPFSS 可以自动或手动控制。使用手动控制模式时,必须清除 AUTO_N_MANUAL(默认值为 0)。NSSOUT 位控制 SSPFSS 级别。

使用自动控制模式时,必须将 AUTO_N_MANUAL 设置为 1。SSPFSS 在数据包和数据包之间自动切换。SSPFSS 的非活动期由 NCS_TIME_COUNT 控制。此时,NSSOUT 不可用。

23.4.7 高速操作 - 从模式

SPI 支持最高 50 MHz 的 Tx/Rx 操作,但存在限制。当 SPI 作为从设备工作时,在最坏的操作条件下会产生超过 15ns 的大延迟。如此大的延迟可能会导致 SPI 主设备的设置违规。为了解决这个问题,SPI 通过将 CH_CFG 寄存器的 HIGH_SPEED 位设置为 1 来提供快速从模式 Tx。在该模式下,MISO 输出延迟减少了半个周期,因此 SPI 主设备具有更多的设置余量。然而,快速从模式 Tx 只能在 CPHA = 0 时使用。

23.4.8 反馈时钟选择

根据 SPI 协议规范,SPI 主设备应该捕获从设备(SSPRXD)发出的输入数据,通过其内部 SPICLK。如果 SPI 以高操作频率(如 50 MHz)运行,则难以捕获 SSPRXD 输入,因为 MISO 的所需到达时间,即半周期内的时间,比包含 SPI 主设备的 SPICLK 输出延迟、SPI 从设备的 MISO 输出延迟和 SPI 主设备的 MISO 输入延迟的 MISO 到达时间短。为了解决这个问题,SPI 提供了 3 个反馈时钟,这些时钟是内部 SPICLK 的相位延迟时钟。

23.4.9 SPI 传输格式

支持四种不同的数据传输格式。下图描述了 SPICLK 的四种波形。

24 MPEG-TS 接口

24.1 概述

MPEG 接口模块接收 MPEG 传输解码器芯片的输出,然后使用 S5P6818 的快速 DMA 将传输的数据存储到主内存中。

24.2 功能

• 支持 8 位并行模式
• 支持外部/内部 DMA
• 支持 AES/CAS 编解码
• 支持 2 通道 MPEG TS 接口输入
• 支持 1 通道 MPEG TS 接口输出

24.3 功能描述

24.3.1 时序

图中显示了一个时序图,其中 S5P6818 通过 MPEG TS 接口在外部设备发送数据时读取数据。如果外部设备在上升沿发送数据,S5P6818 实际上会在下降沿读取数据。

外部设备可以提供时钟以及 MPEG TS 的时序。上图显示了外部设备可以提供的时钟类型。时钟类型由外部设备输出数据的时点决定。 • A 类设备在上升沿输出数据。CAP_CTRL.CAP_CLK_POL 位的值为“0”,MPEG TSP 在下降沿读取数据,如上所述。 • B 类设备在下降沿输出数据。CAP_CTRL.CAP_CLK_POL 位的值为“1”。 • C 类设备与 A 类设备非常相似。与 A 类设备的不同之处在于这些设备不检查奇偶校验。 • D 类设备与 B 类设备非常相似。与 B 类设备的不同之处在于这些设备不检查奇偶校验。

如果 TSI_DP 的值为“1”,该值表示数据。如果值为“0”,该值表示奇偶校验。然而,这个值可能根据设备属性有相反的含义。在这种情况下,可以通过将 MPEGIFCONT.DP_POL 位设置为“1”来改变其极性。

25 UART_ISO7816

25.1 概述

S5P6818中的通用异步接收发送器(UART)提供:

六个独立通道,具有异步和串行输入/输出端口用于一般目的(通道 0 至 5),两个通道没有调制解调器且具有 DMA(NOMODEM_DMA UART 通道 0、1),一个通道具有调制解调器和 DMA(MODEM_DMA UART 通道 2),以及三个没有调制解调器和 DMA 的通道(NOMODEM_NODMA UART 通道 3、4、5)。

所有端口在基于中断的或基于 DMA 的模式下操作。UART 生成中断或 DMA 请求,以将数据在 CPU 和 UART 之间传输。UART 支持高达 4 Mbps 的比特率。每个 UART 通道包含两个 64 字节的 FIFO,用于接收和传输数据。

UART 包括可编程波特率、红外(IR)发射器/接收器、一个或两个停止位插入、5位、6位、7位或8位数据宽度和奇偶校验检查。

每个 UART 包含一个波特率发生器、一个发送器、一个接收器和一个控制单元。波特率发生器使用 EXT_UCLK。发送器和接收器包含 FIFO 和数据移位器。传输的数据写入 Tx FIFO,并复制到传输移位器。然后通过传输数据引脚(TXD)移出。接收到的数据从接收数据引脚(RXD)移动,并从移位器复制到 Rx FIFO。

25.2 功能

• 所有通道支持基于中断的操作
• 除了 ISP-UART 通道 0,所有通道支持基于 DMA 的或基于中断的操作
• 除了 UART 通道 2,所有通道支持带 nRTS 和 nCTS 的自动流控
• 支持握手发送/接收

下图展示了 UART 的方块图。

25.3 UART 描述

本节描述了 UART 操作,例如数据传输、数据接收、中断生成、波特率生成、回环模式、红外模式和自动流控制。

25.3.1 数据传输

传输的数据帧是可编程的。它包括一个起始位、五到八个数据位、一个可选的奇偶校验位和一到两个停止位,这些由行控制寄存器(ULCONn)指定。发射器还可以产生一个中断条件,强制串行输出为逻辑0状态,持续一个帧的传输时间。此块在当前传输字完全传输后,传输中断信号。中断信号传输后,发射器将数据连续传输到 Tx FIFO(非 FIFO 模式下的 Tx 保持寄存器)。

25.3.2 数据接收

与数据传输类似,接收的数据帧也是可编程的。它由一个起始位、五到八个数据位、一个可选的奇偶校验位和一到两个停止位组成,这些在行控制寄存器(ULCONn)中设置。接收器检测溢出错误、奇偶校验错误、帧错误和中断条件。每种错误都会设置一个错误标志。

溢出错误表明新数据在被读取前覆盖了旧数据。奇偶校验错误表明接收器检测到意外的奇偶校验条件。帧错误表明接收的数据没有有效的停止位。中断条件表明 RXD 输入在逻辑0状态保持了超过一个帧的传输时间。

接收超时条件发生在 FIFO 模式下 Rx FIFO 非空且在 UCON 中指定的帧时间内未接收到更多数据时。

25.3.3 自动流控制(AFC)

S5P6818 中的 UART2 和调制解调器 UART 支持使用 nRTS 和 nCTS 信号的自动流控制(AFC)。在这种情况下,它可以连接到外部 UART。连接 UART 到调制解调器时,禁用 UMCONn 寄存器中的 AFC 位,并使用软件控制 nRTS 信号。

在 AFC 中,nRTS 信号取决于接收器的状态,而 nCTS 信号控制发射器的操作。当 nCTS 信号激活时(在 AFC 中,nCTS 信号表明其他 UART 的 FIFO 准备好接收数据),UART 的发射器将数据传输到 FIFO。在 UART 接收数据前,当其接收 FIFO 有超过2字节的空间时必须激活 nRTS 信号。当其接收 FIFO 的空间少于1字节时必须停用 nRTS 信号(在 AFC 中,nRTS 信号表明其自己的接收 FIFO 准备好接收数据)。

下图展示了 UART AFC 接口。

25.3.4 非自动流控制(通过软件控制 nRTS 和 nCTS)

25.3.4.1 使用 FIFO 的接收操作

以下步骤描述了使用 FIFO 的接收操作:

  1. 选择传输模式(中断或 DMA 模式)

  2. 检查 UFSTATn 寄存器中的 Rx FIFO 计数值。当该值小于16时,必须将 UMCONn[0] 的值设置为“1”(激活 nRTS)。然而,当值等于或大于16时,必须将值设置为“0”(停用 nRTS)。

  3. 重复步骤 2

25.3.4.2 使用 FIFO 的发送操作

以下步骤描述了使用 FIFO 的发送操作:

  1. 选择传输模式(中断或 DMA 模式)

  2. 检查 UMSTATn[0] 的值。当该值为“1”(激活 nCTS)时,必须向 Tx FIFO 寄存器写入数据

  3. 重复步骤 2

25.3.5 中断/DMA 请求生成

S5P6818中的每个 UART 包括七个状态(Tx/Rx/Error)信号:溢出错误、奇偶校验错误、帧错误、中断、接收缓冲区数据就绪、发送缓冲区空和发送移位器空。这些条件由相应的 UART 状态寄存器(UTRSTATn/UERSTATn)指示。

溢出错误、奇偶校验错误、帧错误和中断条件指定接收错误状态。当控制寄存器(UCONn)中的接收错误状态中断使能位设置为“1”时,接收错误状态会生成接收错误状态中断。当检测到接收错误状态中断请求时,可以通过读取 UERSTATn 的值来识别中断的来源。

当接收器在 FIFO 模式下将接收移位器的数据传输到接收 FIFO 寄存器,并且接收到的数据量大于或等于 Rx FIFO 触发水平时,如果控制寄存器(UCONn)中的接收模式设置为“1”(中断请求或轮询模式),则会生成 Rx 中断。

在非 FIFO 模式下,将接收移位器的数据传输到接收保持寄存器会在中断请求和轮询模式中引起 Rx 中断。

当发射器将数据从其发送 FIFO 寄存器传输到发送移位器,并且发送 FIFO 中剩余的数据量小于或等于 Tx FIFO 触发水平时,会生成 Tx 中断(前提是控制寄存器中选择的传输模式为中断请求或轮询模式)。在非 FIFO 模式下,将数据从发送保持寄存器传输到发送移位器,会在中断请求和轮询模式中引起 Tx 中断。

当发送 FIFO 中的数据量小于触发水平时,总是请求 Tx 中断。这表明当启用 Tx 中断时,除非填满 Tx 缓冲区,否则会请求中断。 因此,建议先填满 Tx 缓冲区,然后启用 Tx 中断。

S5P6818 的中断控制器被分类为电平触发类型。在编程 UART 控制寄存器时,必须将中断类型设置为“电平”。 在这种情况下,当在控制寄存器中选择 Recneivee xane 和 Tlrlan/smyit smo.dkesimin 的 DMA 请求模式时,将发生 DMA 请求,而不是 Rx 或 Tx 中断。

下表描述了与 FIFO 相关的中断。

Type

FIFO Mode

Non-FIFO Mode0

Rx interrupt

Generated when Rx FIFO count is greater than or equal to the trigger level of received FIFO. Generated when the amount of data in FIFO

does not reach Rx FIFO trigger level and does

not receive any data during the time specified (receive time out) in UCON.

Generated by receive holding register whenever receive buffer becomes full.

Tx interrupt

Generated when Tx FIFO count is less than or equal to the trigger level of transmit FIFO (Tx FIFO trigger Level).

Generated by transmit holding register whenever transmit buffer becomes empty.

Error interrupt

Generated when Frame Error, Parity Error, or Break Signal are detected.

Generated if UART receives new data when Rx FIFO is full (overrun error).

Generated by all errors. However, when another error occurs at the same time, only one interrupt is generated.

25.3.6 UART 错误状态 FIFO

UART 除了 Rx FIFO 寄存器外,还包含错误状态 FIFO。错误状态 FIFO 指示接收到错误的数据,这些数据存在于 FIFO 寄存器中。只有当包含错误的数据准备好读取时,才会发出错误中断。要清除错误状态 FIFO,必须读出带有错误的 URXHn 和 UERSTATn。

例如,假设 UART Rx FIFO 顺序接收字符 A、B、C、D 和 E,接收“B”时发生帧错误,接收“D”时发生奇偶校验错误。

实际的 UART 接收错误不会生成任何错误中断,因为接收到错误的字符未被读取。当读取该字符时,才会发生错误中断。

红外模式

S5P6818 的 UART 模块支持红外(IR)传输和接收。通过设置 UART 行控制寄存器(ULCONn)中的红外模式位来选择。下图展示了如何实现红外模式。

在红外传输模式中,传输脉冲以 3/16 的比率输出,即正常的串行传输速率(当传输数据位为 0 时)。然而,在红外接收模式中,接收器必须检测到 3/16 的脉冲周期才能识别为 0 值。

下图展示了红外接收模式帧时序图。

25.3.7 UART 波特率

25.3.7.1 UART 波特率配置

存储在波特率除数(UBRDIVn)和除数小数值(UFRACVALn)中的值用来确定串行 Tx/Rx 时钟率(波特率),如下所示:

例如,当波特率为 115200 bps 且 SCLK_UART 为 40 MHz 时,UBRDIVn 和 UFRACVALn 的值为:

25.3.7.2 波特率误差容忍度

1 帧 = 起始位 + 数据位 + 奇偶校验位 + 停止位。

25.3.7.3 UART 时钟与 PCLK 关系

PCLK 与 UARTCLK 的时钟频率之间存在比率限制。

这样可以保证有足够的时间将接收到的数据写入接收 FIFO。

25.3.8 ISO-7816

下图代表 ISO-7816 接口。UARTTXD 和 UARTRXD 信号通过智能卡适配器块连接到外部引脚。用户可以选择是否通过 USESMC、SMCTXENB、SMCRXENB 信号使用 ISO-7816,这些信号可以通过寄存器控制。

在通过 ISO-7816 接口进行通信的情况下,SMC 引脚由 NXOpenDrainAdapter 的 PAD 接口控制。

26 USB2.0 OTG

26.1 概述

USB On-The-Go (OTG) 是一个双角色设备(DRD)控制器,支持设备和主机功能。它完全符合 USB 2.0 规范的 On-The-Go 补充文件,修订版 1.0a。它支持高速(HS, 480 Mbps)、全速(FS, 12 Mbps)和低速(LS, 1.5 Mbps, 仅限主机)传输。HS OTG 可配置为仅主机或仅设备控制器。

26.2 功能

USB2.0 HS OTG 的功能包括以下几点:

• 符合 USB 2.0 规范的 On-The-Go 补充文件(修订版 1.3a) • 在高速(480 Mbps)、全速(12 Mbps)和低速(1.5 Mbps, 仅限主机)模式下运行 • 支持 UTMI+ Level 3 接口(修订版 1.0) • 支持会话请求协议(SRP)和主机协商协议(HNP) • 仅支持 32 位数据传输 • 1 个控制端点 0 用于控制传输 • 包括控制端点 0 在内的 16 个设备模式端点 • 可编程端点类型:批量、等时或中断 • 可编程 IN/OUT 方向 • 支持 16 个主机通道

26.3 方块图

USB 2.0 OTG 控制器的组成模块包括以下几部分:

• USB 2.0 时钟生成器(CLOCK GEN) • USB 2.0 物理层控制(PHY Control) • USB 2.0 物理层链接(PHY Link)

每个模块都有一个 AHB 从设备,为 CPU 提供对控制和状态寄存器的读写访问。OTG 链接拥有一个 AHB 主设备用于在 AHB 上传输数据。

上图所示的 USB 系统支持以下端口:

• USB 2.0 OTG 1 端口

26.4 I/O 引脚描述

26.5 功能描述

26.5.1 端点数据包大小

此芯片的 USB OTG 支持 8 个端点。在设备模式下,每个端点(EP, Endpoint)的最大数据包大小如下:

26.5.2 USB 5V 电源检测

您可以通过 USB PHY 寄存器的 VBUSVLDEXTSEL 选择两个 VBUS 中的一个。

26.5.3 强制断电

为了降低功耗,可以断电 USB 2.0 OTG 模块的所有模拟电路。请参阅以下表格,了解设置寄存器以强制断电和上电的方法。

26.5.4 外部充电泵

USB 2.0 PHY 需要一个片外充电泵来为 USB 2.0 OTG PHY 的 VBUS 引脚供电。下图显示了充电泵与 USB 2.0 PHY 的连接方式。 充电泵的输出直接连接到设备板上的 VBUS。USB 2.0 PHY 的 VBUS 引脚也连接到 VBUS。充电泵的 DRVVBUS 输入是 OTG HNP 有限状态机的输出,也是 USB 2.0 PHY 的输入。

VBUS 在最坏情况下的核心侧负载为 500pF。这种最坏情况下的负载是对总电容预算的小增加,其中包括由于布线、焊盘、封装、板上走线和接收器造成的外部电容负载。

26.5.5 操作模式

应用程序可以将链接操作在 DMA 模式或从设备模式。应用程序不能同时使用 DMA 和从设备模式操作核心。

26.5.5.1 DMA 模式

USB OTG 主机使用 AHB 主接口来传输数据包数据获取(AHB 到 USB)和接收数据更新(USB 到 AHB)。AHB 主设备使用编程的 DMA 地址(主机模式中的 HCDMAn 寄存器和设备模式中的 DIEPDMAn/DOEPDMAn 寄存器)来访问数据缓冲区。

26.5.5.2 从设备模式

USB OTG 可以在事务级操作或管线化事务级操作中运行。在事务级操作中,应用程序一次处理每个通道/端点的一个数据包。在管线化事务级操作中,应用程序程序化 OTG 执行多个事务。管线化操作的优点是应用程序不会因数据包基础而中断。

26.6 编程用户配置 PHY 和 OTG LINK

  1. 释放 OTG 公共重置
  • 在地址 0xC0012004,将 RSTCON1[25] 编程为 1'b1
  1. 将缩放模式编程为实际模式
  • 在地址 0xC0011030,将 TIEOFFREG12[1:0] 编程为 2'b00
  1. 选择字接口并启用字接口选择
  • 8位字接口:在地址 0xC0011038,将 TIEOFFREG14[9:8] 编程为 2'b01
  • 16位字接口:在地址 0xC0011038,将 TIEOFFREG14[9:8] 编程为 2'b11
  1. 选择 VBUS
  • 模拟 5V USBVBUSIO:在地址 0xC0011034,将 TIEOFFREG13[25:24] 编程为 2'b00
  • 数字 USBVBUS:在地址 0xC0011034,将 TIEOFFREG13[25:24] 编程为 2'b11
  1. PHY 的上电复位(POR)
  • 在地址 0xC0011034,将 TIEOFFREG13[8:7] 编程为 2'b01
  1. 等待 PHY 的时钟:大约 40 微秒

  2. 释放 UTMI 重置

  • 在地址 0xC0011034,将 TIEOFFREG13[3] 编程为 1'b1
  1. 释放 AHB 重置
  • 在地址 0xC0011034,将 TIEOFFREG13[2] 编程为 1'b1

27 USB2.0 主机

27.1 概述

USB 2.0 EHCI 主机控制器完全符合 USB 2.0 规范和增强型主机控制器接口(EHCI)规范(修订版 2.0)。该控制器支持高速传输,速度为 480 Mbps(比 USB 1.1 全速模式快 40 倍),以及与 USB 1.1 OHCI 主机控制器的伴侣控制器集成。该控制器设计为独立于应用程序的总线接口单元(BIU),屏蔽 USB 2.0 主机控制器原生协议的复杂性,便于将 EHCI 主机控制器与行业标准的 AHB 或 PCI 总线或目标应用程序集成。 在 USB 2.0 物理接口,EHCI 主机控制器设计有 USB 2.0 收发器宏单元接口。此外,控制器还提供高速互连芯片(HSIC)(版本 1.0)。

27.2 功能

主机控制器负责:

• 检测 USB 设备的连接和断开 • 收集状态和活动统计信息 • 控制附加 USB 设备的电源供应 • 通过端口路由器控制与开放主机控制器接口或增强主机控制器的关联 • 根集线器功能支持上/下游端口 • 支持高速互连芯片(HSIC),版本 1.0

27.3 方块图

下图显示了具有 BIU(总线接口单元)的 USB 2.0 EHCI 主机控制器的架构,以及主要构建模块和伴侣控制器(USB 1.1 OHCI 主机控制器)。

27.4 功能描述

27.4.1 在 EHCI 或 OHCI 中配置 PHY 和 LINK 的用户编程

  1. 释放主机控制器的公共重置

    • 在地址 0xC0012004,将 RSTCON1[24] 编程为 1'b1
  2. 编程 AHB 突发类型

    • SINGLE: 默认。在地址 0xC001101C,将 TIEOFFREG7[27:25] 编程为 3'b000。
    • INCR16(OHCI 不支持 INCR16):在地址 0xC001101C,将 TIEOFFREG7[27:25] 编程为 3'b111(推荐)
    • INCR8(OHCI 不支持 INCR8):在地址 0xC001101C,将 TIEOFFREG7[27:25] 编程为 3'b110
    • INCR4(OHCI 控制器部分仅支持 INCR4 或 SINGLE):在地址 0xC001101C,将 TIEOFFREG7[27:25] 编程为 3'b100
  3. 选择字接口并启用字接口选择

    • 8位字接口:在地址 0xC0011014,将 TIEOFFREG5[26:25] 和地址 0xC0011024 的 TIEOFFREG9[10:9] 编程为 2'b01
    • 16位字接口:在地址 0xC0011014,将 TIEOFFREG5[26:25] 和地址 0xC0011024 的 TIEOFFREG9[10:9] 编程为 2'b11
  4. PHY 的上电复位(POR)

    • 在地址 0xC0011020,将 TIEOFFREG8[8:7] 编程为 2'b01
  5. 等待 PHY 时钟:大约 40 微秒

  6. 释放 UTMI 重置

    • 在地址 0xC0011014,将 TIEOFFREG5[21:20] 编程为 2'b11
  7. 释放 EHCI、OHCI 的 AHB 重置

    • 在地址 0xC0011034,将 TIEOFFREG13[19:17] 编程为 3'b111

27.4.2 在 HSIC 中配置 PHY 和 LINK 的用户编程

同上述 EHCI/OHCI 的配置步骤,除了:

  1. 编程 HSIC 模式

    • 在地址 0xC0011014,将 TIEOFFREG5[24:23] 编程为 2'b11
  2. HSIC PHY 的上电复位(POR)

    • 在地址 0xC0011028,将 TIEOFFREG10[19:18] 编程为 2'b01
  3. 等待 HSIC PHY 时钟:大约 40 微秒

  4. 释放 UTMI 重置

    • 在地址 0xC0011014,将 TIEOFFREG5[20] 和 TIEOFFREG5[22] 分别编程为 1'b1
  5. 释放 AHB 重置

    • 在地址 0xC0011014,将 TIEOFFREG5[19:17] 编程为 3'b111

27.4.3 HSIC 编程的注意点

  • 端口状态控制寄存器:
    • EHCI 使用 PORTSC_1 (地址: 0xC0030054)
    • HSIC 使用 PORTSC_2 (地址: 0xC0030058)
  • 如何启用端口电源控制开关:
    • EHCI 情况:在地址 0xC0030054,将 PORTSC_1[12] 设置为 1'b1
    • HSIC 情况:在地址 0xC00300B0,将 INSNREG08[1] 设置为 1'b1

28 I2S

28.1 概述

Inter-IC Sound(IIS)是流行的数字音频接口之一。IIS 总线处理音频数据,其他信号,例如子编码和控制,是分开传输的。可以在两个 IIS 总线之间传输数据。为了最小化所需的引脚数量并保持接线简单,基本上使用了三线串行总线。这包括一条线用于两个时间复用的数据通道,一个字选择线和一个时钟线。

IIS 接口从外部立体声音频编解码器传输或接收声音数据。为了传输和接收数据,包括两个 32 × 64 FIFO(先进先出)数据结构,并且可以支持 DMA 传输模式来传输和接收样本。IIS 特定的时钟可以通过 IIS 时钟分频器或直接时钟源从内部系统时钟控制器提供。

28.2 功能

• 具有基于 DMA 的操作的 2 端口立体声(2 通道)IIS 总线音频接口
• 串行,每通道 8/16/24 位数据传输
• 支持主/从模式
• 支持 IIS、MSB 对齐和 LSB 对齐数据格式

28.3 方块图

28.4 功能描述

IIS 接口包括寄存器组、FIFO、移位寄存器、时钟控制、DMA 有限状态机和通道控制模块,如上图所示。请注意,每个 FIFO 的宽度为 32 位,深度为 64,包含左/右通道数据。因此,FIFO 访问和数据传输以左/右对为单位进行处理。上图显示了 IIS 接口的功能块图。

28.4.1 主/从模式

要选择主模式或从模式,需设置 IISMOD 寄存器的 MSS 位。在主模式中,I2SSCLK 和 I2SLRCLK 在内部生成并提供给外部设备。因此,需要一个根时钟来生成 I2SSCLK 和 I2SLRCLK。在外部主模式中,根时钟可以直接从 IIS 外部输入。在从模式中,I2SSCLK 和 I2SLRCLK 由引脚(GPIOs)供应。即,无论源时钟是什么,只有主机能生成 I2SLRCLK 和 I2SSCLK。

主/从模式与 TX/RX 不同。主/从模式表示 I2SLRCLK 和 I2SSCLK 的方向。I2SCDCLK 的方向(这只是辅助的)不重要。如果 IIS 总线接口向 IIS 编解码器传输时钟信号,则 IIS 总线为主模式。但如果 IIS 总线接口从 IIS 编解码器接收时钟信号,则 IIS 总线为从模式。TX/RX 模式指示数据流的方向。如果 IIS 总线接口向 IIS 编解码器传输数据,这表示 Tx 模式。相反,如果 IIS 总线接口从 IIS 编解码器接收数据,这表示 Rx 模式。

下图显示了在 IIS 时钟控制块和系统控制器中设置内部主模式或外部主模式时根时钟的路径。请注意,RCLK 表示根时钟,这个时钟可以在内部主模式下供应给外部 IIS 编解码芯片。

28.4.2 DMA 传输

在 DMA 传输模式中,使用外部 DMA 控制器访问发送器或接收器 FIFO。发送器或接收器 FIFO 状态内部激活 DMA 服务请求。I2SCON 寄存器的 FTXEMPT、FRXEMPT、FTXFULL 和 FRXFULL 位表示发送器或接收器 FIFO 数据状态。特别是,FTXEMPT 和 FRXFULL 位是 DMA 服务请求的就绪标志;当 TXFIFO 非空时激活发送 DMA 服务请求,当 RXFIFO 未满时激活接收 DMA 服务请求。

DMA 传输仅使用握手方法进行单个数据的传输。请注意,在 DMA 确认激活期间,应执行数据读取或写入操作。

注意:参考:DMA 请求点 Tx 模式:(FIFO 未满)&(TXDMACTIVE 激活) Rx 模式:(FIFO 非空)&(RXDMACTIVE 激活)

28.4.3 音频串行数据格式

28.4.3.1 IIS 总线格式

IIS 总线包括四条线路:串行数据输入 I2SSDI、串行数据输出 I2SSDO、左/右通道选择时钟 I2SLRCLK 和串行位时钟 I2SSCLK;主机生成 I2SLRCLK 和 I2SSCLK。

串行数据以 2 的补码形式传输,最高有效位(MSB)首先发送,位置固定,而最低有效位(LSB)的位置取决于字长。发送器在 I2SLRCLK 变化后的一个时钟周期发送下一个字的 MSB。发送器发送的串行数据可以与时钟信号的后沿或前沿同步。然而,串行数据必须在串行时钟信号的前沿锁存到接收器中,并且在传输同步数据时存在一些限制。 左右通道选择线指示正在传输的通道。I2SLRCLK 可以在串行时钟的后沿或前沿改变,但不需要对称。在从设备中,该信号在时钟信号的前沿锁存。I2SLRCLK 线在传输 MSB 前一个时钟周期改变。这允许从设备发送器派生串行数据的同步时序,为传输设置数据。此外,它使接收器能够存储前一个字并清除下一个字的输入。

28.4.3.2 MSB(左对齐)

MSB 对齐(左对齐)格式与 I2S 总线格式类似,不同之处在于 MSB 对齐格式中,发送器总是在 I2SLRCLK 变化时同时发送下一个字的 MSB。

28.4.3.3 LSB(右对齐)

LSB 对齐(右对齐)格式与 MSB 对齐格式相反。换句话说,传输的串行数据与 I2SLRCLK 转换的结束点对齐。

下图显示了 IIS、MSB 对齐和 LSB 对齐的音频串行格式。请注意,在此图中,字长为 16 位,I2SLRCLK 每 24 个 I2SSCLK 周期(BFS 为 48 fs,fs 为采样频率;I2SLRCLK 频率)转换一次。

28.4.3.4 采样频率和主时钟

当 IIS 接口控制器作为主控时,IIS 接口控制器生成的 IISLRCLK 和 IISSCLK 是由根时钟通过 RFS 和 BFS 值分频得到的。为了确定采样频率 - IISLRCLK - 首先选择 BLC、BFS 和 RFS。如果根时钟的来源不是 IISEXTCDCLK,IIS 接口控制器可选择性地输出根时钟作为编解码器的主时钟(IISCDCLK)。

在从模式中,必须将 BLC、BFS 和 RFS 的值设置为与主机(例如:编解码器)相似,因为 IIS 接口控制器需要这些值以正确操作。

28.4.4 PCM 字长和 BFS 驱动

在设置 BFS 值之前应先设置 PCM 字长(BLC)。下表显示了可用的 BFS 值与 BLC 的对应关系。

PCM Bit length (BLC)

8-bit

16-bit

24-bit

Available BFS value

16 fs, 24 fs, 32 fs, 48 fs

32 fs, 48 fs

48 fs

28.4.5 DFS 分频器和 RFS 分频器

在设置 BFS 值之前应先设置 PCM 字长(BLC)。下表显示了基于 BLC 的可用 BFS 值。

BFS Divider

16 fs, 32 fs

24 fs, 48 fs

Available RFS value

256 fs, 384 fs, 512 fs, 768 fs

384 fs, 768 fs

28.4.6 RFS 分频器和根时钟

根时钟是为了采样频率适当的 RFS 值而制作的,如下表所示。RCLK 是通过 IIS 预分频器(IISPSR)分频得到的时钟,由 MSS 选择设置。

28.5 编程指南

IIS 总线接口可以通过处理器使用编程 I/O 指令或通过 DMA 控制器访问。

28.5.1 初始化

  1. 在使用 IIS 总线接口之前,必须将 GPIO 配置为 IIS 模式,即 I2SSDI 为输入,I2SSDO 为输出。I2SLRCLK、I2SSCLK 和 I2SCDCLK 为输入/输出类型。

  2. 选择时钟源。S5PC210 有三个时钟源,即 PCLK、PLL 和外部编解码器。更多信息请参见图(IIS 时钟控制块图)。

28.5.2 播放模式(TX 模式)与 DMA

  1. 在操作前,TXFIFO 需要被清空。如果你不能区分主/从模式和 TX/RX 模式,你必须学习主/从模式和 TX/RX 模式。参考主/从模式章节。

  2. 配置 I2SMOD 寄存器和 I2SPSR(IIS 预分频器寄存器)。

  3. 为了系统稳定运行,在传输前内部 TXFIFO 应接近满。要让 TXFIFO 接近满,开始 DMA 操作。

  4. IIS 总线不支持中断。因此,你只能通过访问 SFR 来通过轮询检查状态。

  5. 在 TXFIFO 满后,必须断言 I2SACTIVE。

28.5.3 录音模式(Rx 模式)与 DMA

  1. 在操作前,RXFIFO 需要被清空。同样,如果你不能区分主/从模式和 TX/RX 模式,你必须学习主/从模式和 TX/RX 模式。参考主/从模式章节。

  2. 配置 I2SMOD 寄存器和 I2SPSR(IIS 预分频器寄存器)。

  3. 为了系统稳定运行,在 DMA 操作前内部 RXFIFO 应至少有一个数据。你必须在 DMA 操作前断言 I2SACTIVE。

  4. 通过访问 SFR 来通过轮询检查 RXFIFO 状态。

  5. 如果 RXFIFO 不为空,启动 RXDMACTIVE。

28.5.4 示例代码

28.5.4.1 Tx 通道

I2S Tx 通道提供一个单声道兼容输出。传输通道可以在主模式或从模式下操作。数据通过 APB 访问或 DMA 访问在处理器和 I2S 控制器之间传输。

处理器必须以两个字(即左右音频样本)的倍数写入字。这些字将根据音频串行 BITCLK、SCLK 和字选择时钟 LRCLK 的时间顺序移出。 Tx 通道有一个 64×32 位宽的 FIFO,处理器或 DMA 在使能传输通道后可以写入多达 16 个左/右数据样本。

一个示例序列如下:

确保 PCLK 和 CDCLK 正确地送达 I2S 控制器,并使用 TFLUSH 位清除 TX FIFO。请确保 I2S 控制器配置在以下模式之一: • 仅 Tx 模式 • TX/RX 同时模式。

数据在 Tx FIFO 中对齐,每通道 8 位或 16 位 BLC,如下图所示。

一旦数据被写入 Tx FIFO,就可以通过在 I2SCON 寄存器(I2S 控制寄存器)中启用 I2SACTIVE 位来激活 Tx 通道。

然后,数据将根据串行位时钟 SCLK 和字选择时钟 LRCLK 串行移出。

I2SCON 寄存器(I2S 控制寄存器)中的 TXCHPAUSE 可以停止在 I2SSDO 上的串行数据传输。一旦传输完当前的左/右通道,传输就会停止。

如果需要重新编程 I2SCON 寄存器(I2S 控制寄存器)和 I2SMOD 寄存器(I2S 模式寄存器)中的控制寄存器,建议禁用 Tx 通道。

如果在 FIFO 为空的情况下启用 Tx 通道,将不会从 FIFO 读取任何样本。

可以通过检查 I2SFIC 寄存器(I2S FIFO 控制寄存器)中的位来检查 Tx FIFO 的状态。

28.5.4.2 Rx 通道

I2S Rx 通道提供单声道兼容输出。接收通道可以在主模式或从模式下操作。数据从输入线接收并转移到 Rx FIFO 中。然后处理器可以通过 APB 读取或 DMA 访问来读取这些数据。

Rx 通道有一个 64×32 位宽的 Rx FIFO,处理器或 DMA 在使能接收通道后可以读取最多 16 个左/右数据样本。

一个示例序列如下:

确保 PCLK 和 CDCLK 正确地送达 I2S 控制器,并使用 I2SFIC 寄存器(I2S FIFO 控制寄存器)中的 RFLUSH 位清除 Rx FIFO,并且 I2S 控制器配置在任一模式:

  • 仅接收。
  • 接收/传输同时模式。

这可以通过在 I2SMOD 寄存器(I2S 模式寄存器)中编程 TXR 位来完成。

  1. 然后根据需要编程以下参数:

    • MSS
    • SDF
    • BFS
    • BLC
    • LRP 为了编程,请参考 I2SMOD 寄存器(I2S 模式寄存器)。
  2. 一旦确保 I2S 控制器的输入时钟已启动并运行且步骤 1 和 2 已完成,用户必须将 I2SACTIVE 置高以启用任何数据接收,I2S 控制器在 LRCLK 变化时接收数据。

在查看 I2SFIC 寄存器(I2S FIFO 控制寄存器)中的 Rx FIFO 计数后,使用 I2SRXD 寄存器(I2S Rx FIFO 寄存器)读取 Rx FIFO 中的数据。计数只有在完整的左右通道接收后才会增加。

在 I2SCON 寄存器中的 RXCHPAUSE 可以停止在 I2SSDI 上的串行数据接收。接收将在当前的左/右通道被接收后停止。

如果需要重新编程 I2SCON 寄存器(I2S 控制寄存器)和 I2SMOD 寄存器(I2S 模式寄存器)中的控制寄存器,则建议禁用 Rx 通道。

通过检查 I2SFIC 寄存器(I2S FIFO 控制寄存器)中的位来检查 Rx FIFO 的状态。这些状态位可以提供有关 FIFO 是否已满、空或接近这些条件的信息,从而帮助确保数据流的有效管理。

29 AC97

29.1 概述

S5P6818 中的 AC97 控制器单元支持 AC97 修订版 2.0 的功能。AC97 控制器使用音频控制器链接(AC-link)与 AC97 编解码器进行通信。控制器将立体声 PCM 数据发送到编解码器。编解码器中的外部数字至模拟转换器(DAC)将音频样本转换为模拟音频波形。控制器接收来自编解码器的立体声 PCM 数据和单声道 MIC 数据,然后将其存储在内存中。本节描述了 AC97 控制器单元的编程模型。本节的先决条件要求了解 AC97 修订版 2.0 规范。

29.2 功能

AC97 控制器包括以下功能:

  • 独立通道用于立体声 PCM 输入、立体声 PCM 输出、单声道 MIC 输入。
  • 基于 DMA 的操作和基于中断的操作。
  • 所有通道仅支持 16 位样本。
  • 变化采样率的 AC97 编解码器接口(48 kHz 及以下)
  • 每个通道 16 位,16 项 FIFO
  • 仅支持主编解码器

29.3 方块图

29.4 功能描述

本节解释 AC97 控制器的操作,即 AC-Link、关机序列和唤醒序列。

29.4.1 内部数据路径

下图显示了 S5P6818 AC97 控制器的内部数据路径。它包括立体声脉冲编码调制(PCM)输入、立体声 PCM 输出和单声道 MIC 输入缓冲区,这些缓冲区由 16 位和 16 项缓冲区组成。它还通过 AC-Link 拥有 20 位 I/O 移位寄存器。

29.4.2 操作流程图

当你初始化 AC97 控制器时,必须断言系统重置或冷重置,因为外部 AC97 音频编解码器的前一个状态是未知的。这确保 GPIO 已经准备好。然后你可以启用编解码器就绪中断。你可以通过轮询或中断检查编解码器就绪中断。当中断发生时,你必须撤销编解码器就绪中断。使用 DMA 或 PIO(直接将数据写入寄存器)将数据从内存传输到寄存器,或从寄存器传输到内存。如果内部 FIFO(Tx FIFO 或 Rx FIFO)不为空,则让数据被传输。

29.4.3 AC-link 数字接口协议

每个 AC97 编解码器都包含一个五针数字串行接口,将其与 S5P6818 AC97 控制器链接。AC-link 是一个全双工、固定时钟和 PCM 数字流。它采用时分复用(TDM)方案来处理控制寄存器访问以及多个输入和输出音频流。AC-link 架构将每个音频帧分为 12 个传出和 12 个传入数据流。每个流具有 20 位样本分辨率,并且要求具有至少 16 位分辨率的 DAC 和模数转换器(ADC)。

29.4.3.1 AC-Link 输出帧(SDATA_OUT)

插槽 0:标签阶段 在插槽 0 中,第一个比特是一个位(SDATA_OUT,bit[15]),它表示整个帧的有效性。如果 bit[15] 为 1,当前帧至少包含一个有效的时间插槽。接下来的 12 位位置对应于每个 12 个时间插槽包含有效数据。插槽 0 的位 0 和 1 用作 CODEC IO 位,用于对 CODEC 寄存器进行 I/O 读写,如下一节所述。通过这种方式,可以在 AC-link 的固定 48 kHz 音频帧率下传输具有不同采样率的数据流。

插槽 1:命令地址端口

在插槽 1 中,它向 AC97 控制器传达控制寄存器地址和读/写命令信息。当软件访问主 CODEC 时,硬件配置帧如下:

  • 在插槽 0 中,为插槽 1 和 2 设置有效位。
  • 在插槽 1 中,bit[19] 设置(读取)或清除(写入)。位 18-12(插槽 1)被配置为指定 CODEC 寄存器的索引。其余位填充为 0(保留)。
  • 在插槽 2 中,配置为写入的数据,因为是输出帧。

插槽 2:命令数据端口

在插槽 2 中,这是具有 16 位分辨率的写入数据([19:4] 是有效数据)

插槽 3:PCM 播放左声道

插槽 3 是音频输出帧,是复合数字音频左声道流。如果样本的分辨率小于 16 位,AC97 控制器会将插槽中所有尾随的非有效位位置填充为零。

插槽 4:PCM 播放右声道

插槽 4 是音频输出帧,是复合数字音频右声道流。如果样本的分辨率小于 16 位,AC97 控制器会将插槽中所有尾随的非有效位位置填充为零。

29.4.3.2 AC-Link 输入帧(SDATA_IN)

每个 AC97 编解码器都包含一个五针数字串行接口,将其与 S5P6818 AC97 控制器连接。AC-link 是全双工、固定时钟和 PCM 数字流。

插槽 0:标签阶段

在插槽 0 中,第一个比特(SDATA_OUT,bit[15])指示 AC97 控制器是否处于 CODEC 就绪状态。如果 CODEC 就绪位为 0,表示 AC97 控制器尚未准备好进行正常操作。在复位后断电并且 AC97 控制器电压参考值正在稳定时,这种情况是正常的。

插槽 1:状态地址端口/SLOTREQ 位

状态端口监控 AC97 控制器功能的状态。它不仅限于混音器设置和电源管理。音频输入帧插槽 1s 流回显控制寄存器索引,以便在插槽 2 中返回数据,如果控制器在插槽 0 中将插槽 1 和 2 标记为有效。控制器仅在伴随的状态地址与最近一次读取命令期间发出的最后一个有效命令地址匹配时接受状态数据。对于多采样率输出,CODEC 检查其采样率控制寄存器、其 FIFO 状态以及每个音频输出帧开始时的传入 SDATA_OUT 标签位,以确定要设置为活动状态(低)的 SLOTREQ 位。在当前音频输入帧中断言的 SLOTREQ 位表明在下一个音频输出帧中哪些输出插槽需要来自控制器的数据。对于固定的 48 kHz 操作,SLOTREQ 位被设置为活动状态(低),并且每帧传输一个样本。对于多采样率输入,“标签”位用于指示每个输入插槽中是否存在有效数据。

插槽 2:状态数据端口

在插槽 2 中,这是具有 16 位分辨率的状态数据([19:4] 是有效数据)。

插槽 3:PCM 录音左声道

插槽 3 是音频输入帧,是 AC97 编解码器的左声道音频输出。如果样本的分辨率小于 16 位,AC97 编解码器会将插槽中所有尾随的非有效位位置填充为零。

插槽 4:PCM 录音右声道

插槽 4 是音频输入帧,是 AC97 编解码器的右声道音频输出。如果样本的分辨率小于 16 位,AC97 编解码器会将插槽中所有尾随的非有效位位置填充为零。

插槽 6:麦克风录音数据

AC97 控制器支持 MIC-in 通道的 16 位分辨率。

29.4.4 AC97 关机

29.4.4.1 关闭 AC-link

当 AC97 编解码器的电源关闭寄存器(0x26)的 PR4 位设置为 1(通过写入 0x1000)时,AC-link 信号进入低功耗模式。然后,主编解码器将 BITCLK 和 SDATA_IN 驱动到逻辑低电平。该序列遵循如上图所示的时序图。

AC97 控制器通过 AC-link 向电源关闭寄存器(0x26)发送写操作。设置 AC97 控制器在写入电源关闭寄存器的 PR4 位(数据 0x1000)时不向插槽 3-12 传输数据,并且在接收到关闭电源请求时不要求编解码器处理其他数据。当编解码器处理该请求时,它会立即将 BITCLK 和 SDATA_IN 转换到逻辑低电平。在编程 AC_GLBCTRL 寄存器后,AC97 控制器驱动 SYNC 和 SDATA_OUT 到逻辑低电平。

29.4.4.2 唤醒 AC-Link - 由 AC97 控制器触发的唤醒

AC-link 协议提供冷 AC97 复位和热 AC97 复位。当前的关机状态最终决定使用哪种 AC97 复位。除非执行冷 AC97 复位,否则所有关机模式中的寄存器必须保持相同状态。在冷 AC97 复位中,AC97 寄存器被初始化为其默认值。关机后,AC-link 必须在发生关机的帧后至少等待四个音频帧时间,然后才能通过重新断言 SYNC 信号来重新激活。当 AC-link 上电时,编解码器就绪位(输入插槽 0,bit[15])指示 AC-link 已准备好进行操作。

29.4.4.3 冷 AC97 复位

当通过 AC_GLBCTRL 断言 nRESET 引脚时,将生成冷复位。断言和去断言 nRESET 激活 BITCLK 和 SDATA_OUT。冷复位初始化所有 AC97 控制寄存器。nRESET 是一个异步 AC97 输入。

29.4.4.4 热 AC97 复位

热 AC97 复位重新激活 AC-link,而不改变当前 AC97 寄存器值。当 BITCLK 不存在且 SYNC 被驱动高时,将生成热复位。在正常的音频帧中,SYNC 是一个同步 AC97 输入。当 BITCLK 不存在时,SYNC 被视为一个用于生成对 AC97 的热复位的异步输入。AC97 控制器必须在再次采样到 SYNC 低之前不激活 BITCLK。这可以防止错误地检测到新的音频帧。

29.4.4.5 AC97 状态图

AC97 状态图是一个用于描述 AC97 控制器如何响应不同信号和事件以管理其操作状态的图表。下面是一个概括性的描述,以便更好地理解 AC97 控制器如何在不同模式和状态之间过渡:

  1. 初始化状态

    • 控制器在系统上电或复位后进入此状态。
    • 执行所有必要的初始化配置,包括设置寄存器默认值。
  2. 空闲状态

    • 初始化后,控制器进入空闲状态。
    • 在此状态下,控制器等待进一步的命令或信号来开始数据传输。
  3. 数据传输状态

    • 当控制器接收到启动传输的命令(如 DMA 请求或处理器直接 I/O 写入)时,进入此状态。
    • 控制器在 AC-link 上发送或接收音频数据。
  4. 关机状态

    • 当设置电源关闭寄存器时,控制器进入关机状态。
    • 在此状态下,所有活动都被暂停,控制器进入低功耗模式。
  5. 唤醒状态

    • 从关机状态通过特定的信号或中断唤醒控制器。
    • 控制器重新初始化并准备恢复正常操作。
  6. 复位状态

    • 冷复位或热复位信号触发时,控制器进入复位状态。
    • 冷复位会重置所有寄存器到默认状态,而热复位则保持当前寄存器值不变,但重新激活连接。

在设计和实施系统时,理解这些状态及其之间的转换非常关键,可以帮助确保 AC97 控制器以及整个音频系统的有效和稳定运行。这种状态管理机制也有助于最大限度地减少功耗并提高系统的响应性和可靠性。

30 SPDIF TX

30.1 概述

SPDIF 发射器基于 IEC60958 标准。本节描述了一个串行的、单向的、自时钟的接口,用于连接消费者和专业应用中的数字音频设备。

在使用 SPDIF 标准的消费者数字处理环境时,SPDIF 接口主要用于传输立体声节目,每个样本的分辨率最高为 20 位,可以扩展到每个样本 24 位。

在广播工作室环境中使用 SPDIF 时,接口主要用于传输单声道或立体声节目,采样频率为 48 kHz,分辨率最高为每个样本 24 位;它可以传输一个或两个以 32 kHz 采样的信号。

在这两种情况下,时钟参考和辅助信息都与节目一起传输。IEC60958 使接口能够携带与软件相关的数据。

SPDIF-TX 的特点包括:

  • S5P6818 的 SPDIFOUT 模块仅支持消费者应用
  • 支持高达每个样本 24 位的线性 PCM
  • 支持非线性 PCM 格式,如 AC3、MPEG1 和 MPEG2
  • 2×24 位缓冲区,交替填充数据

30.3 方块图

下图展示了 SPDIFOUT 的方块图。

30.4 功能描述 本节包括:

  • SPDIF 的数据格式
  • 通道编码
  • 前导码
  • 非线性 PCM 编码源(IEC 61937)
  • SPDIF 操作
  • 阴影寄存器

30.4.1 数据格式的 SPDIF

本节包括:

  • 帧格式
  • 子帧格式(IEC 60958)

30.4.2 帧格式

一个帧由两个子帧唯一组成。帧的传输速率完全对应于源采样频率。

在两通道操作模式下,时间复用传输从两个通道连续采集的样本。

与通道 1 相关的子帧(在立体声操作中为左或“A”通道,在单声道操作中为主通道)通常使用前导码 M。然而,在每 192 帧后,前导码将改变为前导码 B。这个单元由 192 帧组成,定义了用于组织通道状态信息的块结构。通道 2 的子帧(在立体声操作中为右或“B”通道,在单声道操作中为次级通道)始终使用前导码 W。

在广播工作室环境中的单通道操作模式下,帧格式与两通道模式相同。数据仅在通道 1 中携带。在分配给通道 2 的子帧中,时间槽 28(有效性标志)应设置为逻辑“1”(“1”表示无效)。

下图说明了 SPDIF 帧的格式。

30.4.3 子帧格式(IEC 60958)

每个子帧被划分为 32 个时间槽,编号从 0 到 31。时间槽 0 到 3 携带三种允许的前导码之一。这些用于影响子帧、帧和块的同步。时间槽 4 到 27 携带线性 2 的补码表示的音频样本字。时间槽 27 携带最高有效位。当使用 24 位编码范围时,最低有效位位于时间槽 4。

当 20 位编码范围足够时,最低有效位位于时间槽 8。时间槽 4 到 7 可用于其他应用。在这种情况下,时间槽 4 到 7 中的位被指定为辅助样本位。

如果源提供的位数少于接口允许的位数(20 或 24 位),未使用的最低有效位应设置为逻辑“0”。这种做法支持 SPDIF 连接使用不同位数的设备。

时间槽 28 携带与音频样本字相关的有效性标志。当音频样本可靠时,此标志设置为逻辑“0”。时间槽 29 携带与在同一子帧中传输的音频通道相关的 1 位用户数据。用户位的默认值为逻辑“0”。

时间槽 30 携带与在同一子帧中传输的音频通道相关的 1 位通道状态字。时间槽 31 携带一个奇偶校验位,使得包括 4 到 31 的时间槽携带偶数个一和零。

下图展示了 SPDIF 子帧的格式。

30.5 通道编码

时间槽 4 到 31 使用双相标记编码,以:

  • 最小化传输线上的直流成分
  • 从数据流中恢复时钟
  • 使接口对连接的极性不敏感

一个符号包含两个连续的二进制状态,代表要传输的每个比特:

  • 符号的第一个状态总是与前一个符号的第二个状态不同。
  • 当要传输的比特是逻辑“0”时,符号的第二个状态与第一个状态相同;当比特是逻辑“1”时,第二个状态与第一个状态不同。

下图展示了通道编码。

30.6 前导码

前导码是提供子帧和块的同步及识别的特定模式。使用一组三种前导码(M、B 和 W)。这些前导码在分配给四个时间槽(时间槽 0 到 3)的时间中传输,并由八个连续状态表示。前导码的第一个状态总是与前一个符号的第二个状态不同。

与双相码类似,这些前导码没有直流成分并提供时钟恢复。它们与任何有效的双相序列至少有两个状态的差异。

30.7 非线性 PCM 编码源(IEC 61937)

通过使用 IEC 60958 子帧的基本 16 位数据区域(即时间槽 12 到 27)传输非线性 PCM 编码的音频比特流。每个 IEC 60958 帧可以在消费者应用模式下传输 32 位的非 PCM 数据。

当 SPDIF 比特流传输线性 PCM 音频时,符号频率是 PCM 采样频率的 64 倍(每两个 PCM 样本时间的通道有 32 个时间槽)。当非线性 PCM 编码的音频比特流通过接口传输时,符号频率应为该比特流中编码音频的采样率的 64 倍。如果接口传输的非线性 PCM 编码的音频比特流包含低采样频率的音频,则符号频率应为该比特流中编码音频的采样率的 128 倍。

每个数据突发包含由四个 16 位字(Pa、Pb、Pc 和 Pd)组成的突发前导码,后跟包含编码音频帧数据的突发有效载荷。

突发前导码包含四个强制字段:

  • Pa 和 Pb 代表同步字。
  • Pc 提供有关数据类型的信息以及一些接收器的信息/控制。
  • Pd 提供突发有效载荷的长度,限制为 216(= 65,535)位。

四个前导字包含在两个连续的 SPDIF 帧中。开始数据突发的帧在子帧 1 中包含前导字 Pa,在子帧 2 中包含 Pb。下一个帧在子帧 1 中包含 Pc,在子帧 2 中包含 Pd。当放入 SPDIF 子帧时,16 位突发前导的 MSB 放在时间槽 27 中,LSB 放在时间槽 12 中。

下图展示了突发有效载荷的格式。

下面是 SPDIF 中使用的突发前导码字的列表:

Preamble Word

Length of Field

Contents

Value MSB LSB

Pa

16 bits

Sync word 1

0xF872

Pb

16 bits

Sync word 2

0x4E1F

Pc

16 bits

Burst-info

Refer to SPDBSTAS_SHD[15:0] for more information.

Pd

16 bits

Length-code

Refer to SPDBSTAS_SHD[31:16] for more information.

30.8 SPDIF 操作

SPDIF 的比特频率为 128fs(fs:采样频率)。因此,根据 MCLK 的频率来分频音频主时钟(MCLK),以生成 SPDIF 的主时钟。你可以按以下方式分频 MCLK:

  • 在 256 fs 的情况下除以 2
  • 在 384 fs 的情况下除以 3
  • 在 512 fs 的情况下除以 4

S5P6818 中的 SPDIF 模块将音频样本数据格式转换为 SPDIF。为了改变格式,SPDIF 模块将这些插入到适当的时间槽中:

  • 前导码数据
  • 通道状态数据
  • 用户数据
  • 错误检查位
  • 奇偶校验位

前导码数据在模块中固定,并根据子帧计数器插入。通道状态数据在 SPDCSTAS 寄存器中设置,并每帧使用 1 位。用户数据始终为零值。

对于非线性 PCM 数据,在突发有效载荷前插入由 Pa、Pb、Pc 和 Pd 组成的突发前导码,并且从突发有效载荷的末端填充零到重复计数。Pa(= 16'hF872)和 Pb(= 16'h4E1F)在模块中固定,Pc 和 Pd 在 SPDBSTAS 寄存器中设置。为了填充零,从 Pd 值和取决于前导码 Pc 中数据类型的重复计数计算突发有效载荷的末端。

音频数据向最低有效位对齐。支持 16、20 或 24 位 PCM 数据和 16 位流数据。32 位字中未占用的高位被忽略。 数据通过 DMA 请求获取。当两个数据缓冲区中的一个为空时,会请求 DMA 服务。存储在数据缓冲区中的音频数据被转换为 SPDIF 格式并输出到端口。对于非线性 PCM 数据,在音频数据按 SPDCNT 寄存器指定的值输出后,将生成中断。当新比特流的数据类型与前一个不同时,中断会设置 SPDBSTAS 和 SPDCNT 等寄存器的新值。

30.9 阴影寄存器

SPDBSTAS_SHD 和 SPDCNT_SHD 寄存器是与 SPDBSTAS 和 SPDCNT 寄存器相关的阴影寄存器。它们在每个流结束中断信号时从相关寄存器更新。阴影寄存器的使用如下。

  1. 将突发状态和重复计数信息设置到各自的寄存器中。
  2. 打开 SPDIF 模块,流结束中断立即被断言。
  3. 随着流结束中断,阴影寄存器从相关寄存器更新,SPDIF 开始传输数据。
  4. 可以将下一个流信息(突发状态和重复计数)写入 SPDBSTAS 和 SPDCNT 寄存器,因为先前的信息已被复制到各自的阴影寄存器中。
  5. 将下一个流信息设置到 SPDBSTAS 和 SPDCNT 寄存器中。
  6. 等待表示第一流结束的流结束中断。
  7. 随着流结束中断,第二个流数据将开始传输。
  8. 将第三个流信息设置到寄存器中。

用户位寄存器的使用类似于流信息寄存器。然而,这些寄存器与 SPDIF 结束中断无关,而是与用户数据中断有关。一旦 SPDIF 打开,阴影用户位寄存器就会从相关寄存器更新,并且在断言用户数据中断时开始输出用户位。用户可以在此中断期间将下一个用户数据写入寄存器。在完全输出 96 个用户位后,用户数据中断将再次被断言,并且可以在第二个用户位输出时将第三个用户数据写入寄存器。

31 SPDIF RX

31.1 概述

SPDIF 标准定义了一个串行接口,用于在各种音频设备之间传输数字音频数据,如 DVD/HD-DVD 播放器、AV 接收器和放大器。当音频通过模拟链接从 DVD 播放器传输到音频放大器时,会引入噪声。过滤这种噪声是一项困难的任务。当音频数据通过数字链接而不是模拟链接传输时,可以克服这个问题。数据可以在设备之间传输,而无需将其转换为模拟信号。这是 SPDIF 的最大优势。

31.2 功能

SPDIF-RX 的特点包括:

  • 串行、单向、自时钟接口
  • 单线-单信号接口
  • 由于与极性无关,因此易于使用

31.3 方块图

31.4 功能描述

SPDIF 是单线串行接口,时钟嵌入在数据中。传输的数据使用双相标记编码。在接收器处恢复时钟和帧同步,以及双相解码的数据流。数据流中的每个数据位都有一个时间槽。时间槽以一个过渡开始,并以一个过渡结束。如果传输的数据位是“1”,则在时间槽的中间额外进行一个过渡。数据位“0”没有额外的过渡。过渡之间的最短间隔称为单位间隔(UI)。

数据的最低有效位首先被驱动。每个帧包含 64 个时间槽,由两个子帧组成,每个子帧有 32 个时间槽(如下图所示)。子帧以前导码开始,接着是 24 位数据,最后以 4 位结束,这 4 位携带如用户数据和通道状态等信息。子帧的前四个时间槽,称为前导码,用于指示子帧和块的开始。

有三种前导码,每种前导码都通过包含持续时间为 3 个单位间隔(UI)的一个或两个脉冲来打破双相编码规则。这意味着这种模式在数据流中的其他任何地方都不会出现。每个子帧以一个 4 位的前导码开始。块的开始由前导码“Z”和子帧通道“A”的开始表示。前导码“X”表示通道“A”的子帧开始,但不在块的开始处,而前导码“Y”表示通道“B”的子帧开始。

32 PDM

32.1 概述

脉冲密度调制(以下简称 PDM)是一种用来用数字数据表示模拟信号的调制形式。在 PDM 信号中,特定的幅度值不像在 PCM 中那样被编码成不同大小的脉冲。相反,它是脉冲的相对密度对应于模拟信号的幅度。1位 DAC 的输出与信号的 PDM 编码相同。S5P6818 中的 PDM 是一个模块,它从外部数字麦克风(具有 1 位 I/O)接收 PDM 信号,并解调 1 位数字信号,恢复原始幅度。PDM 支持 DMA 接口。

32.2 功能

  • 支持接收带有 1 个数据引脚的 2 通道音频数据
  • 1 个输出时钟引脚
  • 2 个数据引脚(总共可接受 4 个通道)
  • 固定输出时钟频率
  • 支持选择数据/捕获的时序
  • 支持 DMA 接口
  • 支持用户配置系数(巴特沃斯低通滤波器)

32.3 方块图

32.4 PDM 应用说明

32.4.1 巴特沃斯滤波器配置

PDM 设有巴特沃斯滤波器系数的寄存器。用户可以调整滤波器系数,并使用自定义的滤波器处理 PDM 输入数据。

Register Name

Bit

Symbol

Value

PDM_GAIN0

[31:16]

GAIN x (4)

276 (0x0114)

[15:0]

GAIN x (2)

138 (0x008a)

PDM_GAIN1

[31:16]

GAIN x (–4)

–276 (0xfeec)

[15:0]

GAIN x (-2)

–138 (0xff76)

PDM_COEFF

[31:16]

CPU_COEFF1

16194

[15:0]

CPU_COEFF0

–8004

33 显示架构

33.1 概述

33.2 功能

  • 2 个多层控制器,2 个显示控制器
  • 1 个 HDMI,1 个 LVDS,1 个 MIPI DSI
  • 支持 TFT/MPU LCD 接口、HDMI(逐行/隔行)、LVDS、MIPI DSI、NTSC 输出格式
  • 支持同时通过不同的输出传输相同图像。

33.3 方块图

33.4 TFT/MPU 接口

以下是可以通过 LCD 接口输出的内容:

  1. 主 DPC(TFT 接口)

  2. 主 DPC(i80 MPU 接口)

  3. 次级 DPC(TFT 接口)

注意:次级 DPC 中没有 i80 MPU 接口 用户可以通过设置 TFT_MUXCTRL 寄存器来选择其中一个。

34 多层控制器(MLC)

34.1 概述

用户屏幕由复杂的组件组成——RGB 图像、动画等。这些单独的组件具有独特的格式,并存储在它们自己的内存空间中。S5P6818 的多层控制器(以下简称 MLC)从硬件角度读取和合成各种屏幕组件,以组织所需的屏幕,并将结果传输给显示控制器。

34.2 功能

  • 双寄存器集架构
  • 两个/一个 RGB 层和一个视频层 (主显示:2个 RGB 层,次级显示:1个 RGB 层)
  • RGB 层可以用作 3D 层。
  • 各种像素格式
    • RGB 层:RGB/BGR 332、444、555、565、888,带/不带 Alpha
    • 视频层:2D 分离的 YUV 4:4:4、4:2:2、4:2:0,线性 YUV 4:2:2(YUYV)
  • 层之间的各种混合效果
    • 每层或每像素 Alpha 混合,透明度,反色
  • 自由层位置和尺寸,以像素单位
  • 硬件剪裁
  • 垂直翻转
  • 视频层优先级
  • Gamma 校正
  • 可配置的突发长度(LOCKSIZE,RGB 层)
  • 放大/缩小(仅视频层)
    • 双线性插值,最近邻采样放大/缩小
  • 颜色控制(仅视频层)
    • 亮度,对比度,色调,饱和度

34.3 方块图

MLC 包含三个 RGB 层和一个视频层。在 MLC 中,可以根据每个层配置位置、像素格式和各种效果。视频层支持缩放功能,以在各种屏幕区域以特定大小显示视频图像,并提供各种颜色控制功能以提供最佳图像。

34.4 双寄存器集架构

S5P6818 的 MLC 具有双寄存器集架构,包括当前工作寄存器组和用户侧寄存器组。所有用户都可以通过用户侧寄存器组设置寄存器。如果在用户向用户侧寄存器组中的寄存器写入所需设置后,将脏标志设置为“1”,则 MLC 会在垂直同步发生时将用户侧寄存器组复制到当前工作寄存器组。然后,脏标志被清除为“0”,用户可以继续进行下一个设置。通过这种方式,所有寄存器中的更改都与垂直同步同步并应用,以便用户可以隐藏任何异常屏幕,即使用户在任何时点更改寄存器也是如此。

MLC 的顶层控制器和三个层都有独立的脏标志位。每个脏标志反映了与相应组相关的寄存器的更改。这样的设计确保了每个层的设置可以独立更新,而不会影响到其他层的操作,从而提高了系统的灵活性和响应性。

34.5 MLC 全局参数

本节描述了如何设置 MLC 的全局参数。

34.5.1 屏幕尺寸

屏幕尺寸功能使用户能够指定要显示的整个屏幕的宽度和高度。"整个屏幕宽度 - 1" 和 "整个高度 - 1" 的值分别设置在 SCREENWIDTH 和 SCREENHEIGHT 中。由于 SCREENWIDTH 和 SCREENHEIGHT 每个都有 12 位大小单位,最大可用分辨率为 2048×2048 像素。屏幕尺寸是通过设置帧单位的大小来确定的,无论显示是逐行扫描还是隔行扫描。

34.5.2 优先级

MLC 包括三个 RGB 层和一个视频层。在 RGB 层中,层 0 的优先级最高,层 1 的优先级最低。这些优先级无法更改,但可以通过用户自行决定的 PRIORITY 参数调整视频层的优先级。

34.5.3 场模式

S5P6818 的 MLC 支持隔行扫描显示以及逐行扫描显示。MLC 的所有寄存器都应按帧单位设置。对于逐行扫描显示,顶层控制器的 FIELDENB 位应设置为“0”。对于隔行扫描显示,顶层控制器的 FIELDENB 位应设置为“1”。例如,720×480 的逐行扫描显示和 720×480 的隔行扫描显示具有相同的设置,除了 FIELDENB 位的设置。

34.5.4 背景颜色

MLC 的每个层都可以放置在屏幕上的任何位置。因此,屏幕上实际可能存在没有包含在任何层中的区域。在此区域显示的默认颜色称为背景颜色,背景颜色设置为 BGCOLOR。如果所有层都被禁用,屏幕上只显示背景颜色。

BGCOLOR 的 bpp 为 24,格式如下:

Bit

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Backgroun d color

R 7

R 6

R 5

R 4

R 3

R 2

R 1

R 0

G 7

G 6

G 5

G 4

G 3

G 2

G 1

G 0

B 7

B 6

B 5

B 4

B 3

B 2

B 1

B 0

34.5.6 启用

每个层都有一个 LAYERENB 位来在特定时点启用/禁用 S5P6818 的每个层。如果 LAYERENB 位设置为“1”,则相关层变为开启状态。如果 LAYERENB 位设置为“0”,则相关层变为关闭状态,且其他层设置寄存器不被使用。由于 LAYERENB 位的设置由脏标志反映,即使用户在特定时点控制 LAYERENB 位,层的开/关也会根据 VSYNC 信号进行切换。

34.5.7 锁控制

每个 RGB 层可以调整每次内存读取请求时读取的数据大小,通过锁控制实现。LOCKSIZE 可以指定为 4、8 或 16,单位大小为 16 字节。因此,如果 LOCKSIZE 为 4,则每次读取的数据大小为 64 字节。对于 1280×1024 或更高分辨率,建议将 LOCKSIZE 设置为 16。

34.5.8 位置

位置功能使用户能够指定左上角(LEFT 和 TOP)和右下角(RIGHT 和 BOTTOM)的坐标。每个坐标可以在从 -2048 到 2047 的范围内任意定位,但只有位于从(0, 0)到(ScreenWidth - 1, ScreenHeight - 1)区域内的层才会在实际屏幕上显示。S5P6818 的 MLC 支持对屏幕区域外的任何区域进行硬件剪裁,因此用户不需要进行额外的剪裁处理。此外,MLC 不从内存中读取被剪裁区域以及被上层隐藏的区域的数据,以有效利用内存带宽。

RGB 层可以指定三个不使用特定颜色的不可见区域。指定的区域不从内存中读取。

34.5.9 像素格式

34.5.9.1 RGB 层格式

每个 RGB 层支持多种格式,这些格式在下图中列出。R:红色,G:绿色,B:蓝色,A:Alpha(透明度),X:未使用。

上述格式会被转换成 A8R8G8B8 格式,并在每个 RGB 层中进行管理。每个颜色组件被转换为 8 位大小。小于 8 位的颜色组件会从最高位反复扩展到 8 位大小。例如,5 位大小的颜色被转换为 {[4:0], [4:2]},3 位大小的颜色被转换为 {[2:0], [2:0], [2:1]}。每个层在内部将扩展的颜色组件与 TPCOLOR 或 INVCOLOR 进行比较。因此,用户应该在 TPCOLOR 和 INVCOLOR 中设置每种颜色格式在 R8G8B8 中扩展的颜色。

34.5.9.2 视频层格式

视频层管理 YUV 数据,并支持线性 YUV 格式和 2D 块寻址分离 YUV 格式。

FORMAT[1:0]

Pack Mode

Type

Y:UV

Addressing Mode

0

Separate Y/U/V

YUV

4:2:0

2D Block

1

Separate Y/U/V

YUV

4:2:2

2D Block

2

Non-separate

YUV

4:2:2

Linear

3

Separate Y/U/V

YUV

4:4:4

2D Block

4

Separate Y/UV

YUV

4:2:2

2D Block

5

Separate Y/UV

YUV

4:2:0

2D Block

S5P6818 的 MLC 在内部使用 A4R8G8B8 格式。因此,视频层也从内存中读取 YUV 数据,并在内部将其转换为 RGB 数据。视频层将 YUV 数据转换为 RGB 数据的公式如下:

• 线性 YUV 422 格式

视频层支持 YUYV 格式作为线性 YUV 格式,其 Y 数据(亮度数据)存在于每个像素中,但 Cb 和 Cr(色度)数据分别存在于两个像素中。因此,两个像素共享相同的 Cb/Cr 数据。因此,视频层每 32 位处理 2 个像素数据,并以 2 像素单位管理它们。

Pixel Format

FORMAT[2:0]

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

YUYV

2

Cr[7:0]

Y1[7:0]

Cb[7:0]

Y0[7:0]

• 2D 块寻址分离 Y/U/V 格式

在 2D 块寻址分离 Y/U/V 格式中,Y、U 和 V 每个都存在于单独的内存空间中。此外,根据 U 和 V 对 Y 的比例,该格式被分为 444、422 和 420。2D 块寻址分离 YUV 格式是 2D 块寻址格式,每个组件的大小为 64 × 32,并且在块单位中具有线性。这些特性提供了 S5P6818 独特的内存格式,以提高内存访问的效率,当 S5P6818 通过像 MPEG 文件这样的算法压缩/解压缩图像时,它以宏块单位管理数据。

根据每种格式,Y、U 和 V 分别对应于 2 × 2 像素,如下所示:

在内存中,Y、U 和 V 每个都存在于分开的内存空间中。

34.5.9.3 层混合

MLC 包括三个 RGB 层和一个视频层。每个 RGB 层支持透明度、颜色反转和 Alpha 混合功能,但视频层仅支持 Alpha 混合功能。颜色反转和 Alpha 混合功能仅在层之间应用,不适用于背景。

透明度功能使用户能够指定特定颜色并将该颜色处理为透明颜色。因此,填充透明颜色的区域将显示下层并显示该层的原始状态。像透明度功能一样,颜色反转功能也会透过下层显示该层,但该功能的不同之处在于它会反转并投射层的颜色。透明度和颜色反转功能对于实现光标层非常有用,如下图所示:

透明度和颜色反转效果是通过将 RGB 层的 TPENB 和 INVENB 位设置为“1”来应用的。TPCOLOR 和 INVCOLOR 都采用 R8G8B8 格式。

Bit

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

TPCOLOR/INVCOLOR

R7

R6

R5

R4

R3

R2

R1

R0

G7

G6

G5

G4

G3

G2

G1

G0

B7

B6

B5

B4

B3

B2

B1

B0

Alpha 混合功能使用户能够调整所需层的透明度。Alpha 级别通过 ALPHA[7:0] 调整,可在 0 到 255 范围内指定。如果 Alpha 级别为 255,则表示完全不透明。如果级别为 0,则表示完全透明。此外,每个 RGB 层可以使用包括 Alpha 的像素格式,并以每像素单位的 Alpha 应用。在按层 Alpha 或按像素 Alpha 格式中,Alpha 混合效果只能通过将 BLENDENB 位设置为“1”来应用。

同一时间只有一个层可以使用 alpha 混合功能,当一个层的 alpha 混合功能被启用时,其他层的 alpha 混合功能必须被禁用。

所有层在内部都使用 A8R8G8B8 格式,Alpha 混合的公式如下:

34.5.10 地址生成

34.5.10.1 RGB 层地址生成

地址生成功能使用户能够指定存储图像的内存地址和步长。

步长分为水平步长和垂直步长。步长是增加地址的单位。水平步长(HSTRIDE)是每当 x 坐标增加时要添加到地址的值,而垂直步长(VSTRIDE)是每当 y 坐标增加时要添加到地址的值。通常,水平步长是每像素的字节数,垂直步长是每像素的字节数乘以图像宽度的值。垂直步长采用 2 的补码格式。因此,通过将垂直步长指定为负数,可以实现垂直翻转功能。

图像地址(ADDRESS)通常指定图像左上角的地址。如果垂直翻转功能的垂直步长为负数,则 ADDRESS 应指定图像左下角的地址。

Vertical Flip

Vertical Stride

Base Address

Off

0

Address on the top left corner of the image

On

< 0

Address on the bottom left corner of the image

34.5.10.2 视频层地址生成

在视频层中,水平步长不单独指定,而是在内部固定。此外,垂直步长应始终为正数。由于垂直步长始终为正数,因此不支持垂直翻转功能。

  • 线性 YUV 422 格式(YUYV) 在线性 YUV 422 格式中,地址只能通过设置其基地址和垂直步长来指定。基地址(ADDRESS)指定 YUYV 图像缓冲区中的基地址,垂直步长(VSTRIDE)指定与 y 坐标增加成比例的地址增量。 垂直步长应为正数。

  • 2D 块寻址分离 YUV 格式 在分离格式中,每个 Y、U 和 V 存储在内存的不同地址中。因此,Y 组件的地址由 ADDRESS3 和 VSTRIDE3 寄存器指定,U(Cb)和 V(Cr)组件的地址分别由 ADDRESSCB 和 VSTRIDECB 寄存器以及 ADDRESSCR 和 VSTRIDECR 寄存器单独指定。由于 S5P6818 在 2D 块寻址格式中使用 4096 × 4096 像素大小的段,所以垂直步长应指定为 4096。此外, ADDRESS3/CB/CR 寄存器为段地址而不是常规线性地址设置单独的格式。段寻址格式列在下表中。

显示阵列区域在内存映射上应指定为设置地址 [31:29] 为 4'b0001。此外,内存控制器应被启用以使用显示阵列区域。

34.5.11 视频层特定参数

视频层另外提供缩放和颜色控制功能。

34.5.12 缩放功能

视频层的放大和缩小由 HSCALE 和 VSCALE 参数决定。每个参数都找到并设置输入图像尺寸与输出图像尺寸之间的比例。HSCALE 和 VSCALE 参数的设置公式如下:

视频层支持双线性滤波的缩放放大和缩小。也支持最近邻缩放。在缩放放大/缩小时,Y和C(Cb,Cr)组件的滤波启用信号分别分配(H/VFILTERENB,H/VFILTERENB_C)。

当使用双线性滤波的缩放放大和缩小时,H/VFILTERENB 和 H/VFILTERENB_C 应设置为“1”,以实现双线性滤波缩放。当使用最近邻缩放缩小时,H/VFILTERENB 和 H/VFILTERENB_C* 应设置为“0”。双线性滤波方法产生的图像差异如图所示。

34.5.12.1 颜色控制

视频层支持输出图像的颜色控制功能。用户可以调整亮度、对比度、色调和饱和度来补偿视频数据颜色。

34.5.12.2 亮度增强

视频层可以通过调整亮度和对比度来补偿亮度数据。

亮度有 256 个级别,通过 BRIGHTNESS 参数设置。BRIGHTNESS 参数采用 2 的补码值,可设置在 -128 级至 +127 级之间。图 34-11 显示了亮度变化对图像的影响。

对比度由 8 个级别组成,通过 CONTRAST 参数设置。视频层可以将对比度从 1.0 调整至 1.875,以 0.125 的增量进行调整,但不能降低原始图像的对比度。下表列出了对应于 CONTRAST 参数的对比度值。

CONTRAST

0

1

2

3

4

5

6

7

Contrast value

1.0

1.125

1.25

1.375

1.5

1.625

1.75

1.875

下图显示了对比度变化对图像的影响。这张图本来是为了更好地解释对比度功能以及显示对比度降低的效果而设计的。实际上,视频层可以增加对比度,但不能降低对比度。

34.5.12.3 色度增强

视频层可以通过调整色调和饱和度来补偿色度数据。色调的调整通过以下公式进行:

饱和度可以通过将增益值乘以上述结果值来调整。

视频层可以在每个象限中分别调整色调和饱和度,并且对于每个象限,分别有 HUECBnA/B 和 HUECRnA/B 参数。每个参数采用 [S.1.6] 格式,并按以下方式应用:

因此,每个参数都可以使用以下公式计算:

下图显示了色调和饱和度变化对图像的影响。

34.5.13 伽玛校正

MLC 为红色、绿色和蓝色各配备了三个伽玛表(256×10位)。Gamma[9:0] 由 Gamma[9:2] 组成,这些是整数(0至255),以及 Gamma[1:0],这些是小数(0.0, 0.5, 0.25, 0.75)。经过伽玛校正后的 R10, G10, B10 被转换成 R8, G8, B8,这些可以作为显示块的输入像素,并且在将 10位结果转换成 8位时可以应用抖动。

伽玛校正可以根据三种不同模式(整体层、RGB 层、视频层)选择任何伽玛区域,并且还可以将视频层和 RGB 层的 Alpha 混合区域指定为 RGB 层或视频层的区域。

伽玛校正时的寄存器集

34.6 时钟生成

MLC 通过使用 PCLK 和 BCLK 来操作。当 CPU 访问 MLC 的寄存器时使用 PCLK。当 MLC 访问内存时使用 BCLK。MLC 为 PCLK 和 BCLK 提供了多种操作模式。因此,用户可以根据其用途通过设置 PCLKMODE 和 BCLKMODE 参数来调整 MLC 的时钟。用户必须设置始终模式以使用 MLC(BCLK 和 PCLK 两者)。

PCLKMODE

Brief Description

0

Always disabled

1

Always enabled.

BLCKMODE

Brief Description

[1]

[0]

0

0

Always disabled.

0

1

1

0

1

1

Always enabled.

35 显示控制器(DPC)

35.1 概述

显示控制器(以下简称 DPC)是一个生成与外部显示设备(如 TFT-LCD 或视频编码器)接口信号的模块。DPC 包含一个同步发生器。同步发生器向多层控制器(MLC)发送控制信号并从 MLC 接收 RGB 数据。然后,同步发生器将接收到的 RGB 数据转换成适合的格式。此外,同步发生器还可以通过调整各种输出格式和同步信号来支持各种类型的 LCD 和视频编码器。

35.2 功能

  • 支持 RGB、多路复用 RGB(MRGB)、ITU-R BT.601、ITU-R BT.656 和 MPU 类型(i80)
  • 可编程的 HSYNC、VSYNC 和 DE(数据启用)
  • 可编程的同步信号极性
  • 可编程的数据、同步信号和时钟相位延迟
  • 支持上缩放器(仅次级显示)
  • VCLK(视频时钟)最大频率 150 MHz
  • 最大分辨率 2048 × 2048

35.3 方块图

35.4.1 时钟生成

35.4.1.1 外围时钟生成

当 CPU 访问 DPC 的寄存器时使用 PCLK。用户可以通过设置 PCLKMODE 来调整 DPC 的时钟,以满足用户的需求。

35.4.1.2 视频时钟生成

DPC 可以通过多种时钟源生成输出时钟。用于创建输出时钟的时钟包括 2-PLL、PADCLK(P/SCLK、ACLK)等。

同步发生器使用 VCLK 和 VCLK2 作为时钟源。VCLK 是像素单元操作的时钟,VCLK2 是像素输出的时钟。因此,VCLK 是每像素一个时钟,而 VCLK2 根据输出格式是每像素 1 到 6 个时钟。在 RGB 和 ITU-R BT.601A 格式中,这些格式每个时钟输出一个像素数据,VCLK 和 VCLK2 共享相同的时钟。在 MRGB、ITU-R BT.601B、ITU-R BT.601(8位)和 ITU-R BT.656 格式中,这些格式每两个时钟输出一个像素数据,VCLK 应该将 VCLK2 除以 2。由于 VCLK 需要将 VCLK2 除以 2,时钟发生器1 应使用时钟发生器0 的输出作为时钟源。用户可以使用 PADCLKSEL 选择输出源。PADCLKSEL 的选择与同步发生器的操作无关。通常,VCLK2 用作输出时钟。然而,如果连接了使用双边缘的显示设备,VCLK 将用作输出时钟。

Format

CLKSRCSEL0

CLKDIV0

CLKSRCSEL1

CLKDIV1

OUTCLKSEL1

PADCLKSEL

RGB, ITU-R BT.601A

0 to 6

0 to 256

7

0

0

1

MRGB, ITU-R BT.601B,

601 (8-bit), 656,MPU (i80)

0 to 6

0 to 256

7

1

0

1

MRGB (- Dual edge )

0 to 6

0 to 256

7

1

1

0

SRGB888

0 to 6

0 to 256

7

6

0

2

SRGBD8888

0 to 6

0 to 256

7

4

0

1

DPC 可以调整输出时钟的极性和相位。OUTCLKINV 用于调整输出时钟的极性,而 OUTCLKDELAY 和 OUTCLKSEL 用于调整输出时钟的相位。

基本上,DPC 在下降沿输出数据,OUTCLKINV 设置为“0”。对于在上升沿获取时钟的显示设备,应将 OUTCLKINV 设置为“1”以反转输出时钟。

35.4.2 格式

同步发生器可以从 MLC 接收 RGB888 数据,并以多种格式显示数据。主同步发生器可以显示的格式列在下表中。

详情见原文

主同步发生器最多可处理 24 位数据。然而,如果显示格式不是 RGB666 或 RGB888,那么高 8 位将不会被使用。

35.4.2.1 RGB 格式

在 RGB 格式中,数据按照蓝色、绿色和红色组件的顺序显示,基于较低的数据。然而,用户可以通过将 SWAPRB 设置为“1”来交换红色和蓝色组件的显示。

此外,DPC 在 RGB 格式中支持抖动效果。从 MLC 传输的所有 RGB 数据都具有 8 位数据宽度。因此,如果每个组件的数据宽度小于 8 位,如在 RGB565 和 RGB666 显示中,较低的位将被丢弃。在这种情况下,可以通过抖动效果来补偿显示质量。

当 RGB 图像以 RGB565 显示时,抖动后的图像显示出与简单丢弃未使用的较低位后显示的图像的差异,如下图所示。

RGB 抖动通过 RDITHER、GDITHER 和 BDITHER 设置,输出格式的设定值如下表所示。

Output Format

RDITHER

GDITHER

BDITHER

RGB555, MRGB555A, MRGB555B

5-bit Dither

5-bit Dither

5-bit Dither

RGB565, MRGB565

5-bit Dither

6-bit Dither

5-bit Dither

RGB666, MRGB666

6-bit Dither

6-bit Dither

6-bit Dither

STN - 4096 Color, 16 Level Gray

4-bit Dither

4-bit Dither

4-bit Dither

RGB888, MRGB888A/B, ITU-R BT.656, ITU-R BT.601A/B

Bypass

Bypass

Bypass

35.4.2.2 YCbCr 格式

由于 DPC 仅从 MLC 接收 RGB 数据,因此它会在将 RGB 数据转换为 YCbCr 数据后输出,以用于 ITU-R BT.656 显示或 ITU-R BT.601 显示。

DPC 使用以下公式将 RGB 数据转换为 YCbCr 数据:

当使用 ITU-R BT.601 B 外部显示设备时,用户可以通过调整 YCORDER 来更改数据输出顺序。YCORDER 的输出数据可以按下表所示进行更改。

35.4.3 同步信号

同步发生器生成具有各种时序的同步信号。主同步发生器向外部传输 HSYNC、VSYNC 和 DE 信号,以提供外部显示设备的时序接口。用户可以编程每个同步信号设置,以创建外部显示设备所需的时序。

35.4.3.1 水平时序接口

HSYNC 和 DE 信号用于水平同步。水平时序包括 tHSW、tHBP、tHFP 和 tAVW,如下图所示。

上述图中的每个符号在下表中进行了描述。

Symbol

Brief

Remark

tHSW

Horizontal Sync Width

Number of VCLKs in the section where the horizontal sync pulse is active

tHBP

Horizontal Back Porch

Number of VCLKs in a section from the end point of the horizontal sync pulse to the start point of the horizontal active

tHFP

Horizontal Front Porch

Number of VCLKs in a section from the end point of the horizontal active to the start point of the horizontal sync pulse

tAVW

Active Video Width

Number of VCLKs in a horizontal active section

水平时序设置寄存器包括 HSWIDTH、HASTART、HAEND 和 HTOTAL,每个寄存器的设置在下表中进行了描述。这些寄存器的每个单位都基于 VCLK,并且每个值设置为“总数 - 1”。

Register

Formula

Remark

HSWIDTH

tHSW – 1

Number of VCLKs in a section from the start point of the horizontal sync pulse to the end point of the horizontal sync pulse – 1

HASTART

tHSW + tHBP – 1

Number of VCLKs in a section from the start point of the horizontal sync pulse to the start point of the horizontal active – 1

HAEND

tHSW + tHBP + tAVW – 1

Number of VCLKs in a section from the start point of the horizontal sync pulse to the end point of the horizontal active – 1

HTOTAL

tHSW + tHBP + tAVW + tHFP

– 1

Number of VCLKs in a section from the start point of the horizontal sync pulse to the start point of the next horizontal sync pulse – 1

POLHSYNC 用于更改输出到外部的 HSYNC 信号的极性。当 POLHSYNC 为“0”时,水平同步脉冲为低电平有效,而当 POLHSYNC 为“1”时,水平同步脉冲为高电平有效。输出到外部的数据使能(DE)信号的极性不能更改,并且输出有效数据的部分为高电平状态。

35.4.3.2 垂直时序接口

VSYNC 信号用于垂直同步。垂直时序包括 tVSW、tVBP、tVFP 和 tAVH,如图所示。此外,垂直同步和水平同步之间的关系由 tVSSO 和 tVSEO 确立。

上述图中的每个符号在下表中进行了描述。

Symbol

Brief

Remark

tVSW

Vertical Sync Width

Number of lines in the section where the vertical sync pulse is active

tVBP

Vertical Back Porch

Number of lines in the section from the end point of the vertical sync pulse to the start point of the next vertical active

tVFP

Vertical Front Porch

Number of lines in the section from the end point of the vertical active to the start point of the vertical sync pulse

tAVH

Active Video Height

Number of lines in the vertical active section

tHTOTAL

Horizontal Total

Number of total VCLKs in a horizontal cycle where the horizontal active section and the horizontal blank section are added

tVSSO

Vertical Sync Start Offset

Number of VCLKs in a section from the start point of the vertical sync pulse to the start point of the horizontal sync pulse

tVSEO

Vertical Sync End Offset

Number of the VCLKs in a section from the end point of the horizontal sync pulse to the start point of the horizontal sync pulse

垂直时序设置寄存器包括 VSWIDTH、VASTART、VAEND 和 VTOTAL,每个寄存器的设置在下表中进行了描述。VSWIDTH、VASTART、VAEND 和 VTOTAL 的单位是基于水平线的,它们的值设置为总数减 1。VSSOFFSET 和 VSEOFFSET 的单位是基于 VCLK 的。

POLVSYNC 用于更改输出到外部的 VSYNC 信号的极性。当 POLVSYNC 为“0”时,垂直同步脉冲为低电平有效,而当 POLVSYNC 为“1”时,垂直同步脉冲为高电平有效。

35.4.3.3 AC 时序

条件:VCLK 40 MHz (25 ns)

35.4.3.4 UPSCALER(仅次级显示)

UPSCALER 执行水平双线性滤波放大 MLC OUT 层的功能。通过设置 UPSCALEENB 可以选择是否进行缩放。

UPSCALEENB 设置:

35.4.3.5 内嵌同步

ITU-R BT.656 输出不需要单独的同步信号引脚来向外部传输信号。同步信息通过数据引脚与数据一起传输。此时,同步信息作为单独的代码插入在有效数据的起点(SAV)之前和有效数据的终点(EAV)之后。包含在数据中的同步信息如下图所示。

SAV 和 EAV 由 [FF, 00, 00, CODE] 组成。每个 SAV 和 EAV 代码包含场(F)、垂直同步(VSYNC)和水平同步(HSYNC)数据,每个代码的组成如下:

在 ITU-R BT.656 格式中,通过将 SEAVENB 设置为“1”来将 SAV/EAV 代码插入数据中。然而,由于 SAV/EAV 代码通过数据引脚传输,为了区分代码和数据,应限制数据的范围。用户可以使用 YCRANGE 来限制数据范围。下图显示了颜色空间转换将 RGB 数据更改为 YCbCr 数据的结果,具体取决于 YCRANGE 的不同。

如果 YCRANGE 设置为“0”,则 Y 值在 0 到 15 之间时会更改为 16,Y 值在 236 到 255 之间时会更改为 235。同样,Cb/Cr 值在 0 到 15 之间时会更改为 16,Cb/Cr 值在 241 到 255 之间时会更改为 240。如果 YCRANGE 设置为“1”,则所有 Y/Cb/Cr 值都会被直接传输。

35.4.4 扫描模式

同步发生器支持隔行扫描和逐行扫描。扫描模式由 SCANMODE 决定。如果 SCANMODE 为“0”,则同步发生器以逐行扫描模式运行。如果 SCANMODE 为“1”,则同步发生器以隔行扫描模式运行。在隔行扫描模式下,可以分别在奇数场和偶数场中设置不同的垂直时序接口。奇数场显示和逐行显示共享相同的寄存器,而用于偶数场显示的寄存器是单独存在的。根据扫描模式创建垂直时序的寄存器列在下表中。

SCANMODE

Scan Mode

Registers

0

Progressive

VTOTAL, VSWIDTH, VASTART, VAEND, VSSOFFSET, VSEOFFSET

1

Interlace

Odd field

Even field

EVTOTAL, EVSWIDTH, EVASTART, EVAEND, EVSSOFFSET, EVSEOFFSET

35.4.5 延迟

由于同步发生器中的处理,像素数据比最终输出的同步信号更延迟。因此,用户应该延迟同步信号的输出,以使同步信号与像素数据同步。当同步发生器处理数据时,RGB 数据消耗 4 个时钟周期,YCbCr 数据消耗 6 个时钟周期。因此,为了在同步信号和数据之间实现同步,应该延迟同步信号的输出。在 VCLK 和 VCLK2 相同的 RGB 格式和 ITU-R BT.601A 格式中,应分别设置 4 个时钟和 6 个时钟的延迟。在 VCLK2 是 VCLK 两倍的 MGRB 和 ITU-R BT.656/601B 格式中,应分别设置 8 个时钟和 12 个时钟的延迟。

Format

VCLK2:VCLK

DELAYRGB

DELAYHS, DELAYVS, DELAYDE

RGB

1:1

0

Primary TFT: 7

Primary STN: 8

Secondary: 7

MRGB

2:1

0

Primary TFT: 14

Secondary: 14

ITU-R BT.601A

1:1

0

6

ITU-R BT.656, ITU-R BT.601B

2:1

0

12

35.4.6 中断

每当 VSYNC 发生时,DPC 都可以生成中断。

在 TFT LCD 逐行操作中,中断在每个垂直同步时触发。在 STN LCD 逐行操作中,中断在每 16 个垂直同步时触发。在隔行操作中,中断在每个偶数场(2 个垂直同步)时触发。如果 VSYNC 发生,DPC 将 INTPEND 设置为 "1",并在 INTENB 为 "1" 时通知中断控制器生成中断。因此,无论是否生成中断,用户都可以通过使用 INTPEND 的状态进行轮询来确认 VSYNC 的生成。通过写入 "1" 来清除 INTPEND。

35.4.7 MPU (i80) 类型同步信号

同步发生器可以为 MPU LCD 接口(i80)生成信号。MPU LCD 接口的信号包括 nCS(芯片选择)、RS(寄存器选择)、nWR(写入)、nRD(读取)和输入/输出数据。MPU LCD 接口有四种访问类型。

Signals

Access Types

Description

Register Address

RS = 0 nWR

Address Write

Write index to IR

[15:0]: C010_2984

[23:16]: C010_2988

RS = 0 nRD

Status Read

Read Internal Status

[23:16]: C010_298C

[15:0]: C010_2994

RS = 1 nWR

Data Write (or Graphic Data Write )

Write to Control Register and GRAM

[15:0]: C010_2984

[23:16]: C010_2990

RS = 1 nRD

Data Read

Read from GRAM

[23:16]: C010_2990

[15:0]: C010_2994

S5P6818 具有与外部设备通信的寄存器,并且支持 4 种类型的 MPU 接口格式。在“写入”情况下,需要先将低 16 位写入地址 C010_2984,然后将高 8 位写入地址 C010_2990。在“读取”情况下,需要先从地址 C010_298C 读取高 8 位,然后从地址 C010_2994 读取低 16 位。与外部设备的实际通信发生在写入 C010_2990 地址和读取 C010_298C 地址时。

为了满足外部设备的设置/保持时序,需要在 DPCMPUTIME0 和 DPCMPUTIME1 寄存器中设置适当的参数,这些参数包括设置计数器、访问计数器和保持计数器。以下是写操作的时序图:

通过将 DPC 设置为 i80 模式,S5P6818 可以将视频同步信号转换为 MPU i80 类型。请注意,对于 MPU i80,VCLK_2 需要比 VCLK 快 2 倍。下图描述了视频同步到 MPU i80 的转换。

S5P6818 具有一个“命令缓冲区”,用于在 VSYNC 期间发送附加信息。

35.4.8 奇偶场标志

S5P6818 DPC 提供了 DPCRGBSHIFT.FIELDFLAG 寄存器,该寄存器指示当前显示的帧是奇数帧还是偶数帧。

35.4.9 内部视频编码器和 DAC

35.4.9.1 特点
  • 视频编码器

    • 可编程亮度和色度带宽
    • 可编程饱和度、色调、对比度和亮度
    • 支持所有 NTSC 和 PAL 格式(NTSC-M/4.43、PAL-B/D/G/H/I/M/N/Combination N)
    • 复合输出 10 位到 DAC
  • 视频 DAC

    • 最大 54 MSPS 更新率
    • 10 位电流输出单通道 DAC,用于 CVBS
    • 1.0Vpp 单输出范围
    • 省电模式(高电平有效)
35.4.9.2 一般描述

视频编码器设计支持 NTSC 和 PAL 编码系统的所有标准和变体,包括交叉标准伪 PAL 和伪 NTSC。视频编码器允许独立控制场率、色度副载波和色度编码算法。亮度和色度带宽都可以变化,以优化不同数据输入条件。输出为 CVBS(复合视频银行同步)分离的 10 位。

次级同步发生器的 ENCRST 信号连接到内部视频编码器的 RESET 引脚。因此,你必须设置 ENCRST 位以访问内部视频编码器的寄存器。如果清除 ENCRST 位,则内部视频编码器的所有寄存器将被重置。

视频 DAC 是用于视频系统的 10 位单 CMOS 数模转换器。其最大转换率为 54 MSPS。它在模拟电源 3.0 V 至 3.6 V 下工作,并在 37.5 Ω 电阻负载下提供 26.7 mA 的满量程输出电流(1.0 V)。它也适用于视频系统等高速应用。

次级同步发生器的 ENCRST 信号连接到内部视频 DAC 的电源关闭引脚。因此,当输出视频信号时,你必须设置 ENCRST 位,当不使用时清除 ENCRST 位以减少功耗。

35.4.9.3 视频编码器复位顺序

要重置“视频编码器”,需要以下顺序:

  • 在 ENCRST 寄存器中写入 "1"
  • 在 CLKGENENB 寄存器中写入 "1"
  • 在 ENCRST 寄存器中写入 "0"
  • 在 CLKGENENB 寄存器中写入 "0"
  • 在 ENCRST 寄存器中写入 "1"

要启动 DAC PHY,需要以下顺序:

  • 在 0xC00110F8 地址的 [4] 位写入 "1"

要控制 DAC PHY 的满量程输出电压,需要以下顺序:

  • 在 0xC00110F8 地址的 [7:5] 位写入一个值

35.4.9.4 方块图

35.4.9.5 时序接口

视频编码器有 3 个输出时序信号(HSO、VSO 和 FSO),可用于从系统内的同步发生器提取数据。如果 ISYNC 设置为 "7",则编码器将在 PIXSEL 和 IFMT 组合定义的水平和垂直周期上“自由运行”。

水平时序 HSO 位置由 HSOS 和 HSOE 的起始和结束位置控制。编程值是过渡发生的像素编号。垂直时序 VSO 过渡由 VSOS 和 VSOE 寄存器控制。

35.4.9.6 视频标准选择

视频编码器支持全球所有的 NTSC 和 PAL 标准。编码器支持独立控制色度调制频率、选择相位交替行编码的色度和场频率。此外,对于非 SCH 锁定标准,可以使用 FDRST 使色度自由运行。如果 FSCADJ 寄存器设置为除 '0' 以外的任何值,则无法保持 SCH 关系。对于这些设置,建议将 FDRST 位设置为自由运行模式。

Requested Output Format

Required Register Settings

Format

Field Rate

FSC

IFMT

FSCSEL

PHALT

FDRST

NTSC-M

59.95 Hz (525)

3.5795454

0

0

0

1

NTSC-N

50 Hz (625)

3.5795454

1

0

0

0

NTSC-4.43

60 Hz (525)

4.43361875

0

1

0

0

PAL-M

59.952 (525)

3.57561189

0

2

1

0

PAL-combination N

50 Hz (625)

3.58205625

1

3

1

0

PAL-B/D/G/H/I/N

50 Hz (625)

4.43361875

1

1

1

1

Pseudo PAL

60 Hz (525)

4.43361875

0

1

1

0

Pseudo NTSC

50 Hz (625)

3.5795454

1

0

0

0

35.4.9.7 基本视频调整

包含了对色度和亮度的标准视频调整。色度控制包括饱和度(VENCSAT)和色调(VENCHUE)。亮度调整包括对比度(VENCCRT)和亮度(VENCBRT)。另外还包含一个 VENCSCH 控制,用于改变色度副载波相对于水平同步的相位。请注意,此功能仅在 FDRST = 0 时运行。

35.4.9.8 可编程带宽

亮度和色度路径的数据带宽显示在以下频率图中。YBW 控制允许 3 种不同的设置,以优化输出带宽到接收器。色度带宽的设置同样适用于使用 CBW 控制。

35.4.9.9 模拟视频输出配置

视频编码器通过寄存器 DACSEL 支持复合视频输出。DAC 输出电平和相关的数字代码总结如下。DAC 电压假定标准 140IRE = 1 V。数字显示为带有基线的 NTSC 类型视频。

36 去隔行

36.1 概述

去隔行块通过使用场(奇/偶)数据生成帧数据。如果图像的当前场是偶数场,则块通过使用前一个奇数场和下一个奇数场创建一个新的奇数场。

36.2 特点

  • 最大图像宽度为 1920,高度没有限制。
  • Y、Cb 和 Cr 分别执行
  • 支持分离的 YUV(420、422 和 444)格式

36.3 操作

去隔行块的操作基于当前场状态(奇/偶场)分为偶操作和奇操作。每个操作如下。

36.3.1 偶操作

偶操作表示当当前数据为偶数场时,块创建一个新的奇数场以创建帧数据。下图显示了去隔行块的偶操作。

去隔行块使用前一个奇数场数据和下一个奇数场数据来创建帧数据的奇数场数据。

  • 奇数行 1:提供偶数行 1 和偶数行 2 的平均值。
  • 去隔行数据:去隔行奇数行是通过使用前一个/下一个奇数行信息创建的。此时,由于行的前 8 个像素和最后 8 个像素没有足够的去隔行信息,去隔行数据取奇数行的平均值((前一个奇数行 + 下一个奇数行)/2)。
  • 倒数第二行奇数行:提供(倒数第二偶数行 + 最后一偶数行)/2 的值。
  • 最后一行奇数行:复制偶数场的最后一行。

36.3.2 奇操作

奇操作表示当当前数据为奇数场时,块创建一个新的奇数场以生成帧数据。下图显示了去隔行块的奇操作。

去隔行块使用前一个偶数场数据和下一个偶数场数据来创建帧数据的偶数场数据。

  • 提供奇数行 1 和奇数行 2 的平均值。
  • 去隔行数据:去隔行偶数行是通过使用前一个/下一个偶数行信息创建的。此时,由于行的前 8 个像素和最后 8 个像素没有足够的去隔行信息,去隔行数据取偶数行的平均值((前一个偶数行 + 下一个偶数行)/2)。
  • 最后一行偶数行:提供(最后一奇数行 + 倒数第二奇数行)/2 的值。

36.3.3 Y, Cb, Cr 操作

创建去隔行数据(帧数据)表示为当前奇数场创建每个偶数场的 Y、Cb 和 Cr,或为当前偶数场创建奇数场。下图显示了当当前隔行数据为奇数场时创建帧数据的示例。

对于 Y,通过使用当前奇数场 Y (SRCADDRC_Y) 信息、前一个偶数场 Y (SRCADDRP_Y) 信息和下一个偶数场 Y (SRCADDRN_Y) 信息来创建偶数场。然后将 Y 信息存储到目标图像的偶数场 (DESTADDRD_Y)。在新创建的图像的奇数场中,由于当前状态是奇数场,Y 信息将按原样复制到目标图像的奇数场 (DESTADDRF_Y)。

对于 Cb,仅通过使用当前奇数场 Cb (SRCADDRC_CB) 来创建偶数场。创建的偶数场存储到目标图像的偶数场 (DESTADDRD_CB)。在新创建的图像的奇数场中,由于当前状态是奇数场,Cb 信息将按原样复制到目标图像的奇数场 (DESTADDRF_CB)。Cr 数据的处理方式与 Cb 数据相同。(有关每个寄存器名称的含义,请参阅寄存器摘要。)

36.3.4 去隔行操作流程

去隔行操作需要设置源数据的地址、宽度、高度、垂直步幅和水平步幅。对于目标数据的地址设置,应设置当前场数据按原样复制的场基地址和存储去隔行数据的去隔行基地址。(如下图所示)

37 缩放器

37.1 概述

缩放器是用于改变图像大小的模块。缩放器从内存中读取图像,并在放大/缩小和低通滤波后将图像写入内存。此时,缩放器通过使用翻转或旋转功能改变图像的方向。

37.2 特点

  • 源/目标图像
  • 格式:分离的 YUV 格式(420, 422, 444),交错 UV
  • 大小:(8 到 4096)  (8 到 4096)(宽度设置为 8 的倍数)。
  • 放大比例:8 x 8 → 4096 x 4096
  • 缩小比例:4096 x 4096 → 8 x 8
  • 放大后或缩小前可用低通滤波器。
  • 水平 5-抽头滤波器:系数 64 组
  • 垂直 3-抽头滤波器:系数 32 组(关于频率响应,参见操作项)。

37.3 方块图

缩放器由生成地址的块(SRC_ADDR_GEN,DEST_ADDR_GEN),滤波器块,FIFO 块和与总线交换数据的块(CPUIF 和 POS_GEN2)组成。

37.4 功能描述

缩放器允许用户读取内存中的源图像,改变图像大小并将图像存储在内存中。缩放器通过使用源和目标图像的地址、宽度和高度的设置值来改变图像大小。用户可以使用缩放器的低通滤波器和旋转功能。

37.4.1 数字滤波器特性

缩放器的低通滤波器具有 5-抽头的水平滤波器和 3-抽头的垂直滤波器。缩放器通过使用低通滤波器在图像放大时防止图像质量恶化。

37.4.1.1 水平滤波器(5-抽头 FIR 滤波器)频率响应和群延迟

下图显示了缩放器的水平滤波器的特性,滤波器的设置范围在 0 到 63 之间。缩放器寄存器 SCCFGREG.SC_HFILT_COEFF 用于设置此滤波器。

37.4.1.2 垂直滤波器(3-抽头 FIR 滤波器)频率响应和群延迟

下图显示了缩放器的垂直滤波器的特性,滤波器的设置范围在 0 到 31 之间。缩放器寄存器 SCCFGREG.SC_VFILT_COEFF 用于设置此滤波器。

37.5 编程指南

37.5.1 配置

  1. 检查缩放器控制器状态:SCINTREG.SC_BUSY = 0

  2. 分别将源地址和步幅设置到 SCSRCADDR 和 SCSRCSTRIDE 寄存器。

  3. 设置 SCSRCSIZEREG.SC_SRC_WIDTH 和 SCSRCSIZEREG.SC_SRC_HEIGHT 寄存器(宽度是 8 的倍数)。

  4. 分别将目标地址和步幅设置到 SCDESTADDR0 和 SCDESTSTRIDE0 寄存器。如果需要缩放 UV 交错图像,分别将目标地址和步幅设置到 SCDESTADDR1 和 SCDESTSTRIDE1 寄存器。

  5. 设置 SCDESTSIZEREG.SC_DEST_WIDTH 和 SCDESTSIZEREG.SC_DEST_HEIGHT 寄存器(宽度是 8 的倍数)。

  6. 图像增量设置:设置 DELTAXREG 和 DELTAYREG 寄存器。

  7. 软设置:设置水平/垂直软设置 HVSOFTREG 寄存器。

  8. 设置滤波器:使用 SCCFGREG.SC_FILT_ENB 将滤波器设置为开/关。使用 SCCFGREG.SC_HFILT_COEFF 和 SCCFGREG.SC_VFILT_COEFF 选择滤波器系数集。

  9. 设置中断:SCINTREG.SC_INT_ENB 寄存器。

37.5.2 运行

  1. 将 SCRUNREG.SC_RUN 位设置为 "1"。

  2. 读取 SCINTREG.SC_BUSY 寄存器以检查操作状态。

  3. 如果 SCRUNREG.SC_RUN 位在 SCINTREG.SC_BUSY = 1 时清除,则操作立即停止。

38 LVDS

38.1 概述

LVDS(低电压差分信号)是一个生成信号以与外部 LVDS 显示设备接口的模块。LVDS 由 LVDS 控制器和 LVDS PHY 块组成。LVDS 控制器从 DPC(或分辨率转换器)接收 RGB 视频数据,并将 RGB 视频数据转换为适合的 LVDS 数据流格式,并将转换后的 RGB 视频数据传输到 LVDS PHY 块。同时,LVDS 控制器将控制信号传输到 LVDS PHY 块。LVDS PHY 块通过 6 个 LVDS 输出通道传输从 LVDS 控制器接收的 RGB 视频数据。

38.2 特点

  • 可选择的渐进 RGB 视频数据(2 DPC)
  • 支持 JEIDA 和 VESA 数据打包用于 LVDS 输出
  • 可编程的数据打包用于 LVDS 输出(可配置)
  • 内部输入视频时钟范围:30M 至 90 MHz
  • 6 个 LVDS 输出通道(5 个数据通道,1 个时钟通道)
  • 35:7 数据通道压缩,支持每个 LVDS 通道高达 630Mbps
  • 省电模式

38.3 方块图

38.4 功能描述

38.4.1 LVDS 数据打包格式

LVDS 控制器将从 DPC 接收到的 RGB 视频数据转换为三种数据打包格式之一,并将其传输到 LVDS PHY 块。以下是支持的 LVDS 数据打包格式:

  • VESA 数据打包格式
  • JEIDA 数据打包格式
  • 用户可编程数据打包格式

在 VESA 和 JEIDA 数据打包格式中,五个数据通道中的四个用于传输。以下是每种数据打包格式的格式。

当用户将 LVDSCTRL0 寄存器的 LCD_FORMAT 位设置为 VESA 数据打包格式时,LVDS 的输出形式如上表所示。同样,当用户将其设置为 JEIDA 数据打包格式时,输出形式如上表所示。

在用户可编程数据打包格式中,用户可以为 LVDS 输出设置自己的数据打包格式。用户可以为每个通道的每个位确定要输出的信号。信号可以是 Hsync、Vsync、DE 或 RGB 颜色位。在用户可编程数据打包格式中,寄存器的设定值在下表中表示。

Bit Position

[34:31]

[30:27]

[26]

[25]

[24]

[23:16]

[15: 8]

[ 7: 0]

4'b1111

4'b0000

VDEN

VSync

HSync

RED[7:0]

GREEN[7:0]

BLUE[7:0]

例如,如果用户想将 LVDS 通道 A 的第 0 位设置为 RED[2],则将 LVDSLOC0 寄存器的 LOC_A0 位设置为 17。(注意,在表 36-3 中,第 17 位是 RED[2])。如果用户想将 LVDS 通道 D 的第 5 位设置为 VSync,则将 LVDSLOC5 寄存器的 LOC_D5 位设置为 25。

38.4.2 LVDS 应用说明

在 S5P6818 中,用户可以选择两种 RGB 视频数据之一。

  • 主 DPC 视频数据
  • 辅 DPC 视频数据

以下序列应使用 LVDS 设备(假设该序列使用主 DPC 视频数据):

  1. 解除 DisplayTop 和 DualDisplay 的重置

  2. 设置主 MLC 和主 DPC 的配置。将 DPC 的垂直和水平同步宽度设置为与外部 LVSD 显示设备的宽度相同。将 DPC 的输出格式设置为 RGB888 格式。假设 DPC CLKGEN 的时钟源为 PLL2,时钟分频器为 2。

  3. 设置 LVDS CLKGEN 的时钟源为 PLL2,时钟分频器为 2(与 DPC CLKGEN 相同)。推荐的配置如下:

    • CLKGEN 0:SRC(PLL2),DIV(2)
    • CLKGEN 1:SRC(7),DIV(2)
  4. 将 LVDS_MUXCTRL 寄存器的 LVDS_MUXSEL 位设置为 0(使用主 DPC),将 LVDS_MUXCTRL 寄存器的 LVDS_MUXENB 位设置为 1(启用)。

  5. 设置 LVDS 数据打包模式,配置 LVDS 控制寄存器。下表显示了使用 VESA 数据打包格式的示例。

6.解除 LVDS PHY 块的重置。

38.4.3 输出数据与时钟之间的偏斜控制

LVDS 具有自动去偏斜控制功能,如果 LVDSCTRL0.I_AUTO_SEL 和 LVDSCTRL4.AUTO_DSK_SEL 为高电平,则 LVDS 可以自动执行去偏斜功能。对于自动去偏斜,向 LVDS TX 注入通知垂直空白区域的信号,如下图所示。

如果客户希望实现自动去偏斜功能,则接收端(RX)必须支持自动去偏斜功能。在 S5P6818 中,自动去偏斜仅在使用主 DPC RGB 视频时有效。

38.4.4 电气特性

39 HDMI

39.1 概述

HDMI(高清多媒体接口)兼容HDMI v1.4规范,并支持高达1080p的视频分辨率。它接受来自DPC的RGB视频数据,并以串行形式将其传输到HDMI电缆中。

HDMI包括HDMI链路和HDMI PHY。HDMI链路接收来自DPC的RGB视频数据,并将其转换为符合HDMI v1.4规范的10位信号序列。HDMI PHY接收来自HDMI链路的10位信号序列,并以串行形式将其传输到HDMI电缆中。HDMI PHY可以从参考24 MHz时钟生成像素时钟和TMDS时钟。因此,用户可以使用HDMI PHY生成的像素时钟,而不是外部分频PLL时钟,DPC(显示控制器)也可以使用HDMI PHY生成的像素时钟。HDMI v1.4规范中指定的所有像素时钟频率都可以由HDMI PHY生成。

39.2 特性

  • HDMI 1.4a,HDCP 1.4 兼容
  • 支持视频格式
    • 480p @59.94 Hz/60 Hz,576p@50 Hz
    • 720p @50 Hz/59.94 Hz/60 Hz
    • 1080p @50 Hz/59.94 Hz/60 Hz
    • (不支持隔行视频格式)
  • 支持颜色格式:4:4:4 RGB
  • 像素重复:最多x4
  • 支持每颜色位数:8位
  • HDMI CEC(消费电子控制)
  • 支持:SPDIF 2声道,I2C 2声道(左/右)
  • 集成的HDCP加密引擎用于视频/音频内容保护(认证过程由软件控制,而非硬件控制)
  • 省电模式 注意:HDMI模块中不包括用于DDC通道的I2C,用户必须使用S5P6818中的一个I2C模块用于DDC通道。

39.3 模块图

注意:SPDIFCLK(图39-2)用于锁存I2S的SDATA和SPDIFTX的SPDIFIN。SPDIFCLK的频率应比SDATA和SPDIFIN高八倍。在SPDIF中,SPDIFCLK的频率必须高于fs × 512。例如,SPDIF TX使用48 kHz采样频率,则SPDIFCLK的频率必须为24.576 MHz。48k × 512 = 24576k。

39.4 功能描述

39.4.1 选择用于HDMI的RGB视频数据

在S5P6818中,用户可以选择两种RGB视频数据之一:

  • 主DPC视频数据
  • 次DPC视频数据

当用户希望使用主DPC视频数据进行HDMI输出时,用户需要将HDMI_MUXCTRL寄存器的HDMI_MUXSEL位设置为0,并将HDMI_MUXENB位设置为1。

39.4.2 HDMI转换器

HDMI转换器将来自DPC的RGB视频数据转换为适合HDMI链路的格式。用户必须设置HDMI转换器的参数。HDMI转换器由几个寄存器组成。寄存器的配置值见下表。图39-3显示了同步信号时序图。

注意:由于DPC生成同步信号,用户必须记住当前源视频数据的同步信息,并且用户必须计算V2_BLANK和V_SYNC_LINE_BEF等值(参见下图)。

39.4.3 HDMI链路

HDMI链路从HDMI转换器接收转换后的视频数据。此外,HDMI链路还接收来自SPDIFTX或I2S的音频数据。HDMI链路将这些视频和音频数据转换为符合HDMI v1.4规范的10位信号序列。

用户必须设置视频和音频的配置。

39.4.3.1 视频输入接口

视频输入接口接收i_vsync、i_h_active、i_field和像素数据信号,以识别帧的开始、行的开始以及隔行视频格式中顶部字段的开始。这些信号(像素数据除外)与CEA-861中的VSYNC、HSYNC和DE信号不同。注意,CEA-861中的HSYNC和DE信号未使用。相反,传输到HDMI接收端的实际Vsync和Hsync信号是根据寄存器设置在hdmi_14tx_ss内部生成的。

i_vsync信号仅在上一帧的最后一行的活动区域期间激活一个周期。i_h_active在空白期间始终为低,在活动期间无论视频格式如何都为高。注意,即使在垂直空白期间,i_h_active也会变高。下图显示了这三个信号的时序图。

与视频时序相关的寄存器有两组。一组指定输入时序,另一组指定输出时序。寄存器值与视频输入/输出时序的关系如图所示。用户必须根据输入视频时序设置与输入相关的寄存器。用户可以使用与输出相关的寄存器来控制显示端的视频时序,例如偏移和显示特定时序。注意,图中的o_vsync、on_hsync和o_de信号是CEA-861中描述的视频时序信号。这些信号在hdmi_14tx_ss内部生成,并传输到HDMI接收端。

在以下说明中使用了以下符号。

  • o_h_sync 等于 o_hsync。
  • o_v_sync 等于 o_vsync。
  • v_line 等于 V_LINE。
  • h_line 等于 H_LINE。
  • h_sync_start 等于 HSYNC_START。
  • h_sync_end 等于 HSYNC_END。
  • h_blank 等于 H_BLANK。
  • v1_blank 等于 V1_BLANK。
  • v2_blank 等于 V2_BLANK。
  • v_blank_f0 等于 V_BLANK_F0。
  • v_blank_f1 等于 V_BLANK_F1。
  • v_blank_f2 等于 V_BLANK_F2。
  • v_blank_f3 等于 V_BLANK_F3。
  • v_blank_f4 等于 V_BLANK_F4。
  • v_blank_f5 等于 V_BLANK_F5。
  • line_bef_1 等于 LINE_BEF_1。
  • line_bef_2 等于 LINE_BEF_2。
  • line_aft_1 等于 LINE_AFT_1。
  • line_aft_2 等于 LINE_AFT_2。
  • line_aft_3 等于 LINE_AFT_3。
  • line_aft_4 等于 LINE_AFT_4。
  • line_aft_pxl_1 等于 LINE_AFT_PXL_1。
  • line_aft_pxl_2 等于 LINE_AFT_PXL_2。
  • line_aft_pxl_3 等于 LINE_AFT_PXL_3。
  • line_aft_pxl_4 等于 LINE_AFT_PXL_4。
  • vact_space1 等于 VACT_SPACE1。
  • vact_space2 等于 VACT_SPACE2。
  • vact_space3 等于 VACT_SPACE3。
  • vact_space4 等于 VACT_SPACE4。
  • vact_space5 等于 VACT_SPACE5。
  • vact_space6 等于 VACT_SPACE6。

下图显示了各模式下的视频时序。

在2D渐进模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync 由 line_bef_1 和 line_bef_2 生成。o_v_sync 在 line_bef_1 行的 h_sync_start 像素处变高,并在 line_bef_2 行的 h_sync_start 像素处变低。

v2_blank 应等于 v_line。

在3D帧打包渐进模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync 由 line_bef_1 和 line_bef_2 生成。在这些行中的 h_sync_start 处生成 o_v_sync。活动空间由 vact_space1 行和 vact_space2 行表示。

v2_blank 应等于 v_line。

在3D并排(半)渐进模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync由line_bef_1和line_bef_2生成。在这些行中的h_sync_start处生成o_v_sync。v2_blank应等于v_line。

在3D上下渐进模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync由line_bef_1和line_bef_2生成。在这些行中的h_sync_start处生成o_v_sync。v2_blank应等于v_line。

在3D交替行模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync由line_bef_1和line_bef_2生成。在这些行中的h_sync_start处生成o_v_sync。v2_blank应等于v_line。

在3D并排(全)逐行模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync由line_bef_1和line_bef_2生成。在这些行中的h_sync_start处生成o_v_sync。v2_blank应等于v_line。

在3D L+深度模式中,i_field和i_vsync输入视频信号表示图像帧的开始。当i_vsync输入视频信号处于活动状态时,i_field应为低电平。

o_v_sync由line_bef_1和line_bef_2生成。在这些行中的h_sync_start处生成o_v_sync。活动空间由vact_space1线和vact_space2线指示。v2_blank应等于v_line。

39.4.3.2 音频输入接口

HDMI可以解密AES加密的HDCP密钥。对于具有HDCP功能的HDMI,每个设备应具有唯一的HDCP密钥集。

HDMI 1.4传输子系统支持两种音频输入接口:SPDIF接收和I2S接收。用户可以使用SPDIF接口进行两声道线性或非线性PCM音频传输,使用I2S接口进行多达八声道的线性PCM音频传输。

对于I2S接口,用户可以在寄存器中指定通道状态块和用户位信息,这些信息在I2S音频格式中并不存在。

SPDIF接口

HDMI 1.4传输子系统支持遵循IEC-60958和IEC-61937格式的SPDIF接口。

I2S接口

I2S接口支持线性PCM和非线性PCM。

注意:支持HBR音频格式。

39.4.3.3 HPDM

HPD信号有两种状态变化:上升(插入)和下降(拔出)变化。用户可以指定噪声滤波器的阶段数,以减少转换过程中可能出现的毛刺。

39.4.3.4 CEC

CEC是Consumer Electronics Control(消费者电子控制)的缩写,用于控制连接到一根"CEC总线"的设备。CEC输出端口是一个双向端口,应使用外部电阻和电压供应上拉至3.3V(即开漏连接)。

CEC设备通过CEC总线串行发送消息(MSB优先),接收设备通过在ACK位时将总线拉低来发送确认位。有关每个位的时间和消息结构,请参阅HDMI规范1.4a补充1(CEC规范)。

39.4.3.5 中断时序

HDMI 1.4传输子系统生成电平触发的中断。中断在两个级别屏蔽:每个子模块和控制器。另一方面,除HPD中断外,所有中断的清除仅在子模块中进行。对于HPD,每次插入和拔出都会分别生成HPD插入中断和HPD拔出中断。

39.4.3.6 HDCP密钥管理

HDMI可以解密AES加密的HDCP密钥。对于具有HDCP功能的HDMI,每个设备应具有唯一的HDCP密钥集。该密钥集由Digital Contents Protection, LLC(www.digital-cp.com)发布。

HDCP密钥存储在HDMI链路外的非易失性存储器中。重要的是非易失性存储器中不能有原始的HDCP密钥。密钥应安全存储,以防止被窃听。

HDMI链路使用AES加密算法来保护明文HDCP密钥。在开始HDCP认证协议之前,HDMI链路从存储器(MEM_encr)读取加密的HDCP密钥,使用密钥解密这些密钥,并将解密后的密钥存储到解密存储器(MEM_decr)中。解密存储器只能由HDMI链路内的HDCP引擎访问,不能通过APB3接口访问,以保护解密后的密钥。AES密钥通过端口(i_aeskey_data, i_aeskey_hw)提供。对于AES密钥,可以使用各种芯片ID和固定硬件值。注意,只支持128位密钥。

通过设置AES_START寄存器的AES_Start位开始AES解密。当解密完成并且解密后的密钥存储在解密存储器中时,AES_Start位将变为0,通知解密已完成。要解密的数据大小可以通过AES_DATA_SIZE_H/L寄存器设置。在确认AES_Start位为0后,解密的数据可以用于HDCP密钥。在AES_Start位变为0之前,HDCP无法运行。

39.4.3.7 HDMI 交错模式

S5P6818 HDMI 支持交错视频格式。

要使用 HDMI 交错模式,HDMI 链路的同步信号如下图所示进行信号处理。

39.4.3.7 HDMI 交错模式

在 2D 交错模式下,i_field 和 i_vsync 输入视频信号指示图像帧的开始。当 i_vsync 输入视频信号有效时,i_field 在顶部场时应为低电平,在底部场时应为高电平。第一个 o_v_sync 由 line_bef_1 和 line_bef_2 生成。第一个 o_v_sync 在 h_sync_start 处生成。第二个 o_v_sync 由 line_aft_1 和 line_aft_2 生成。第二个 o_v_sync 在 line_aft_1 行的 line_aft_pxl_1 像素处变为有效,并在 line_aft_2 行的 line_aft_pxl_2 像素处变为无效。v1_blank_f1 应等于 v_line。

要使用 HDMI 交错模式,需要以下步骤:

  • 配置 MLC 和 DPC 为交错模式。必须使用 DPC 的 EvenVFP、EvenVSW、EvenVBP、VSP(Vsync 设置像素)、VCP(VSync 清除像素)、Even VSP、EvenVCP
  • 配置 HDMI 链接为交错模式。参考上图
  • 配置 HDMI 转换器以生成 HDMI 场信号

39.6 HDMI PHY

HDMI PHY 可以使用其自身的 PCG(像素时钟生成器)生成符合 HDMI 1.4 规范的像素时钟,该 PCG 使用 24 MHz 参考时钟。以下是常见像素时钟频率表。

39.6.1 通过 APB 更改 PHY 配置

HDMI PHY 有许多内部寄存器用于更改其配置,如像素时钟频率或模拟特性。用户可以通过 APB 端口访问这些寄存器。为了安全配置 PHY 核心,MODE_SET_DONE 寄存器(REG_7C<7>)被用作 APB 设置状态的指示器,如下图所示。(MODE_SET_DONE 寄存器也由 APB 控制。)

如果用户想通过新的寄存器设置来存储配置 HDMI PHY,则应在 MODE_SET_DONE 寄存器(0xC010047C)上写入 00h 而不是断言整体重置信号。然后 PHY_READY 信号变为低电平,PHY 等待新的寄存器设置。当新的值被写入 PHY 寄存器时,应再次将 MODE_SET_DONE 寄存器设置为 80h,让 PHY 开始使用新的寄存器值配置其状态。一旦配置完成,PHY_READY 信号会自动断言。

39.6.2 PHY 准备顺序

要断言 PHY_READY 信号,HDMI PHY 必须执行下图所示的几个步骤。HDMI PHY 核心具有用于 TMDS 和像素时钟生成的 CMU 和 PCG。两者都应该被锁定,并且在断言 PHY_READY 之前应该完成 TMDS_CLKHI 和 TMDS_CLKO 之间的时钟去偏。因此,在断言 PHY_READY 信号之前,应向 PHY 提供 TMDS_CLKHI。HDMI PHY 准备顺序由 PHY_RESET 信号点燃,该信号是外部重置信号或 MODE_SET_DONE 信号的反转。一旦 PLL_LOCK 和 CMU_LOCK 信号变高,去偏过程开始。去偏完成后,PHY_READY 信号变高,这意味着 HDMI PHY 准备好正确发送 TMDS 数据。

39.6.3 HDMI PHY 配置

用户需要设置 HDMI PHY 配置以生成像素时钟。以下是设置 HDMI PHY 配置的步骤。

  1. 将 HDMI CLKGEN 的 PCLKMODE 设置为“1”(启用)。(需要释放 RESETREG[0].[10]。)

  2. 将 TIEOFFREG[3].[0] 设置为“1”。

  3. 释放 RESETREG[0].[13] 和 RESETREG[0].[17] 的重置(释放 HDMI PHY 重置)。

  4. 根据下表设置 HDMI PHY 的寄存器以生成像素时钟。

  5. 检查 PHY_STATUS_0 寄存器(HDMI Link)的 PHY_READY 位,确认 HDMI PHY 的 PHY_READY 是否为高电平。

40 MIPI

40.1 概述

S5P6818 具有 MIPI-DSI 主设备和 MIPI-CSI 从设备。

40.2 特点

40.2.1 DSI 主设备功能 (DSIM)

MIPI DSIM 的主要特点包括:

  • 符合 MIPI DSI 标准规范 V1.01r11
  • 最大分辨率可达 WUXGA (1920 × 1200)
  • 支持 1、2、3 或 4 数据通道
  • 支持像素格式:16-bpp、18-bpp 打包、18-bpp 松散打包(3 字节格式)和 24-bpp
  • 接口
    • 支持显示控制器的视频图像输入 RGB 接口
    • 支持 PMS 控制接口,通过 PLL 配置字节时钟频率
    • 支持预分频器,从字节时钟生成逃逸时钟

40.2.2 CSI 从设备功能 (CSIS)

仅支持 8 位 YUV422。有关更多信息,请参见 VIP。

40.3 D-PHY 特点

MIPI D-PHY 的特点包括:

  • MIPI D-PHY 内核的最大高速时钟频率为 1GHz
  • 兼容 D-PHY 规范 v1.00
  • 主设备(数据源)和从设备(数据接收器)之间的同步链路
  • 所有通道均支持正向方向的高速传输
  • 仅在主设备数据通道 0 上支持低功耗模式下的双向数据传输
  • 使用令牌传递控制链路的通信方向
  • 高速模式用于快速数据传输,低功耗模式用于控制和低速数据传输
  • 高速模式:差分和终端,200mV 振幅:80 至 1000Mbps
  • 低功耗模式:单端和非终端,1.2V 振幅:最大 10Mbps(此模式用于低速异步数据通信或控制)

40.4 DSIM 的模块图

• DSIM 从三个不同的 IP 获取数据,即 MIE、MDNIE 和显示控制器。 • 通过设置 MDNIE 寄存器可以选择上述数据路径之一。

40.4.1 内部主 FIFO

下表描述了可配置大小的主 FIFO。

40.4.2 包头仲裁

DSIM 包含四个用于传输的包头 FIFO,即主显示、次显示、I80 接口命令和 SFR FIFO。主显示和次显示 FIFO 包头包含图像数据,而 I80 接口命令 FIFO 包头包含命令包。另一方面,SFR FIFO 包头包含命令包、次显示图像数据(视频模式下)等。

包头仲裁器采用“固定优先级”算法。优先级顺序固定为主显示、次显示、I80 接口命令和 SFR FIFO 包头。

在视频模式下,不使用次显示和 I80 接口命令 FIFO。SFR FIFO 包头在非活动图像区域检查主显示 FIFO 是否为空(无请求),然后发送其请求。

40.4.3 RxFIFO 结构

为了读取通过低功率数据接收模式接收的数据包,RxFIFO 像 SFR 一样工作。RxFIFO 是一个异步 FIFO,输入时钟域为 ByteClk 和 PCLK,输出时钟域也为 PCLK。接收的数据与 RxClk 同步。RXBUF 具有四个用于对齐字节到字的接收字节缓冲区。

存储在 RXFIFO 中的所有数据包的包头都是字对齐的,即数据包的第一个字节总是存储在 LSB。例如,如果一个长数据包有 7 字节的有效载荷,最后一个字节将填充虚拟字节,下一数据包将存储在下一个字中,如图 40-3 所示。

注意:CRC 数据不存储在 RXFIFO 中。

40.5 接口和协议

视频模式下显示控制器到 DSI 的概念信号转换图

40.5.1 显示控制器接口

MIPI DSI 主控器有两个显示控制器接口,即用于主显示的 RGB 接口和用于主/次显示的 CPU 接口(I80 接口)。视频模式使用 RGB 接口,而命令模式使用 CPU 接口。

RGB 图像数据按照相同的顺序加载在 RGB 接口和 I80 接口的数据总线上:RGB_VD[23:0] 或 SYS_VDOUT[23:0] 是 {R[7:0], G[7:0], B[7:0]}。每个字节对齐到最高有效位。例如,在 12 位模式下,只有三个 4 位值作为 R、G 和 B 分别有效,即 data[23:20]、data[15:12] 和 data[7:4]。DSIM 忽略其余的位。

40.5.2 RGB 接口

Vsync、Hsync 和 VDEN 是有效高信号。在这三个信号中,Vsync 和 Hsync 是脉冲类型,占用多个视频时钟周期。RGB_VD[23:0] 是 {R[7:0], G[7:0], B[7:0]}。所有同步信号都与 RGB_VCLK 的上升沿同步。显示控制器发送最少一个水平线长度的 Vsync 脉冲、V 后沿和 V 前沿。Hsync 脉冲宽度应大于 1 字节时钟周期。

40.5.3 HSA 模式

HSA 模式指定水平同步脉冲区域禁用模式。

40.5.4 HSE 模式

HSE 模式指定在 Vsync 脉冲或 Vporch 区域内的水平同步结束包启用模式。

40.5.5 视频模式下的通用数据传输

40.5.6 MIPI DSIM 将 RGB 接口转换为视频模式

Vsync 和 Hsync 数据包在视频模式下对保护图像至关重要。MIPI DSIM 允许在 VFP 区域的若干行进行通用数据传输。如下图所示,垂直前沿分为三个区域,即稳定 VFP 区域、允许命令区域和命令屏蔽区域。

DSIM_MVPORCH 寄存器配置稳定 VFP 区域。配置边界为 11'h000 至 11'h7FFF。

DSIM_MVPORCH 寄存器还配置允许命令区域。配置边界为 4'h0 至 4'hF。仅在此区域允许通过 HS 模式或 LPDT 启动“命令传输”。在 LPDT 中,数据传输需要很长时间才能完成(大约几百微秒或更长时间)。此时,由于 LPDT 长数据包,Hsync 数据包不会到达。MIPI DSIM 设有大尺寸 FIFO 用于存储丢失的 Hsync 数据包。在 LPDT 后,MIPI DSIM 通过 HS 模式立即传输这些 Hsync 数据包。

为了保护 Vsync,命令屏蔽区域为屏蔽区域。此区域根据 LPDT 带宽计算。例如,如果 EscClk 为 10 MHz,最大长数据包有效负载大小为 1KB,LPDT 传输时间为 824us(数据包大小:1030 字节,LPDT 最大带宽:10Mbps)。如果一行时间为 20us,则在 42 行中发生行时序违规。因此,命令屏蔽区域大于 42 加一个额外值。这“a”是违规的 Hsync 数据包的传输时间。

显示控制器应配置为使 VFP 行数是稳定 vfp、允许命令区域和命令屏蔽区域的总和。

输入事务和 DSI 事务之间的关系

40.6 配置

视频模式与命令模式

MIPI DSI 主控块支持两种模式,即视频模式和命令模式。

40.7 PLL

为了传输图像数据,MIPI DSI 主控块需要由 PLL 生成的高频时钟(80 MHz 至 1 GHz)。

为了配置 PLL,MIPI DSI 主控块包含 SFR 和相应的接口信号。PLL 嵌入在 PHY 模块中。如果 SoC 中的其他 PLL 满足时序规范,则应使用其他 PLL。

40.8 缓冲区

在 MIPI DSI 标准规范中,DSI 主控器以突发模式发送图像流。图像流以高速和位时钟频率传输。此模式允许设备在停止状态下停留更长时间以减少功耗。为此,MIPI DSI 主控器具有双行缓冲区,用于存储一整行并在下一个行时间内更快地发送。

41 视频输入处理器 (VIP)

41.1 概述

S5P6818 的视频输入处理器(以下简称 VIP)可以直接从外部摄像头模块或视频解码器接收图像。此外,它可以剪裁或缩小输入图像并将其存储到内存中。从 VIP 存储的图像可以通过使用 MPEG 硬件进行编码,并通过使用多层控制器(MLC)作为预览图像。此外,图像还可以通过使用颜色空间转换器转换为 3D 图形加速器的纹理图像。

41.2 特性

视频输入端口的特性包括:

  • 支持 ITU-R BT.656(外部 CIS)和 ITU-R BT.601(外部 CIS 和 MIPI,外部 8 位,MIPI 16 位)接口
  • 时钟、HSYNC、VSYNC 和 8 位数据端口(外部 CIS)
  • 时钟、HVALID、VVALID、DVALID 和 16 位数据端口(内部 MIPI CSI)
  • 支持外部 DVALID 引脚或场引脚
  • 最大支持 8192 × 8192 图像
  • 剪裁和缩小
  • YUV 420/422/444 存储格式和线性 YUV 422 存储格式
  • 水平和垂直中断以及操作完成中断
  • 支持内部解码器和外部接口
  • 3 个来自外部 CIS 的输入和 1 个来自 MIPI CSI 的输入

41.3 模块图

41.4 VIP 互连

41.4.1 模块图

42 多格式视频编解码器

42.1 概述

多格式视频编解码器(以下简称“VPU”)是为消费者多媒体产品(如高清电视、高清机顶盒和高清DVD播放器)设计的全高清多标准视频IP。它可以解码H.264 BP/MP/HP、VC-1 SP/MP/AP、MPEG-1/2、MPEG-4 SP/ASP、H.263P3、VP8、Theora、AVS、RV-8/9/10以及JPEG(最大8192×8192)格式的压缩视频。它还可以执行H.264、MPEG-4和H.263编码,最高分辨率为全高清1920×1088(最大8192×8192 JPEG)。VPU可以同时对不同格式的视频流进行多分辨率的实时编码、解码或同时进行编码和解码。

VPU包含一个16位的DSP,称为BIT处理器。BIT处理器通过主机接口与主CPU通信,并控制VPU的其他子模块。由于所有的功能(如比特流解析、视频硬件子模块控制和错误恢复)都在BIT处理器中实现,因此主CPU的资源需求低于1 MIPS。此外,它还设计为最优共享大多数用于视频处理的通用子模块,这有助于实现超低功耗和低门数。

它通过32位AMBA 3 APB总线与主CPU系统连接进行系统控制,通过128位AMBA3 AXI总线进行数据传输。有两条128位AXI总线:主总线和次总线。次总线可以连接到片上存储器以实现高性能。

42.2 功能描述

42.2.1 视频编解码器列表

下表显示了VPU支持的多种视频标准。

43 3D 图形引擎

43.1 概述

S5P6818具有强大的3D GPU引擎。3D GPU是用于2D和3D图形系统的硬件加速器。GPU包括:

  • 两个像素处理器(PPs)
  • 一个几何处理器(GP)
  • 一个32 KB的二级缓存(L2)
  • 每个GP和PP的内存管理单元(MMU)
  • 一个电源管理单元(PMU)

GPU及其相关软件兼容以下图形标准:

  • OpenGL ES 2.0
  • OpenGL ES 1.1
  • OpenVG 1.1

44 加密引擎

44.1 概述

加密引擎块执行AES、DES、HASH加密和解密。

44.2 特性

  • 大端加密与解密
  • 支持DMA接口
  • 支持AES ECB、CBC、CTR -128、192、256模式
  • 支持DES ECB、CBC -64模式
  • 支持3DES -64模式
  • 支持HASH模式(SHA1、MD5)
  • 支持输入共享模式(AES & HASH)
  • 支持AES和HASH同时工作

45 安全 JTAG

45.1 概述

安全 JTAG 包含一个认证与授权模块和一个访问提供者。安全 JTAG 设备通过用户密码进行保护,可以通过提供正确的密码解锁。安全 JTAG 通过 AHB AP 连接到 CoreSight。要激活密码解锁机制,必须将密码交换请求应用到 CoreSight 的 AHB AP。

45.2 特性

安全 JTAG 的特性包括:认证与授权调试模块。

45.3 模块图

46 温度监控单元 (TMU)

46.1 概述

在深亚微米时代,由于动态耗散导致的高温可能会导致芯片故障,并引发高昂的成本,例如封装、冷却设备等。为了缓解这种现象,有必要管理芯片上的温度,以便芯片在保持适当温度的同时继续操作,通过降低性能或暂停特定 IP 的操作来实现这一点。

S5P6818 中的 TMU 提供软件控制(称为热节流)和硬件控制(称为热跳变)管理方案。TMU 通过测量芯片上的温度来监控温度变化,当温度超过或低于预定阈值时向 CPU 生成中断。从 CPU 的角度来看,CPU 可以通过读取相关寄存器字段获取芯片上的温度信息,即使用轮询方案。TMU 的工作时钟为振荡时钟 OSCCLK。

TMU 的操作概述如下图所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Absorbed_w

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

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

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

打赏作者

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

抵扣说明:

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

余额充值