这个页面的 最新开发版本 可能比这个发布的 0.4.0 版本新。

寄存器手册

引言

编写目的

W800芯片是联盛德微电子推出的一款嵌入式Wi-Fi SoC芯片。该芯片集成度高,所需外围器件少,性价比高。适用于IoT(智能家庭)领域各种智能产品。高度集成的Wi-Fi和蓝牙4.2 Combo功能是其主要功能;另外,该芯片集成XT804内核,内置QFlash,SDIO、SPI、UART、GPIO、I²C、PWM、I²S、7816,LCD,Touch Sensor等接口, 支持多种硬件加解密算法。此外,该芯片MCU含有安全内核,支持代码安全权限设置,全系统支持固件加密存储,固件签名,安全调试,安全升级等各种安全措施,提升产品安全特性。

本文档主要描述W800芯片内部结构,各功能模块信息以及详细寄存器使用信息;是开发者开发驱动程序、应用程序的主要参考资料。联盛德微电子提供的SDK中有各种功能的开源实现,开发者可以参考对应驱动程序、应用程序示例,以增加对芯片功能和寄存器描述的理解。本文档没有对Wi-Fi/BT部分的寄存器描述。

参考资料

W800 芯片封装参数、电气特性、射频参数等信息,请参考《W800芯片产品规格书》 ;

W800芯片集成了ROM程序,ROM程序提供了下载固件,MAC地址读写、Wi-Fi参数读写等功能,详细信息请参考《WM_W800_ROM功能简述》 ;

W800芯片内置了2Mbytes QFlash存储器,作为代码以及参数的存储空间。本文档提供了QFlash基本操作信息。如有超出本文档范围的需求,需要参考QFlash手册;

W800芯片采用杭州平头哥 XT804 核心,804相关的功能介绍、开发资料等可以参考平头哥公司发布信息;

更多信息请参考联盛德微电子网站(http://www.winnermicro.com/)。

特征

  • 芯片封装

    • QFN32封装,4mm x 4mm。

  • 芯片集成度

    • 集成XT804处理器,最高240MHz

    • 集成288KB SRAM

    • 集成2MB FLASH

    • 集成8通道DMA控制器,支持16个硬件申请,支持软件链表管理

    • 集成PA/LNA/TR-Switch

    • 集成32.768KHz时钟振荡器

    • 集成电压检测电路

    • 集成LDO

    • 集成上电复位电路

  • 芯片接口

    • 集成1个SDIO2.0 Device控制器,支持SDIO 1位/4位/SPI三种操作模式,工作时钟范围0~50MHz

    • 集成 1个 SDIO 2.0 HOST控制器,支持SDIO 与 SD卡操作,工作时钟范围0~50MHz

    • 集成1个QSPI PSRAM 接口,支持最大 64MB 容量PSRAM,最高工作时钟频率80MHz;

    • 集成5个UART接口,支持RTS/CTS,波特率范围1200bps~2Mbps

    • 集成1个高速SPI从设备接口,工作时钟范围0~50MHz

    • 集成1个SPI主/从接口,主设备工作时钟最高为20MHz,从设备支持最高6Mbps数据传输速率

    • 集成一个I2C控制器,支持100/400Kbps速率

    • 集成PWM控制器,支持5路PWM,单独输出或者2路PWM输入。最高输出频率20MHz,最高输入频率20MHz

    • 集成双工I2S控制器,支持32KHz到192KHz I2S接口编解码

    • 集成1个7816接口,兼容UART接口支持 ISO-7816-3 T=0.T=1 模式;支持EVM2000协议

    • 支持多种硬件加解密模式,包括RSA/AES/RC4/DES/3DES/RC4/SHA1/MD5/CRC8/CRC16/CRC32/TRNG

    • 集成 1路差分,或者两路单端12bit ADC 接口;

    • 集成11路 Touch Sensor;

    • 支持最多17个GPIO口,每个IO口都有丰富的复用关系。具备输入输出配置选项。

  • WIFI协议与功能

    • 支持GB15629.11-2006、IEEE802.11 b/g/n;

    • 支持WMM/WMM-PS/WPA/WPA2/WPS

    • 支持WiFi Direct;

    • 支持EDCA信道接入方式;

    • 支持20/40M带宽工作模式;

    • 支持STBC、GreenField、Short-GI、支持反向传输;

    • 支持RIFS帧间隔;

    • 支持AMPDU、AMSDU;

    • 支持802.11n MCS 0~7、MCS32物理层传输速率档位,传输速率最高到150Mbps;

    • 支持HT-immediate Compressed BlockAck、nornal ACK、no ACK应答方式;

    • 支持CTS to self;

    • 支持AP功能;AP和STA同时使用;

    • 在BSS网络中,支持多个组播网络,并且支持各个组播网络加密方式不同,最多可以支持总和为32个的组播网络和入网STA加密;

    • BSS网络支持做为AP使用时,支持站点与组的总和为32个;

    • 接收灵敏度:

    • 支持多种不同的接收帧过滤选项;

    • 支持监听功能;

  • 蓝牙协议与功能

    • 集成蓝牙基带处理器/协处理器,支持BT/BLE4.2协议

    • 支持DR/EDR 各种速率;

    • 支持BLE 1Mbps 速率;

    • 供电与功耗

    • 3.3V单电源供电;

    • 支持Wi-Fi节能模式功耗管理;

    • 支持工作、睡眠、待机、关机工作模式;

    • 待机功耗小于15uA;

概述

本芯片是一款支持多接口、多协议的无线局域网802.11n(1T1R)的SOC芯片。该SOC芯片集成射频收发前端RF Transceiver,CMOS PA功率放大器,基带处理器/媒体访问控制,SDIO、SPI、UART、GPIO等接口的低功耗WLAN芯片。

W800芯片支持GB15629.11-2006、IEEE802.11 b/g/ n协议,并且支持STBC、Green Field、Short-GI、反向传输、RIFS帧间隔、AMPDU、AMSDU、T-immediate Compressed Block Ack、normal ACK、no ACK、CTS to self等丰富的协议以及操作。

W800芯片片内集成了射频收发前端、A/D和D/A转换器。它支持DSSS(直接序列扩频)以及OFDM(正交频分复用)调制模式,具备数据解扰能力,支持多种不同的数据传输速率。在收发器的模拟前端配备的收发AGC功能使得芯片系统能够获得最佳的性能。W800芯片还包含了内置增强信号监测器,可以很大程度上消除 多径效应的影响。

W800芯片在安全方面,不仅支持国家标准的WAPI加密,还支持国际标准WEP、TKIP、CCMP加密,这些硬件组件使得基于该芯片的数据传输系统在进行保密通信时仍然能够获得与非加密通信时相近的数据传输性能。

W800芯片除了支持IEEE802.11以及Wi-Fi协议规定的节能操作外,还支持用户定制的节能方案。芯片支持工作、睡眠、待机、关机四种工作模式,从而使整个系统实现低功耗,并方便用户根据自身的使用场景定义不同的节能方案。

W800芯片集成了高性能的32位嵌入式处理器,大量的内存资源,以及丰富的外设接口,便于使用者很容易的将芯片应用于特定产品的二次开发工作。

W800芯片支持AP功能,可以实现同时组建5个SSID网络,实现5个独立AP的功能。支持建立多组播网络功能。可以实现作为STA加入别的网络的同时,自己又作为AP建立BSS网络的功能。

W800芯片支持WPS方式,从而让用户采用一键式操作即可以实现加密的完全网络,保证信息的安全性。

W800芯片多功能、高集成度保证了WLAN系统不需要过多的片外电路和外部存储器。

芯片结构

芯片结构

下图描述W800芯片的整体结构,核心部分包括XT804 CPU,288KB SRAM和20KB ROM存储空间。PMU部分作为芯片的常供电模块提供了上电时序管理,起振时钟,实时时钟功能等。提供了丰富的外设功能和硬件加解密功能。Wi-Fi部分集成了MAC,BB和RF。

图 1 W800芯片结构图

图 1 W800芯片结构图

总线结构

W800 芯片由两级总线构成,如下图所示

图 2 W800总线结构图

图 2 W800总线结构图

(1)AHB-1 总线

本级总线有四个主设备-即XT804,DMA,GPSEC以及5个从设备。

XT804 是面向控制领域的32 位高能效嵌入式CPU 核, 采用16/32 位混合编码指令系统,设计了精简高效的3 级流水线。

XT804提供多种可配置功能,包括硬件浮点单元、片上高速缓存、DSP 加速单元、可信防护技术、片上紧耦合IP 等,用户可根据应用需要进行配置。此外,XT804 提供多总线接口,支持系统总线、指令总线、数据总线的灵活配置。XT804 针对中断响应做了特殊的加速,中断响应延时仅需13 个周期。总线时钟最快工作在240MHz频率,可以配置为240/160/120/80/40MHz,或更低。

表 1 AHB-1 总线主设备列表

主设备

功能

CPU

完成芯片寄存器配置,存储器管理与使用,以及完整的802.11MAC 协议。最高运行频率240MHz

DMA

支持链表结构的独立的8通道DMA模块,支持片上16个硬件DMA请求源。

GPSEC

通用加密模块,支持DES/3DESSHA1/AES/MD5/RC4/CRC/PRDN。自动完成指定内存空间内的数据块加密并回写。

表 2 AHB-1 总线从设备列表

从设备

功能

ROM

ROM用来存放CPU上电后的初始化固件。主要完成芯片寄存器空间的初始配置等工作。在完成上述工作后,将CPU 控制权交给FLASH中存储的固件。

AHB2AHB

完成CPU总线时钟域到BusMatrix2总线时钟域主设备访问的转 换。要求时钟域必须同源,且CPU时钟与BusMatrix2时钟频率的比例为M:1,M为大于等于1的整数。

FLASH

存储固件代码以及运行参数。

SRAM 160KB

可用于存放指令或数据,固件可以根据需要使用该存储器。

RSA

支持最长2048bit的RSA加解密运算

GPSEC

通用加密/解密模块,支持SHA1/AES/MD5/RC4/CRC/TRNG。自动完成指定内存空间内的数据块加密/解密并回写。

SDIO_HOST

SDIO 2.0 标准的SDIO HOST控制器;可通过此接口访问SDIO接口时钟为总线时钟分频得到,最高支持50MHz。

PSRAM_CTRL

QSPI 接口的PSRAM控制器。可通过此控制器访问外接PSRAM。QSPI接口时钟由总线时钟分频得到,最高支持80MHz时钟。

(2)AHB-2总线

本条总线有4个主设备,3个从设备,使用crossbar连接结构,能够实现不同主设备对不同从设备的同时访问,从而加大带宽。总线时钟最快工作在40MHz频率,可以根据需要配置为更低。

表 3 AHB-2总线主设备列表

主设备

功能

MAC

802.11MAC控制协议处理模块。对总线的操作主要包括发送读取数据,接收写数据,以及发送完成描述符的回写等操作。

SEC

安全模块,完成发送接收数据加解密和搬移。发送时,将发送数据和MAC 描述符搬移至指定位置,并完成加密;接收时,将接收数据和MAC接收描 述符搬移至指定位置,并完成解密。

AHB2AHB

AHB-1总线到AHB-2总线的总线主设备访问的转换。

SDIO/HSPI

将主机通过SDIO2.0设备控制器或高速SPI从设备控制器对芯片的 访问转换为AHB总线信号,并访问内容存储器和寄存器空间。

各主设备采用固定优先级,自上而下优先级递减。

表 4 AHB-2总线从设备列表

从设备

功能

SRAM 128KB

用于存储上行和下行数据缓存,SDIO/SPI/UART接口使用此RAM用作数据缓存

Configuration

寄存器配置空间,高速模块配置寄存器在这里统一编址。

APB

所有低速模块访问空间,各种低速模块使用APB总线连接。

BT_CORE

蓝牙控制器。

时钟结构

W800 使用24/40MHz晶体作为SoC时钟源,片内内置1个DPLL 输出480MHz,供给CPU,系统总线,数据总线及WiFi系统使用;片内另外内置32.768KHZ RC振荡器,供PMU 及LCD 模块使用。时钟结构概括图如下图所示。

图 3 W800 时钟结构

图 3 W800 时钟结构

地址空间

W800 地址映射

W800 地址映射

XT804支持4G存储空间,如上图所示分为6个block,分别为代码区,内存区,片上外设,片外存储区,片外外设和系统外设区。根据需求,w800片内存储空间如图三所示映射到前三区。

表 5 总线设备地址空间详细划分

总线从设备

BootMode=0

地址空间细分

备注

ROM

0x0000 0000 ~ 0x0004 FFF

存放固化的固件代码

FLASH

0x0800 0000 ~ 0x0FFF FFFF

作为专用的指令存储器。

SRAM

0x2000 0000 ~ 0x2002 7FFF

固件内存和指令存储区

Mac RAM

0x2002 8000 ~ 0x2004 7FFF

SDIO/H-SPI/UART 数据缓存

PSRAM

0x3000 000~0x30800000

外设内存

CONFIG

0x4000 0000 ~ 0x4000 2FFF

0x4000 0000 ~ 0x4000 05FF

RSA配置空间

0x4000 0600 ~ 0x4000 07FF

GPSEC配置空间

0x4000 0800 ~ 0x4000 09FF

DMA配置空间

0x4000 0A00 ~ 0x4000 0CFF

SDIO_HOST 配置空间

0x4000 0D00 ~ 0x4000 0DFF

PMU配置空间

0x4000 0E00 ~ 0x4000 0EFF

Clock与Reset配置空间

0x4000 0F00 ~ 0x4000 0FFF

MacPHY Router配置空间

0x4000 1000 ~ 0x4000 13FF

BBP配置空间

0x4000 1400 ~ 0x4000 17FF

MAC配置空间

0x4000 1800 ~ 0x4000 1FFF

SEC配置空间

0x4000 2000 ~ 0x4000 21FF

FLASH Controller配置空间

0x4000 2200 ~ 0x4000 23FF

PSRAM_CTRL 配置空间

0x4000 2400 ~ 0x4000 25FF

SDIO Slave配置空间

0x4000 2600 ~ 0x4000 27FF

H-SPI配置空间

0x4000 2800 ~ 0x4000 29FF

SD Wrapper配置空间

0x4000 2A00 ~ 0x4000 A9FF

BT Core 配置空间

0x4000 B000 ~ 0x4000 B0FF

SASC-B1一级总线内存安全配置模块

0x4000 B100 ~ 0x4000 B1FF

SASC-Flash Flash安全配置模块

0x4000 B200 ~ 0x4000 B2FF

SASC-B2 二级总线内存安全配置模块

APB

0x4001 0000 ~ 0x 4001 C000

0x4001 0000 ~ 0x4001 01FF

I2C master

0x4001 0200 ~ 0x4001 03FF

Sigma ADC

0x4001 0400 ~ 0x4001 07FF

SPI master

0x4001 0600 ~ 0x4001 07FF

UART0

0x4001 0800 ~ 0x4001 09FF

UART1

0x4001 0A00 ~ 0x4001 0BFF

UART2

0x4001 0C00 ~ 0x4001 0DFF

UART3

0x4001 0E00 ~ 0x4001 0FFF

UART4

0x4001 1000 ~ 0x4001 11FF

UART5

0x4001 1200 ~ 0x4001 13FF

GPIO-A

0x4001 1400 ~ 0x4001 15FF

GPIO-B

0x4001 1600 ~ 0x4001 17FF

WatchDog

0x4001 1800 ~ 0x4001 19FF

Timer

0x4001 1A00 ~ 0x4001 1BFF

RF_Controller

0x4001 1C00 ~ 0x4001 1DFF

LCD

0x4001 1E00 ~ 0x4001 1FFF

PWM

0x4001 2000 ~ 0x4001 22FF

I2S

0x4001 2200 ~ 0x4001 23FF

BT-modem

0x4001 2400 ~ 0x4001 25FF

Touch Sensor

0x4001 2600 ~ 0x4001 25FF

TIPC Interface安全设置

0x4001 4000 ~ 0x4000 BFFF

RF_BIST DAC发射内存

0x4001 C000 ~ 0x4003 BFFF

RF_BIST ADC 接收内存

0x4001 3C00 ~ 0x5FFF FFFF

RSV

SRAM

W800内置288KB SRAM。其中160KB 挂载一级AHB总线上,128KB挂载在二级AHB总线上。CPU等一级总线设备可以访问所有内存区域,但是二级总线上的设备只能访问二级总线上128KB的内存。

Flash

QFlash

W800内部集成2MBytes QFlash。通过芯片内部集成32KB cache 实现XIP方式在QFlash上执行程序。 程序运行过程中,CPU首先从Cache中读取指令,当不能获取指令时,以8Bytes一行的方式从QFlash读取指令,存入Cache内。因此,当持续运行代码大小小于32K时,C PU将无需从QFlash读取指令,此时CPU可以运行在更高的频率。上述方式为读取指令操作方式,整个Image的RO段都会以这种方式操作。此过程用户无需干预。

QFlash也可以存储数据,当用户程序需要读写QFlash内数据时,需要通过内置的QFlash控制器进行操作,QFlash提供了相应的地址、指令等寄存器来协助实现用户想要的操作。具体描述请参考QFlash控制器对应章节。

用户需要注意的是,程序进行读取或者写入数据时,无需进行状态判断、等待等操作,因为QFlash控制器本身会进行判断。当QFlash控制器返回时,表明读取或者写入已经完成。

SPI Flash

W800芯片除了支持6PIN的QFlash接口之外(内置PIN,未封装),还支持低速SPI接口访问。该SPI接口的最高工作频率可达20MHz,支持主从功能,详细描述参考SPI接口对应章节。

PSRAM

W800内置SPI/QSPI接口的PSRAM控制器,支持外置最大容量64Mb的PSRAM设备访问,提供总线方式的PSRAM读写擦操作。最高读写速度80MHz。当存储容量需要扩充时,可以使用片外PSRAM扩充代码存储空间或者数据存储空间。PSRAM同样支持XIP方式执行程序,CPU Cache同样支持缓存PSRAM中数据。

启动配置

W800芯片上电后,CPU会启动执行ROM中的固件,加载Flash中指定地址的用户Image。

ROM固件在开始运行时会读取BootMode(PA0)引脚,根据引脚的信号判断进入启动状态:

表 6 启动配置

BootMode

启动条件

启动模式

正常启动流程

持续<30ms,快速测试模式无效

正常启动流程

持续>=30ms

进入功能模式

注:测试模式:芯片测试功能,用户不可操作。

功能模式:进入rom实现的基本功能,例如:下载固件,烧写mac地址等,详细信息参考《wm_w800_rom功能简述.pdf》

通常,BootMode引脚应该用于生产或者调试阶段。在生产阶段,用户通过将BootMode引脚持续拉低30ms以上,进入功能模式,可以快速进行烧录Flash 工作。

在产品返工或者维修的场景中,在芯片未进入“最高安全等级”(关于安全等级的描述请参考《WM_W800_ROM功能简述》)时,可以通过该引脚进入功能模式,擦除旧的Image,写入新的Image。

在调试阶段,无论固件出现任何故障,都可以通过将BootMode引脚持续拉低30ms以上,进入串口下载功能,烧录新的固件。

时钟与复位模块

功能概述

时钟与复位模块完成了软件对芯片时钟和复位系统的控制。时钟控制包括时钟变频,时钟关断以及自适应门控;复位控制包括系统以及子模块的软复位控制。

主要特性

  • 支持各模块时钟关断

  • 支持部分模块时钟自适应关断

  • 支持各模块软件复位

  • 支持CPU频率设置

  • 支持ADC/DAC回环测试

  • 支持I2S时钟设置

功能描述

时钟门控

通过配置时钟门控使能寄存器CLK_GATE_EN可以控制指定功能的时钟关断,从而达到关断某一模块功能的目的。

为了提供固件对系统功耗控制的灵活性,时钟与复位模块提供了系统内各模块的时钟门控功能。当关闭相应模块的时钟时,该模块的数字逻辑与时钟树将停止工作,能够降低系统的动态功耗。

具体各模块的开关对应寄存器SW_CLKG_EN的详细描述。

时钟自适应关断

芯片依据内部的某些状态的迁移,自适应关断某些功能模块的时钟。

用户请不要更改配置,否则可能会在配置PMU功能时导致系统异常。

功能复位

芯片提供了各子系统的软复位功能,通过设置SW_RST_CTRL相应BIT为0可以达到子系统复位。

但是,复位状态不会自动清除,要恢复正常工作需将SW_RST_CTRL相应BIT位置1。

软复位功能并不会复位CPU及WatchDog。

该寄存器中,对APB/BUS1/BUS2(对应APB总线,系统总线及数据总线)的复位操作不推荐,会导致系统访问设备异常。

时钟分频

W800系统采用40MHz/24MHz 晶体作为系统时钟源,系统内置DPLL,固定输出480MHz 时钟作为全系统的时钟源(如下图)。

图 4系统时钟分频关系

图 4系统时钟分频关系

系统总线的时钟与CPU时钟一致,数据总线的时钟固定为WLAN根时钟的1/4。

WLAN根时钟同时也是整个WLAN系统的时钟源头。

此模块中提供了设定CPU时钟与WLAN 根时钟的功能,供固件调节系统性能及功耗使用。

设置SYS_CLK_DIV寄存器的BIT[7:0]可以调整CPU时钟分频系数。CPU时钟分频的源时钟为DPLL的输出,固定为480MHz。CPU时钟分频系数默认值为6,即CPU 默认工作频率为480MHz的6分频,即80MHz。当需要调整CPU所需时钟时,可以重新配置本参数。

CLK_PERI 时钟提供SoC系统中加密模块的运行时钟的根时钟,以及某些接口的运行时钟的根时钟,比如PWM接口,I2S接口,Flash接口时钟。此时钟也由DPLL输出的480MHz分频得出。正常工作情况下应固定为3分频,得到CLK_PERI 根时钟 160MHz。由CLK_PERI 根时钟进行2分频,4分频得到80MHz和40MHz,提供给加密模块和接口模块使用。

设置SYS_CLK_DIV寄存器的BIT[15:8]可以调整WLAN时钟分频系数。默认分频因子为3,即对DPLL的480MHz输出3分频,得到160MHz时钟,作为根节点时钟送给WLAN(WLAN再继续分频得到更为详细的低频时钟供WLAN 系统使用。

注意:如果希望WLAN系统正常工作,WLAN根时钟需要保持在160MHz,否则WLAN系统将失效。

当不需要WLAN系统工作的时候,可以将WLAN根时钟降低,降低系统动态功耗。

在改变系统时钟配置的时候,需要注意:系统总线与数据总线的比例需要维持在M:1,其中M为整数,最小为1。在改变系统时钟配置时,也需要同时更新寄存器SYS_CLK_DIV的BIT [23:16], 设置正确的比例系数。否则,访问数据总线将得到异常数据。

SYS_CLK_SEL的[15:8]提供了设置SAR_ADC工作频率的分频因子,以40M为时钟源进行分频。分频系数即为所配分频值。

SYS_CLK_SEL的BIT[4]为配置RSA模块核心运算的时钟频率选择,可以选择80MHz或者160MHz。

BIT[5]为配置GPSEC模块核心运算的时钟频率选择,可以选择80MHz或者160MHz。

BIT[6]为配置FLASH模块对外总线的时钟频率选择,可以选择40MHz或者80MHz。

当需要重新配置cpu_clk_divider,wlan_clk_divider,bus2_syncdn_factor,sdadc_fdiv时,需要置位SYS_CLK_DIV的BIT[31],硬件自动更新上述四个参数到分频器,然后清零BIT[31]。

I2S_CLK_CTRL提供了I2S 模块的时钟配置功能。

调试功能控制

用户可以通过设置DEBUG_CTRL的值(SYS_CLK_SEL- BIT[16])来达到使能和禁用JTAG功能的目的。

寄存器描述

寄存器列表

表 7 时钟复位模块寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

软件时钟门控使能寄存器

SW_CLKG_EN

RW

软件配置模块是否关断时钟

0X0000_7FFF

0X0004

软件时钟掩码寄存器

SW_CLK_MASK

RW

软件配置模块是否自适应关断时钟

0X0000_007E

0X0008

保留

0X000C

软件复位控制寄存器

SW_RST_CTRL

RW

软件配置复位模块

0X01FF_FFFF

0X0010

时钟分频配置寄存器

SYS_CLK_DIV

RW

配置时钟分频比

0X0000_2212

0X0014

调试控制寄存器

DEBUG_CTRL

RW

配置ADC/DAC回环测试

0X0000_0000

0X0018

I2S时钟控制寄存器

I2S_CLK _ CTRL

RW

配置I2S时钟

0X0000_0000

0X001C

复位状态寄存器

RESET _ STATUS

RW

查看CPU软复位与Watchdog复位状态

0x0000_0000

软件时钟门控使能寄存器

表 8 软件时钟门控使能寄存器

访问

操作说明

复位值

[31:22]

RO

保留

[21]

RW

soft_touch_gate _en

配置 touch_sensor 模块时钟的门控,默认 touch_sensor 模块门控开启

0:touch_sensor 模块时钟关闭

1: touch_sensor时钟开启

1’b1

[20]

RW

soft_bt_gate_en

配置BT. / BLE模块时钟的门控,默认BT / BLE模块门控开启

0:BT/BLE模块时钟关闭

1: BT/BLE时钟开启

1’b1

[19]

RW

soft_qsram_gate_en

配置 qspi_ram 模块时钟的门控,默认 qspi_ram 模块门控开启

0:qspi_ram 模块时钟关闭

1: qspi_ram 时钟开启

1’b1

[18]

RW

soft_sdio_m_gate _en

配置 sdio_master 模块时钟的门控,默认 sdio_master 模块门控开启

0:sdio_master模块 时钟关闭

1: sdio_master时钟开启

1’b1

[17]

RW

soft_gpsec_gate _en

配置 gpsec 模块时钟的门控,默认 gpsec 模块门控开启

0:gpsec模块时钟关闭

1: gpsec时钟开启

1’b1

[16]

RW

soft_rsa_gate_en

配置 RSA 时钟的门控,默认 RSA 门控开启

0:RSA模块时钟关闭

1:RSA时钟开启

1’b1

[15]

RW

soft_i2s_gate_en

配置 i2s 时钟的门控,默认 i2s 门控开启

0:i2s时钟关闭

1:i2s时钟开启

1’b1

[14]

RW

soft_lcd_gate_en

配置 lcd 时钟的门控,默认 lcd 门控开启

0:lcd时钟关闭

1:lcd时钟开启

1’b1

[13]

RW

Soft_pwm_gate_en

配置 pwm 时钟的门控,默认 pwm 门控开启

0:pwm时钟关闭

1:pwm时钟开启

1’b1

[12]

RW

soft_sd_adc_gate _en

配置 sd_adc_时钟的门控,默认 sd_adc_门控开启

0:sd_adc_时钟关闭

1:sd_adc_时钟开启

1’b1

[11]

RW

soft_gpio_gate _en

配置 GPIO 时钟的门控,默认 GPIO 门控开启

0:GPIO时钟关闭

1:GPIO时钟开启

1’b1

[10]

RW

soft_timer_gate _en

配置 timer 时钟的门控,默认 timer 门控开启

0:timer时钟关闭

1:timer时钟开启

1’b1

[9]

RW

soft_rf_cfg_gate _ en:内部使用,请勿修改

配置 rf_cfg 时钟的门控,默认 rf_cfg 门控开启

1’b0:rf_cfg 时钟关闭

1’b1:rf_cfg 时钟开启

1’b1

[8]

RW

soft_dma_gate_en

表示供给 dma 时钟域的时钟是否关断

1’b0:dma 时钟关闭

1’b1:dma 时钟开启

1’b1

[7]

RW

soft_ls_spi_gate _en

配置低速 spi 时钟的门控,默认低速 spi 门控开启

1’b0:低速 spi 时钟关闭

1’b1:低速 spi 时钟开启

1’b1

[6]

RW

soft_uart5_gate _en

配置 uart5 的门控,默认 uart5 开启

0:uart5 关闭

1:uart5 开启

1’b1

[5]

RW

soft_uart4_gate _en

配置 uart4 的门控,默认 uart4 开启

0:uart4 关闭

1:uart4 开启

1’b1

[4]

RW

soft_uart3_gate _en

配置 uart3 的门控,默认 uart3 开启

0:uart3 关闭

1:uart3 开启

1’b1

[3]

RW

soft_uart2_gate _en

配置 uart2 的门控,默认 uart2 开启

0:uart2关闭

1:uart2开启

1’b1

[2]

RW

soft_uart1_gate _en

配置 uart1 时钟的门控,默认 uart1 门控开启

1’b0:uart1 时钟关闭

1’b1:uart1 时钟开启

1’b1

[1]

RW

soft_uart0_gate _en

配置 uart0 时钟的门控,默认 uart0 门控开启

1’b0:uart0 时钟关闭

1’b1:uart0 时钟开启

1’b1

[0]

RW

soft_i2c_gate_en

配置 i2c 时钟的门控,默认 i2c 门控开启

1’b0:i2c 时钟关闭

1’b1:i2c 时钟开启

1’b1

软件时钟掩码寄存器

表 9 软件时钟掩码寄存器

访问

操作说明

复位值

[6]

RW

soft_cpu_clk_gt _mask

表示供给CPU时钟域(包括CPU,bus1、ROM、SRAM )的时钟是否能够自适应的关断( 当CPU需要进入WFI 状态的时候,不要设置自适应关断

1’b0:允许自适应关断和开启

1’b1:不允许自适应关断和开启

1’b1

[5 : 2]

RW

保留, 内部使用,请勿修改

[1]

RW

soft_sdioahb_clk _gt _mask

表示供给sdio ahb时钟域的时钟是否能够自适应的关断

1’b0:允许自适应关断和开启

1’b1:不允许自适应关断和开启

1’b1

[0]

RW

soft_pmu_clk_gt _mask

pll输出的时钟后有一个门控单元,采用该寄存器配置,表示是否允许被PMU关断。

1’b0:允许PMU关断该门控单元,从而关断时钟

1’b1:不允许PMU关断该门控单元

1’b0

软件复位控制寄存器

表 10 软件复位控制寄存器

访问

操作说明

复位值

[31]

RW

soft_touch _rst_n

软件复位 touch_sensor 模块

0:复位

1:复位释放

1’b1

[30]

RW

soft_rst_flash _n

软件复位Flash控制器模块

0:复位

1:复位释放

1’b1

[29]

RW

soft_rst_bt _n

软件复位BT模块

0:复位

1:复位释放

1’b1

[28]

RW

soft_rst_qspi _ram_n

软件复位qspi_ram模块

0:复位

1:复位释放

1’b1

[27]

RW

soft_rst_sdio_m_n

软件复位sdio_master模块

0:复位

1:复位释放

1’b1

[26]

RW

soft_rst_gpsec_n

软件复位gpsec模块

1’b0:复位

1’b1:复位释放

1’b1

[25]

RW

soft_rst_rsa_n

软件复位RSA模块

1’b0:复位

1’b1:复位释放

1’b1

[24]

RW

soft_rst_i2s_n

软件复位i2s模块

1’b0:复位

1’b1:复位释放

1’b1

[23]

RW

soft_rst_lcd_n

软件复位lcd模块

1’b0:复位

1’b1:复位释放

1’b1

[22]

RW

soft_rst_pwm_n

软件复位pwm模块

1’b0:复位

1’b1:复位释放

1’b1

[21]

RW

soft_rst_sar_adc_n

软件复位sar_adc模块

1’b0:复位

1’b1:复位释放

1’b1

[20]

RW

soft_rst_timer_n

软件复位timer模块

1’b0:复位

1’b1:复位释放

1’b1

[19]

RW

soft_rst_gpio_n

软件复位gpio模块

1’b0:复位

1’b1:复位释放

1’b1

[18]

RW

soft_rst_rf_cfg_n

软件复位配置RF的寄存器模块( 内部使用,请勿修改 )

1’b0:复位

1’b1:复位释放

1’b1

[17]

RW

soft_rst_spis_n

软件复位高速spi模块

1’b0:复位

1’b1:复位释放

1’b1

[16]

RW

soft_rst_spim_n

软件复位低速spi模块

1’b0:复位

1’b1:复位释放

1’b1

[15]

RW

soft_rst_uart5_n

软件复位片内uart5模块

1’b0:复位

1’b1:复位释放

1’b1

[14]

RW

soft_rst_uart4_n

软件复位片内uart4模块

1’b0:复位

1’b1:复位释放

1’b1

[13]

RW

soft_rst_uart3_n

软件复位片内uart3模块

1’b0:复位

1’b1:复位释放

1’b1

[12]

RW

soft_rst_uart2_n

软件复位片内uart2模块

1’b0:复位

1’b1:复位释放

1’b1

[11]

RW

soft_rst_uart1_n

软件复位片内uart1模块

1’b0:复位

1’b1:复位释放

1’b1

[10]

RW

soft_rst_uart0_n

软件复位片内uart0模块

1’b0:复位

1’b1:复位释放

1’b1

[9]

RW

soft_rst_i2c_n

软件复位片内i2c模块

1’b0:复位

1’b1:复位释放

1’b1

[8]

RW

soft_rst_bus2_n

软件复位片内bus2模块

1’b0:复位

1’b1:复位释放

1’b1

[7]

RW

soft_rst_bus1_n

软件复位片内bus1模块

1’b0:复位

1’b1:复位释放

1’b1

[6]

RW

soft_rst_apb_n

软件复位abp桥接模块

1’b0:复位

1’b1:复位释放

1’b1

[5]

RW

soft_rst_mem _mng_n

软件复位mem_mng模块( 内部使用,请勿修改 )

1’b0:复位

1’b1:复位释放

1’b1

[4]

RW

soft_rst_dma_n

软件复位dma模块

1’b0:复位

1’b1:复位释放

1’b1

[3]

RW

soft_rst_sdio _ahb_n

软件复位sdio ahb时钟域模块

1’b0:复位

1’b1:复位释放

1’b1

[2]

RW

soft_rst_sec_n

软件复位安全模块( 内部使用,请勿修改 )

1’b0:复位

1’b1:复位释放

1’b1

[1]

RW

soft_rst_mac_n

软件复位mac模块( 内部使用,请勿修改 )

1’b0:复位

1’b1:复位释放

1’b1

[0]

RW

soft_rst_bbp_n

软件复位bbp模块( 内部使用,请勿修改 )

1’b0:复位

1’b1:复位释放

1’b1

时钟分频配置寄存器

表 11 时钟分频配置寄存器

访问

操作说明

复位值

[31]

RW

divide_freq_en

当需要重新配置cpu_clk_divider ,wlan_clk_divider ,bus2_syncdn_factor,sdadc_fdiv 时,置位本寄存器,硬件自动更新上述四个参数到分频器,然后清零本寄存器。

1’b0:分频系数已生效

1’b1:要求硬件更新分频参数

注:此处配置分频因子时,当Divide_freq_en有效时 ,所有因子必须已经有效

1’b0

[30:28]

保留

[27:24]

RW

Peripheral _divider

160M时钟 分频因子:

以DPLL为时钟源进行分频。分频系数即为所配分频值。分频输出应为160MHz。DPLL

输出为480MHz,应配置为3 .

4’h3

[23: 16]

RW

bus2_syncdn _factor

bus1和bus2的时钟比例关系,应该为N:1

其中N为整数,在实际调整时,主要看CPU的工作频率和bus2 的时钟频率之比。

由于默认cpu采用80MHz时钟,bus2采用40MHz时钟,则N=2

8’h2

[15 : 8]

RW

wlan_clk_divider

从PLL出来的时钟分频后,送给wlan系统。本寄存器为分频因子,该因子>=2。

默认分频因子为3,即对pll的 480MHz输出3分频,得到1 60MHz时钟,作为根节点时钟 送给wlan(wlan在继续分 频得到更为详细的低频时钟);

注1:如需WLAN系统正常工作 ,此时钟需固定在160MHz; 如WLAN系统关闭,则此时钟可 降频节省功耗。此时钟不得配置高于160MHz。

注2:二级总线时钟及APB时钟 为此时钟四分频;

8’h3

[7 : 0]

RW

cpu_clk_divider

从PLL出来的时钟分频后,送给CPU。本寄存器为分频因子,该因子>=2。

默认分频因子为6,即复位释放后,对PLL输出的480MHz时钟6分频,送给cpu的是80MHz时钟。当需要调整cpu所需时钟时,可以重新配置本参数

8’h6

调试控制寄存器

表 12 时钟选择寄存器

访问

操作说明

复位值

[16]

RW

JTAG使能

1’b0: 禁止JTAG调试功能

1’b1: 使能JTAG调试功能

1’b0

[15:8]

RW

sd_adc_div

sigma-delta ADC 时钟分频因子:

以40MHz为时钟源进行分频。分频系数即为所配分频值。

配置此寄存器后必须配置寄存器clk_divider中Divide_freq_en才能生效;

8’d10

[7]

RW

RSV

1’b0

[6]

RW

qflash_clk_sel

QSPI_FLASH 时钟选择

1:使用80MHz;

0:使用40MHz;

1’b0

[5]

RW

gpsec_sel

GPSEC 时钟选择

1:使用160MHz:

0:使用80MHz;

1’b0

[4]

RW

rsa_sel

RSA 时钟选择

1:使用160MHz;

0:使用80MHz;

1’b0

[3:0]

RW

保留, 请勿修改

4’d0

I2S时钟控制寄存器

表 13 I2S时钟控制寄存器

访问

操作说明

复位值

[31:18]

保留

[17: 8]

RW

BCLKDIV

BCLK分配器:F_BCLK = F_I2SCLK / BCLKDIV

注意:如果未选择EXTAL_EN而使用内部PLL则F_I2SCLK =F_CPU (与CPU频率相同)。

假设F_CPU = 160MHz,启用WXTAL_EN时F_I2SCLK = 外部晶振频率,

BCLKDIV = round (F_I2SCLK/(Fs*W *F))

其中Fs是音频数据的采样频率,W是字宽;

数据为单声道时F = 1;

当数据为立体声时F = 2

例如,如果使用内部PLL且数据 宽度为24位,则格式为立体声格式,采样频率为128KHz,BCLKDIV应配置为(160 * 10e6 / 128 * 10e3 * 24 * 2)= 10’h1a。

10’b0

[7 : 2]

RW

MCLKDIV

如果选择外部时钟,则该MCLK分频器用于产生适当的MCLK频率。

F_mclk = F_I2SCLK / (2 * MCLKDIV);

当MCLKDIV = 0时F_I2SCLK是外部时钟 ;

当MCLKDIV >= 1时F_mclk = F_I2SCLK;

注意:F_mclk应配置为256 * fs,其中fs是采样频率。

6’b0

[1]

RW

MCLKEN

MCLK使能开关

1’b0:禁止MCLK

1’b1:使能MCLK

1’b0

[0]

RW

EXTAL_EN

外部时钟选择,选择使用内部I2S块时钟还是外部时钟

1’b0:内部时钟

1’b1:外部时钟

注意:使用外部时钟时,外部时钟必须为2 * N * 256 fs,其中fs为采样频率,N必须为整数。

1’b0

复位状态寄存器

表 14 复位状态寄存器

访问

操作说明

复位值

[31:18]

保留

[17: 8]

WO

CPU 软复位 状态清除

写1 清除 CPU soft Reset Status 状态。

1’b0

[7 : 2]

WO

Wdog 软复位 状态清除

写1 清除 Wdog Reset Status 状态。

1’b0

[1]

RO

CPU 软复位 状态

1: CPU 产生过软复位;

0: CPU 未产生软复位;

1’b

[0]

RO

Wdog 复位状态

1: Wdog 产生了Reset;

0:Wdpg 未产生Reset

1’b

DMA模块

功能概述

DMA用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何CPU操作的情况下通过DMA快速移动数据。这样节省的CPU资源,不影响CPU进行其他指令的操作。

DMA挂载在AHB总线上,最多支持8通道,16个硬件外设请求源,支持链表结构与寄存器控制。

主要特性

  • Amba2.0标准总线接口,8路DMA通道

  • 支持基于存储器链表结构的DMA操作

  • 支持16个硬件外设请求源

  • 支持1,4-burst操作模式

  • 支持byte、half-word,word为单位传输操作

  • 支持源、目的地址不变或顺序递增或可配置在预定义地址范围内循环操作

  • 支持内存到内存,内存到外设,外设到内存的数据传输方式

功能描述

DMA通道

W800共支持8路DMA通道,DMA通道互相不干涉,可以同时运行。请求不同的数据流可以选择不同的DMA通道。

每个DMA通道分配在不同的寄存器地址偏移段,可以直接选择相应通道的地址段进行配置使用即可。不同通道的寄存器配置方式完全一致。

表 15 DMA 地址分配

DMA基地址

0x4000 0800

DMA_CH0

偏移量(0x10~0x38)

DMA_CH1

偏移量(0x40~0x68)

DMA_CH2

偏移量(0x70~0x98)

DMA_CH7

偏移量(0x160~0x188)

DMA数据流

8路DMA通道能够实现源和目的之间单向数据传输链路。

DMA的源和目的地址可以设置为每次DMA操作完成之后不变、递增或循环三种模式:

  • DMA_CTRL[2:1]控制源地址每次DMA操作后变化方式;

  • DMA_CTRL[4:3]控制目的地址每次DMA操作后变化方式。

DMA可以设置byte、half-word、word的搬运单位,最终搬运数据的数量是搬运单位的整数倍,通过DMA_CTRL[6:5]来设置。

DMA可以通过burst设置每次搬运多少个单位的数据,通过DMA_CTRL[7]来选择一次搬运1或4个单位的数据,如果DMA_CTRL[6:5]设置为word,burst设置为4,则每次搬运4个word的数据。

DMA可以设置每次启动DMA传输的Byte个数,最大65535 Byte,通过DMA_CTRL[23:8]来设置。

DMA循环模式

DMA循环地址模式是指设置DMA的源和目的地址之后,数据搬运达到设定的循环边界之后,会跳转到循环起始地址,如此循环执行,直到到达设定的传输字节。

循环地址模式的源和目的地址需要用SRC_WRAP_ADDR和DEST_WRAP_ADDR寄存器来设定,并通过WRAP_SIZE来设定循环的长度值。

DMA传输模式

DMA支持3种传输模式:

  • 内存到内存

源地址和目的地址均配置成需要传输的内存地址,DMA_MODE[0]设置为0,软件方式。

  • 内存到外设

    源地址设置为内存地址,目的地址设置成外设地址,DMA_MODE[0]设置为1,硬件方式,DMA_MODE[5:2]选择所使用的外设。

  • 外设到内存

    源地址设置为外设地址,目的地址设置成内存地址,DMA_MODE[0]设置为1,硬件方式,DMA_MODE[5:2]选择所使用的外设。

DMA外设选择

当使用外设到内存或者内存到外设这种传输方式的时候,除了相应的外设需要设置为DMA TX或RX外,DMA_MODE[5:2]也需要选择对应的外设。

注意:因为UART口共有3个,在UART使用DMA的时候,还需要通过UART_CH[1:0]来选择对应的UART。

DMA链表模式

DMA支持链表工作模式。 通过链表模式,我们在DMA搬运当前链表内存数据的时候,可以提前向下一个链表中填充数据,DMA搬完当前链表之后,判断到下一个链表有效,可以直接搬运下一个链表的数据。通过链表的方式可以有效的提高DMA和CPU配合的效率。

链表操作方式:通过DMA_MODE[1]寄存器设置DMA为链表工作方式,再将DESC_ADDR寄存器设置为链表结构的起始地址,然后再通过CHNL_CTRL寄存器使能DMA。当DMA处理完成当前内存的搬移后,软件通过设置有效标志,通知DMA链表中依然存在有效的数据,DMA依据链表的有效标志处理下一个待 搬移数据。

DMA中断

DMA传输完成或者burst均可以产生中断,INT_MASK寄存器可以屏蔽DMA通道对应的中断。

当DMA相应中断产生后,可以通过INT_SRC寄存器查询当前中断的状态,指示当前是什么产生的中断,相应的状态位需要软件写1清0。

寄存器描述

寄存器列表

表 16 DMA寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

中断屏蔽寄存器

INT_MASK

RW

设置需要屏蔽的DMA中断

0X0000_FFFF

0X0004

中断状态寄存器

INT_SRC

RW

指示当前DMA的中断状态

0X0000_0000

0X0008

DMA channel选择寄存器

DMA_CH

RW

UART外设时选哪个UART

0X0000_0000

0X000C

保留

DMACHNL0 registers

0X0010

DMA源地址寄存器

SRC_ADDR

RW

DMA传输的源地址

0X0000_0000

0X0014

DMA目的地址寄存器

DEST_ADDR

RW

DMA传输的目的地址

0X0000_0000

0X0018

DMA循环源起始地址寄存器

SRC_WRAP _ADDR

RW

循环模式下DMA传输源地址

0X0000_0000

0X001C

DMA循环目的起始地址寄存器

DEST_WRA _ADDR

RW

循环模式下DMA传输目的地址

0X0000_0000

0X0020

DMA循环长度寄存器

WRAP_SIZE

RW

循环模式下DMA循环边界

0X0000_0000

0X0024

DMA通道控制寄存器

CHNL_CTRL

RW

当前通道DMA启动和停止

0X0000_0000

0X0028

DMA模式选择寄存器

DMA_MODE

RW

设置DMA的工作方式

0X0000_0000

0X002C

DMA数据流控制寄存器

DMA_CTRL

RW

设置DMA传输数据流

0X0000_0000

0X0030

DMA传输字节数寄存器

DMA_STATUS

RO

获取当前已传输的字节数

0X0000_0000

0X0034

DMA链表入口地址寄存器

DESC_ADDR

RW

DMA链表地址入口地址设置

0X0000_0000

0X0038

DMA当前目的地址寄存器

CUR_DEST _ADDR

RO

当前DMA操作的地址

0X0000_0000

DMA CHNL1 registers

0X0040 - 0X0068

同 DMA CHNL0 registers

DMA CHNL2 registers

0X0070 - 0X0098

同 DMA CHNL0 registers

DMA CHNL3 registers

0X00A0 -0X00C8

同 DMA CHNL0 registers

DMACHNL4registers

0X00D0 - 0X00F8

同 DMA CHNL0 registers

DMA CHNL5 registers

0X0100 - 0X0128

同 DMA CHNL0 registers

DMA CHNL6 registers

0X0130 - 0X0158

同 DMA CHNL0 registers

DMA CHNL7 registers

0X0160 - 0X0188

同 DMA CHNL0 registers

中断屏蔽寄存器

表 17 DMA 中断屏蔽寄存器

访问

操作说明

复位值

[31:16]

保留

[15]

RW

channel7 transfer_done中断屏蔽,高有效。

1’b1

[14]

RW

channel7 burst_done中断屏蔽,高有效。

1’b1

[13]

RW

channel6 transfer_done中断屏蔽,高有效。

1’b1

[12]

RW

channel6 burst_done中断屏蔽,高有效。

1’b1

[11]

RW

channel5 transfer_done中断屏蔽,高有效。

1’b1

[10]

RW

channel5 burst_done中断屏蔽,高有效。

1’b1

[9]

RW

channel4 transfer_done中断屏蔽,高有效。

1’b1

[8]

RW

channel4 burst_done中断屏蔽,高有效。

1’b1

[7]

RW

channel3 transfer_done中断屏蔽,高有效。

1’b1

[6]

RW

channel3 burst_done中断屏蔽,高有效。

1’b1

[5]

RW

channel2 transfer_done中断屏蔽,高有效。

1’b1

[4]

RW

channel2 burst_done中断屏蔽,高有效。

1’b1

[3]

RW

channel1 transfer_done中断屏蔽,高有效。

1’b1

[2]

RW

channel1 burst_done中断屏蔽,高有效。

1’b1

[1]

RW

channel0 transfer_done中断屏蔽,高有效。

1’b1

[0]

RW

channel0 burst_done中断屏蔽,高有效。

1’b1

中断状态寄存器

表 18 DMA 中断状态寄存器

访问

操作说明

复位值

[31:16]

保留

[15]

RW

channel7 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[14]

RW

channel7 burst_done中断状态,写1清0。DMA burst完成产生中断。

1’b0

[13]

RW

channel6 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[12]

RW

channel6 burst_done中断状态,写1清0。DMA burst完成产生中断。

1’b0

[11]

RW

channel5 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[10]

RW

channel5 burst_done中断状态, 写1清0。DMA burst完成产生中断。

1’b0

[9]

RW

channel4 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[8]

RW

channel4 burst_done中断状态, 写1清0。DMA burst完成产生中断。

1’b0

[7]

RW

channel3 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[6]

RW

channel3 burst_done中断状态,写1清0。DMA burst完成产生中断。

1’b0

[5]

RW

channel2 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[4]

RW

channel2 burst_done中断状态,写1清0。DMA burst完成产生中断。

1’b0

[3]

RW

channel1 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[2]

RW

channel1 burst_done中断状态,写1清0。DMA burst完成产生中断。

1’b0

[1]

RW

channel0 transfer_done中断状态,写1清0。DMA传输完成产生中断。

1’b0

[0]

RW

channel0 burst_done中断状态, 写1清0。DMA burst完成产生中断。

1’b0

UART选择寄存器

表 19 UART选择寄存器

访问

操作说明

复位值

[31: 24]

保留

[23:8]

RW

dma req clear:

对每bit 写1 清除对应的dma req 请求。自清。

如对bit 23写1 将清除 dma_sel 中第15个对应的dma请求;

对bit 8 写 1 将清除dma_sel中第0个dma请求-uart_rx_req;

16’d0

[2 : 0]

RW

Uart dma channel 选择:

3’d0: uart0 模块dma通道接入dma

3’d1: uart1 模块dma通道接入dma

3’d2: uart2/7816 模块dma通道接入dma

3’d3: uart3 模块dma通道接入dma

3’d4: uart4 模块dma通道接入dma

3’d5: uart5 模块dma通道接入dma

3’h0

DMA源地址寄存器

表 20 DMA源地址寄存器

访问

操作说明

复位值

[31: 0]

RW

非循环模式下,DMA搬运的源地址,外设地址或内存地址

32’h0

DMA目的地址寄存器

表 21 DMA目的地址寄存器

访问

操作说明

复位值

[31: 0]

RW

非循环模式下,DMA搬运的目的地址,外设地址或内存地址

32’h0

DMA循环源起始地址寄存器

表 22 DMA循环源起始地址寄存器

访问

操作说明

复位值

[31: 0]

RW

循环模式下,DMA搬运的源地址的起始地址,外设地址或内存地址

32’h0

DMA循环目的起始地址寄存器

表 23 DMA循环目的起始地址寄存器

访问

操作说明

复位值

[31: 0]

RW

循环模式下,DMA搬运的目的地址的起始地址,外设地址或内存地址

32’h0

DMA循环长度寄存器

表 24 DMA循环长度寄存器

访问

操作说明

复位值

[31:16]

RW

循环模式下,DMA目的地址循环长度。

DMA从起始地址依次递增搬运数据,当搬运数据字节数达到此设定值之后,会跳转到循环起始地址,从起始地址开始继续搬运数据

16’h0

[15: 0]

RW

循环模式下,DMA源地址循环长度。

16’h0

DMA通道控制寄存器

表 25 DMA通道控制寄存器

访问

操作说明

复位值

[31: 2]

保留

[1]

RW

dma_stop

停止dma操作,高有效。

DMA会在完成当前burst操作后停止,并同时清除chnl_on。软件应根据chnl_on为0确定dma已经完全停止。

1’b0

[0]

RW

chnl_on

启动当前通道DMA转换,高有效。

Dma完成后转换或设置停止后,自动清0。

1’b0

DMA模式选择寄存器

表 26 DMA模式选择寄存器

访问

操作说明

复位值

[31: 7]

保留

[6]

RW

chain_link_en

链表方式下有效,表示dma在处理完第一个链表后,是否继续读取和处理后续链表。

如果为1,则更新链表中的next_desc_addr,并继续 读取下一个链表,直到链表中vld为0;如果为0,则处理完成当前链表后即停止。

1’b0

[5 : 2]

RW

dma_sel

16个dma_req的选择。

4’d0:uart rx dma req

4’d1:uart tx dma req

4’d2:pwm_cap0_req

4’d3:pwm_cap1_req

4’d4:LS_SPI rx dma req

4’d5:LS_SPI tx dma req

4’d6:SD_ADC chnl0 req

4’d7:SD_ADC chnl1 req

4’d8:SD_ADC chnl2 req

4’d9:SD_ADC chnl3 req

4’d10: I2S RX req

4’d11: I2S TX req

4’d12: SDIO_HOST req

4’h0

[1]

RW

chain_mode

1’b0:使用普通模式

1’b1:使用链表模式

1’b0

[0]

RW

dma_mode

1’b0:软件方式。

1’b1:硬件方式。

1’b0

DMA数据流控制寄存器

表 27 DMA数据流控制寄存器

访问

操作说明

复位值

[31:24]

保留

[23: 8]

RW

total_byte

总共需要操作的byte个数。需要与data_size配置相一致,即若果为字操作,则应该为配置为4的整数倍;如果为半字操作 ,则应该配置为2的整数倍。

16’h0

[7]

RW

burst_size

设置DMA每次搬运多少个单位的数据

1’b0:burst为1

1’b1:burst为4

当最后一次burst大小超过剩余传输的个数时,使用burst大小为剩余数据的大小。

1’b0

[6 : 5]

RW

data_size

设置DMA的搬运单位

2’h0:byte

2’h1:half_word

2’h2:word

2’h3:保留

2’h0

[4 : 3]

RW

dest_addr_inc

2’h0:每次操作后目的地址不变;

2’h1:每次操作后目的地址自动累加。

2’h2:保留

2’h3:循环操作,每次操作后目的地址自动累加,到达定义的循 环边界跳转到循环起始地址。

2’h0

[2 : 1]

RW

src_addr_inc

2’h0:每次操作后源地址不变 ;

2’h1:每次操作后源地址自动 累加。

2’h2:保留

2’h3:循环操作,每次操作后源地址自动累加,到达定义的循环边界跳转到循环起始地址。

2’h0

[0]

RW

auto_reload

当完成当前DMA搬运后,自动按当前DMA配置重新下一次DMA搬运。

1’b0

DMA传输字节数寄存器

表 28 DMA传输字节数寄存器

访问

操作说明

复位值

[31:16]

保留

[15: 0]

RW

transfer_cnt

当前传输的字节个数。

每次重新开启dma(chnl_on置1)清0,并重新开始计数。

16’h0

DMA链表入口地址寄存器

表 29 DMA链表入口地址寄存器

访问

操作说明

复位值

[31: 0]

RW

desc_addr

链表使能时,作为链表的入口地址。每传输完成一次链表后,将下一个链表的基地址更新至此寄存器。

32’h0

DMA当前目的地址寄存器

表 30 DMA当前目的地址寄存器

访问

操作说明

复位值

[31: 0]

RO

current_dest_addr

当前DMA操作目的地址。

当软件停止dma时,可以通过查看此寄存器获悉dma将要操作的目的地址。

32’h0

通用硬件加密模块

功能概述

加密模块自动完成指定长度的源地址空间数据的加密,完成后自动将加密数据回写到指定的目的地址空间;支持SHA1/MD5/RC4/DES/3DES/AES/CRC/TRNG。

主要特征

  • 支持SHA1/MD5/RC4/DES/3DES/AES/CRC/TRNG加密算法

  • DES/3DES支持ECB和CBC两种模式

  • AES支持ECB、CBC和CTR三种模式

  • CRC支持CRC8、CRC16_MODBUS、CRC16_CCITT和CRC32四种模式

  • CRC支持输入/输出反向

  • SHA1/MD5/CRC支持连续多包加密

  • 内置真随机数发生器,也支持seed种子产生伪随机数

功能描述

SHA1加密

可对连续多包数据进行硬件SHA1计算,计算结果存在寄存器中,上一包的加密结果可以作为下一包的初始值。

MD5加密

可对连续多包数据进行硬件MD5计算,计算结果存在寄存器中,上一包的加密结果可以作为下一包的初始值。

RC4加密

支持RC4加密和解密。

DES加密

支持DES加密和解密,支持ECB和CBC两种模式。

3DES加密

支持3DES加密和解密,支持ECB和CBC两种模式。

AES加密

支持AES加密和解密,支持ECB、CBC和CTR三种模式。

CRC加密

可对连续多包数据进行硬件CRC计算,计算结果存在寄存器中,上一包的加密结果可以作为下一包的初始值,支持CRC8、CRC16_MODBUS、CRC16_CCITT和CRC32四种模式,支持输入/输出反向。

CRC32计算公式如下:

1、CRC-32: 0x04C11DB7

X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1

常用于ZIP, RAR, IEEE 802 LAN/FDDI, IEEE 1394, PPP-FCS等协议。

2、CRC-16: 支持两种多项式

2.1: 0X1021

X16 + X12 + X5 + 1

常用于ISO HDLC, ITU X.25, V.34/V.41/V.42, PPP-FCS CCITT等协议。

2.2: 0X8005

X16 + X15 + X2 + 1

常用于USB, ANSI X3.28, SIA DC-07等协议。

3、CRC-8:0X207

x8+x2+x1+1

TRNG随机数发生器

W800 系统中集成真随机数发生器模块。分为模拟模块与数字后处理模块。模拟模块输出随机时钟ad_trng_clks 与随机数 ad_trng_dout, 数字后处理模块用来消除随机数的偏差与自相关性。相关控制寄存器在GPSEC 寄存器列表中。

基本操作流程如下:

  1. 使能TRNG_EN,设置TRNG_SEL 为1,使得GPSEC 寄存器0x48 显示TRNG 的输出值。此时模拟模块开始输出随机时钟及随机信号。前8个时钟采样得到的信号作为LFSR的初始状态初始化LFSR 链,后面每个随机时钟采样得到的数据经过XOR CHAIN 及LFSR 寄存器的后处理,移位存储到寄存器TRNG_RANDOM 中。

  2. 软件可通过GPSEC 寄存器0x48 读取随机值。寄存器TRNG_DIG_BYPASS 设置为1时数字后处理模块停止工作,直接将模拟模块的输出值存储到结果寄存器TRNG_RANDOM 中。

寄存器描述

寄存器列表

表 31 加密模块寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

源地址寄存器

SRC_ADDR

RW

RC4 / SHA1 / AES / DES / 3DES / CRC / MD5复用源地址

0X0000_0000

0X0004

目的地址寄存器

DEST_ADDR

RW

RC4 / AES / DES / 3DES复用目的地址

0X0000_0000

0X0008

配置寄存器

GPSEC_CFG

RW

通用硬件加密模块配置寄存器

0X0000_0000

0X000C

控制寄存器

GPSEC_CTRL

RW

通用硬件加密模块控制寄存器

0X0000_0000

0X0010

秘钥0低位寄存器

KEY00

RW

ey0低32位第一个输入key(RC4 / AES / DES / 3DES),复用CRC Ci

0X0000_0000

0X0014

秘钥0高位寄存器

KEY01

RW

Key0高32位第一个输入key(RC4 / AES / DES / 3DES)

0X0000_0000

0X0018

秘钥1低位寄存器

KEY10

RW

Key1低32位第二个输入key(RC4 / AES // 3DES)

0X0000_0000

0X001C

秘钥1高位寄存器

KEY11

header-rows

Key1高32位第二个输入key(RC4 / AES // 3DES)

0X0000_0000

0X0020

秘钥2低位寄存器

KEY20

RW

Key2低32位第三个输入key(3DES),复用iv1低32位输入初始向量(AES)

0X0000_0000

0X0024

秘钥2高位寄存器

KEY21

RW

Key2高32位第三个输入key(3DES),复用iv1高32位输入初始向量(AES)

0X0000_0000

0X0028

初始向量0低位寄存器

IV00

RW

IV0低32位输入初始向量(AES / DES / 3DES)

0X0000_0000

0X002C

初始向量0高位寄存器

IV01

RW

IV0高32位输入初始向量(AES / DES / 3DES)

0X0000_0000

0X0030

状态寄存器

GPSEC_STS

RW

通用硬件加密模块状态寄存器

0X0000_0000

0X0034

摘要0寄存器

SHA1-DIGEST0

RW

sha1-digest0 / MD5- digest0

0X6745_2301

0X0038

摘要1寄存器

SHA1-DIGEST1

RW

sha1-digest1 / MD5- digest1

0XEFCD_AB89

0X003C

摘要2寄存器

SHA1-DIGEST2

RW

sha1-digest2 / MD5- digest2

0X98BA_DCFE

0X0040

摘要3寄存器

SHA1-DIGEST3

RW

sha1-digest3 / MD5- digest3

0X1032_5476

0X0044

摘要4寄存器

SHA1-DIGEST4

RW

sha1-digest4 / CRC

0XC3D2_E1F0

0X0048

RNG_result

RNG_RESULT

RW

RNG输出

0X0000_0000

0X004C

秘钥3低位寄存器

Key30

RW

Key3低32位第三个输入key(RC4的256bit 模式)

0X0000_0000

0X0050

秘钥3低位寄存器

Key31

RW

Key3高32位第三个输入key(RC4的256bit 模式)

0X0000_0000

0X0054

TRNG配置

RNG_CR

RW

真随机数发生器配置选择

0X40

配置寄存器

表 32 加密模块配置寄存器

访问

操作说明

复位值

[31]

RW

RC4_128_256

0:标志RC4加密/解密是按照 128bit块长度进行;

1:标志RC4加密/解密是按照 256bit块长度进行。

1’b0

[30]

RW

RNG start

1’b0:不启动RNG

1’b1:启动RNG

1’b0

[29]

RW

RNG Load_seed

硬件自动清0

1’b0:随机数发生器会默认以零为种子,产生相应位数的随机数

1’b1:种子加载完成以后开始 生成随机数

1’b0

[28]

RW

RNG switch

控制生成随机数的位数,

1’b0:16位

1’b1:32位

1’b0

[27]

RW

des_soft_reset

des软复位完成后硬件自动清0

1’b0:不产生软复位且不改变当前状态

1’b1:加密算法被软件复位为初始状态

1’b0

[26]

RW

aes_soft_reset

aes软复位完成后硬件自动清0

1’b0:不产生软复位且不改变当前状态

1’b1:加密算法被软件复位为初始状态

1’b0

[25]

RW

rc4_soft_reset

rc4软复位完成后硬件自动清0

1’b0:不产生软复位且不改变 当前状态

1’b1:加密算法被软件复位为 初始状态

1’b0

[24]

RW

crc_datarev

1’b0:CRC输入数据不反向

1’b1:CRC输入数据反向

1’b0

[23]

RW

crc_chksrev

1’b0:CRC输出结果不反向

1’b1:CRC输出结果反向

1’b0

[22:21]

RW

sub_mode

算法类型子模式选择:

0:DES/AES密码算法的ECB模式,可复用CRC算法的CRC8模式

1:DES/AES密码算法的CBC,可复用CRC算法的CRC16_0模式

2:AES密码算法的CTR模式 ,可复用CRC算法的CRC16_1模式

3: AES密码算法的MAC模式,可复用CRC算法的CRC32

2’b0

[20]

RW

encrypt_decrypt

RC4/AES/DES/3DE S算法的加密或解密模式选择:

1’b0:加密

1’b1:解密

1’b0

[19]

RW

gpsec_int_mask

1’b0:不屏蔽加/解密完成中断

1’b1:屏蔽加/解密完成中断

1’b0

[18:16]

RW

cypher_mode

密码算法类型

3’b000:RSV

3’b001:RC4

3’b010:SHA1

3’b011:AES

3’b100:DES

3’b101:3DES

3’b110:CRC

3’b111:MD5

3’b0

[15: 0]

RW

total_byte

总共需要加解密操作的byte个数。

16’h0

TRNG控制寄存器

表 33 TRNG模块控制寄存器

访问

操作说明

复位值

[31: 7]

保留

[6]

RW

TRNG_INT_MASK

TRNG 中断mask

0:TRNG 模块上报中断;

1:TRNG 模块不上报中断;

1’b1

[5:3]

RW

TRNG_CP

TRNG 模块控制信号

3’d0

[2]

RW

TRNG_DIG_BYPASS

TRNG 数字后处理模块bypass:

0:TRNG 模块进行后处理;

1:TRNG 模块不进行后处理;

1’b0

[1]

RW

TRNG_SEL:

RNG 输出选择信号。

0:寄存器0x48 显示 伪随机模块输出结果;

1:寄存器0x48 显示 TRNG输出结果;

1’b0

[0]

RW

TRNG_EN:

TRNG 模块使能信号。高有效。

0:TRNG 模块停止;

1:TRNG 模块开始工作;

1’b0

控制寄存器

表 34 加密模块控制寄存器

访问

操作说明

复位值

[31: 2]

保留

[1]

RW

sec_stop

停止当前正在进行的加解密操作

1’b0:无效

1’b1:加/解密停止

1’b0

[0]

RW

sec_strt

启动加解密,完成加解密操作的byte个数后,硬件自动清0

1’b0:不启动加/解密

1’b1:启动加/解密

1’b0

状态寄存器

表 35 加密模块状态寄存器

访问

操作说明

复位值

[31: 17]

保留

[16]

RW

int_flag

软件写1清零

1’b0:不产生加/解密完成中断

1’b1:产生加/解密完成中断

1’b0

[15: 0]

RO

transfer_cnt

当前加密完成的字节个数。

每次重新开启加解密时清0,并重新开始计数。

16’h0

RSA加密模块

功能概述

RSA运算硬件协处理器,提供Montgomery(FIOS算法)模乘运算功能。配合RSA软件库实现RSA算法。支持128位到2048位模乘。

主要特征

  • 支持128位到2048位模乘(模乘长度是32位的整数倍)

  • 支持D*D;X*Y;D*Y;X*X等4个模乘模式

功能描述

模乘功能

RSA运算硬件协处理器,提供Montgomery(FIOS算法)模乘运算功能。配合RSA软件库一同实现RSA算法。支持128位到2048位模乘。

寄存器描述

寄存器列表

表 36 RSA寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000 ~ 0X00FC

数据X寄存器

XBUF

RW

数据X寄存器

0X0100 ~ 0X01FC

数据Y寄存器

YBUF

RW

数据Y寄存器

0X0200 ~ 0X02FC

数据M寄存器

MBUF

RW

数据M寄存器

0X0300 ~ 0X03FC

数据D寄存器

DBUF

RW

数据D寄存器

0X0400

RSA 控制寄存器

RSACON

RW

RSA 控制寄存器

0X0000_0000

0X0404

参数MC寄存器

RSAMC

WO

参数MC寄存器

0X0000_0000

0X0408

参数N寄存器

RSAN

RW

参数N寄存器

0X0000_0000

数据X寄存器

XBUF对应数据X(2048bit)的缓冲区,对应haddr值为0000h~00fch。对应规则如下表:

表 37 RSA数据X寄存器

000h

004h

008h

······

00f8h

00fch

X[31 : 0]

X[63 : 32]

X[95 : 64]

······

X[2015 : 1984]

X[2047 : 2016]

数据Y寄存器

YBUF对应数据Y(2048bit)的缓冲区,对应haddr值为0100h~01fch。对应规则如下表:

表 38 RSA数据Y寄存器

0100h

0104h

0108h

······

01f8h

01fch

Y[31 : 0]

Y[63 : 32]

Y[95 : 64]

······

Y[2015 : 1984]

Y[2047 : 2016]

数据M寄存器

MBUF对应数据M(2048bit)的缓冲区,对应haddr值为0200h~02fch。对应规则如下表:

表 39 RSA数据M寄存器

0200h

0204h

0208h

······

02f8h

02fch

M[31 : 0]

M[63 : 32]

M[95 : 64]

······

M[2015 : 1984]

M[2047 : 2016]

数据D寄存器

DBUF对应数据D(2048bit)的缓冲区,对应haddr值为0300h~03fch。对应规则如下表:

表 40 RSA数据D寄存器

0300h

0304h

0308h

······

03f8h

03fch

D[31 : 0]

D[63 : 32]

D[95 : 64]

······

D[2015 : 1984]

D[2047 : 2016]

RSA 控制寄存器

RSACON,RSA控制寄存器,实际物理空间为32bit寄存器。

表 41 RSA 控制寄存器

访问

操作说明

复位值

[31: 6]

保留

[5]

RW

模乘启动控制位。软件写“1”启 动模乘运算,运算结束后,硬件自 动清“0”。

1’b0

[4]

RW

提供软复位功能,高有效。软件写 “1”进行软复位,复位完成后,硬件自动清“0”。

1.设置参数MC和N为0。

2.启动模乘后(bit5置1),将此位置“1”,会终止当前的运算(当bit0变高,表示软复 位命令执行完成,运算被终止), 但内部数据缓冲区(X,Y,M, D)中已经完成的部分运算结果会保留。

1’b0

[2 : 3]

RW

模乘模式选择。

2’b00:X = D*D mod M

2’b01:D = X*Y mod M

2’b10:X = D*Y mod M

2’b11:D = X*X mod M

2’b0

[1]

RW

保留

1’b0

[0]

RW

模乘运算完成标识,高有效。硬件 置“1”,软件清“0”。软件写 “1”无效。

1’b0

参数MC寄存器

表 42 RSA参数MC寄存器

访问

操作说明

复位值

[31: 0]

WO

RSAMC对应参数MC(32b it)。复位值全0。读出值为全0。

32’h0

参数N寄存器

RSAN对应参数N(7bit)。N值为模乘长度除以32的值。即如果调用1024bit的模乘运算,需设置N=32。对该寄存器写入时,取低7位为有效数据,读出时,高25位为0。复位值全0。

表 43 RSA参数N寄存器

访问

操作说明

复位值

[31: 7]

保留

[6 : 0]

RW

RSAN对应参数N(7bit)。N值为模乘长度除以32的值。

7’h0

GPIO模块

功能概述

GPIO控制器实现了软件对GPIO属性的配置,使用户能够方便的操作GPIO。

每个GPIO都可以通过软件单独配置,设置其作为输入端口、输出端口,设置其悬浮、上拉、下拉状态,设置其上升沿、下降沿、双沿、高电平、低电平中断触发方式。

主要特性

  • 支持GPIO软件配置

  • 支持GPIO中断配置

  • 最多提供48个GPIO可用

功能描述

W800中提供的GPIO分为两组,一组为GPIOA,一组为GPIOB,GPIOA和GPIOB寄存器起始地址不同,但是功能一致。

当用户希望将某个特定IO作为软件控制的GPIO 使用的话,将GPIO复用选择寄存器中对应位置为0 即可。

GPIO方向控制寄存器用来控制GPIO 的方向,1表示对应的GPIO作为输出引脚,0表示对应的GPIO 作为输入引脚。

GPIO上下拉控制寄存器用来控制相应IO的上下拉功能。

GPIO上拉控制寄存器为低有效,设置为0表示打开相应IO的上拉功能,设置为1表示关闭上下拉功能。IO具有的属性请参见IO复用表。

GPIO下拉控制寄存器为高有效,设置为1表示打开相应IO的下拉功能,设置为0表示关闭上下拉功能。IO具有的属性请参见IO复用表。

GPIO数据寄存器在设置为输入状态时表示输入IO的电平,在设置为输出状态时可以写入1或者0指定IO的输出电平。此寄存器受到GPIO数据使能寄存器的控制,只有在GPIO数据使能寄存器设置为1的时候,GPIO数据寄存器才能读写。

GPIO 模块提供输入信号检测功能。通过配置GPIO中断相关的寄存器可以实现高低电平检测以及上下沿跳变检测。当对应IO的输入信号符合预先设置的条件,比如说高电平触发或者上升沿触发等,即会触发GPIO 中断,上报给MCU 处理。MCU 需要清除相应的中断状态,以免中断误触发。

寄存器描述

寄存器列表

表 44 GPIOA寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

GPIO数据寄存器

GPIO_DATA

RW

读写GPIO当前数据

0X180B

0X0004

GPIO数据使能寄存器

GPIO_DATA _EN

RW

配置GPIO_DATA的使能位

0XFFFF

0X0008

GPIO方向控制寄存器

GPIO_DIR

RW

配置GPIO方向

0X0000

0X000C

GPIO上拉控制寄存器

GPIO_PULL _EN

RW

配置GPIO上拉

0XFFFF

0X0010

GPIO复用选择寄存器

GPIO_AF_SEL

RW

配置GPIO复用功能使能位

0XFFFF

0X0014

GPIO复用选择寄存器1

GPIO_SF_S1

RW

GPIO复用功能选择位高地址位

0X0000

0X0018

GPIO复用选择寄存器0

GPIO_AF_S0

RW

GPIO复用功能选择位低地址位

0X0000

0X001C

GPIO下拉控制寄存器

GPIO_DN_ENA

RW

配置GPIO下拉

0X0000

0X0020

GPIO中断触发方式配置寄存器

GPIO_IS

RW

配置GPIO的中断触发方式

0X0000

0X0024

GPIO中断边沿触发模式配置寄存器

GPIO_IBE

RW

配置GPIO中断边沿触发模式

0X0000

0X0028

GPIO中断上下边沿触发配置寄存器

GPIO_IEV

RW

配置GPIO中断上下边沿触发或高低电平触发

0X0000

0X002C

GPIO中断使能配置寄存器

GPIO_IE

RW

配置GPIO中断使能

0X0000

0X0030

GPIO裸中断状态寄存器

GPIO_RIS

RO

查询GPIO裸中断状态(MASK前)

0X0000

0X0034

GPIO屏蔽后中断状态寄存器

GPIO_MIS

RO

查询GPIO屏蔽后中断状态(MASK后)

0X0000

0X0038

GPIO中断清除控制寄存器

GPIO_IC

WO

控制GPIO中断清除

0X0000

表 45 GPIOB寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

GPIO数据寄存器

GPIO_DATA

RW

读写GPIO当前数据

0X0000_7304

0X0004

GPIO数据使能寄存器

GPIO_DATA _EN

RW

配置GPIO_DATA的使能位

0X7FFF_FFFF

0X0008

GPIO方向控制寄存器

GPIO_DIR

RW

配置GPIO方向

0X0000_0000

0X000C

GPIO上拉控制寄存器

GPIO_PULL _EN

RW

配置GPIO上拉

0XFFFF_FFFF

0X0010

GPIO复用选择寄存器

GPIO_AF_SEL

RW

配置GPIO复用功能使能位

0XFFFF_FFFF

0X0014

GPIO复用选择寄存器1

GPIO_SF_S1

RW

GPIO复用功能选择位高地址位

0X0000_0000

0X0018

GPIO复用选择寄存器0

GPIO_AF_S0

RW

GPIO复用功能选择位低地址位

0X0000_0000

0X001C

GPIO下拉控制寄存器

GPIO_DN_ENA

RW

配置GPIO下拉

0X0000_0000

0X0020

GPIO中断触发方式配置寄存器

GPIO_IS

RW

配置GPIO的中断触发方式

0X0000_0000

0X0024

GPIO中断边沿触发模式配置寄存器

GPIO_IBE

RW

配置GPIO中断边沿触发模式

0X0000_0000

0X0028

GPIO中断上下边沿触发配置寄存器

GPIO_IEV

RW

配置GPIO中断上下边沿触发或高低电平触发

0X0000_0000

0X002C

GPIO中断使能配置寄存器

GPIO_IE

RW

配置GPIO中断使能

0X0000_0000

0X0030

GPIO裸中断状态寄存器

GPIO_RIS

RO

查询GPIO裸中断状态(MASK前)

0X0000_0000

0X0034

GPIO屏蔽后中断状态寄存器

GPIO_MIS

RO

查询GPIO屏蔽后中断状态(MASK后)

0X0000_0000

0X0038

GPIO中断清除控制寄存器

GPIO_IC

WO

控制GPIO中断清除

0X0000_0000

GPIO数据寄存器

表 46 GPIOA数据寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO当前数据,每BIT与相应的GPIO线对应

16’h180b

表 47 GPIOB数据寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO当前数据,每BIT与相应的GPIO线对应

32’h7304

GPIO数据使能寄存器

表 48 GPIOA数据使能寄存器

访问

操作说明

复位值

[15: 0]

RW

对应GPIO_DATA的BIT使能位,只有对应BIT为1时,对GPIO_DATA相应位的操作才有效,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO_DATA[x]不可读写

[x] = 1, GPIO_DATA[x]可读写

16’hffff

表 49 GPIOB数据使能寄存器

访问

操作说明

复位值

[31: 0]

RW

对应GPIO_DATA的BIT使能位,只有对应BIT为1时,对GPIO_DATA相应位的操作才有效,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO_DATA[x]不可读写

[x] = 1, GPIO_DATA[x]可读写

32’h7fff_ffff

GPIO方向控制寄存器

表 50 GPIOA方向控制寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO方向控制,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]为输入

[x] = 1, GPIO[x]为输出

16’h0

表 51 GPIOB方向控制寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO方向控制,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]为输入

[x] = 1, GPIO[x]为输出

32’h0

GPIO上下拉控制寄存器

表 52 GPIOA上拉控制寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO上拉控制,每BIT与相应的GPIO线对应,1’bx:

注意:该寄存器为低有效

[x] = 0, GPIO[x]有上拉

[x] = 1, GPIO[x]无上拉

16’hffff

表 52 GPIOA下拉控制寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO下拉控制,每BIT与相应的GPIO线对应,1’bx:

注意:该寄存器为高有效

[x] = 1, GPIO[x]有下拉

[x] = 0, GPIO[x]无下拉

16’h0000

表 53 GPIOB上拉控制寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO上拉控制,每BIT与相应的GPIO线对应,1’bx:

注意:该寄存器为低有效

[x] = 0, GPIO[x]有上拉

[x] = 1, GPIO[x]无上拉

32’hffff_ffff

表 53 GPIOB下拉控制寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO下拉控制,每BIT与相应的GPIO线对应,1’bx:

注意:该寄存器为高有效

[x] = 1, GPIO[x]有下拉

[x] = 0, GPIO[x]无下拉

32’h0000_0000

GPIO复用选择寄存器

表 54 GPIOA复用选择寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO复用功能使能位,每BIT对应相应GPIO复用功能是否打开,1’bx:

[x] = 0, GPIO[x]复用功能关闭

[x] = 1, GPIO[x]复用功能打开

[x] = 1时,复用功能取决于GPIO_AF_S1和GPIO_AF_S0两个寄存器相应BIT的状态。

S1.[x] = 0,S0.[x] = 0,复用功能1(opt1)

S1.[x] = 0,S0.[x] = 1,复用功能2(opt2)

S1.[x] = 1,S0.[x] = 0,复用功能3(opt3)

S1.[x] = 1,S0.[x] = 1,复用功能4(opt4)

[x] = 0时,如果GPIO_DIR[x] = 0,且GPIO_PULL_EN [x] = 1,则GPIO复用为opt6模拟IO功能

IO复用功能参见芯片引脚复用关系

16’hffff

表 55 GPIOB复用选择寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO复用功能使能位,每BIT对应相应GPIO复用功能是否打开,1’bx:

[x] = 0, GPIO[x]复用功能关闭

[x] = 1, GPIO[x]复用功能打开

[x] = 1时,复用功能取决于GPIO_AF_S1和GPIO_AF_S0两个寄存器相应BIT的状态。

S1.[x] = 0,S0.[x] = 0,复用功能1(opt1)

S1.[x] = 0,S0.[x] = 1,复用功能2(opt2)

S1.[x] = 1,S0.[x] = 0,复用功能3(opt3)

S1.[x] = 1,S0.[x] = 1,复用功能4(opt4)

[x] = 0时,如果GPIO_DIR[x] = 0,且GPIO_PULL_EN [x] = 1,则GPIO复用为opt6模拟IO功能

IO复用功能参见芯片引脚复用关系

32’hffff_ffff

GPIO复用选择寄存器1

表 56 GPIOA复用选择寄存器1

访问

操作说明

复位值

[15: 0]

RW

GPIO复用功能选择位高地址位,和GPIO_AF_S0共同决定复用功能

IO复用功能参见芯片引脚复用关系

16’h0

表 57 GPIOB复用选择寄存器1

访问

操作说明

复位值

[31: 0]

RW

GPIO复用功能选择位高地址位,和GPIO_AF_S0共同决定复用功能

IO复用功能参见芯片引脚复用关系

32’h0

GPIO复用选择寄存器0

表 58 GPIOA复用选择寄存器0

访问

操作说明

复位值

[15: 0]

RW

GPIO复用功能选择位低地址位,和GPIO_AF_S1共同决定复用功能

如何配置参见GPIO_AF_SEL寄存器说明

16’h0

表 59 GPIOB复用选择寄存器0

访问

操作说明

复位值

[31: 0]

RW

GPIO复用功能选择位低地址位,和GPIO_AF_S1共同决定复用功能

如何配置参见GPIO_AF_SEL寄存器说明

32’h0

GPIO中断触发方式配置寄存器

表 60 GPIOA中断触发方式配置寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO的中断触发方式,每BIT与相应的GPIO线对应,1’ bx:

[x] = 0, GPIO[x]中断为边沿触发

[x] = 1, GPIO[x]中断为电平触发

16’h0

表 61 GPIOB中断触发方式配置寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO的中断触发方式,每BIT与相应的GPIO线对应,1’ bx:

[x] = 0, GPIO[x]中断为边沿触发

[x] = 1, GPIO[x]中断为电平触发

32’h0

GPIO中断边沿触发模式配置寄存器

表 62 GPIOA中断边沿触发模式配置寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO中断边沿触发模式,每BIT与相应的GPIO线对应,1 ’bx:

[x] = 0, GPIO[x]边沿触发中断模式由GPIO_IEV决定

[x] = 1, GPIO[x]双沿都触发中断

16’h0

表 63 GPIOB中断边沿触发模式配置寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO中断边沿触发模式,每BIT与相应的GPIO线对应,1 ’bx:

[x] = 0, GPIO[x]边沿触发中断模式由GPIO_IEV决定

[x] = 1, GPIO[x]双沿都触发中断

32’h0

GPIO中断上下边沿触发配置寄存器

表 64 GPIOA中断上下边沿触发配置寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO中断上下边沿触发或高低电平触发选择,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]中断为低电平或下降沿触发

[x] = 1, GPIO[x]中断为高电平或上升沿触发

16’h0

表 65 GPIOB中断上下边沿触发配置寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO中断上下边沿触发或高低电平触发选择,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]中断为低电平或下降沿触发

[x] = 1, GPIO[x]中断为高电平或上升沿触发

32’h0

GPIO中断使能配置寄存器

表 66 GPIOA中断使能配置寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO中断使能控制,每BIT与相应的GPIO线对应,1’b x:

[x] = 0, GPIO[x]中断失能

[x] = 1, GPIO[x]中断使能

16’h0

表 67 GPIOB中断使能配置寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO中断使能控制,每BIT与相应的GPIO线对应,1’b x:

[x] = 0, GPIO[x]中断失能

[x] = 1, GPIO[x]中断使能

32’h0

GPIO裸中断状态寄存器

表 68 GPIOA裸中断状态寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO裸中断状态(MASK前),每BIT与相应的GPIO线 对应,1’bx:

[x] = 0, GPIO[x]没有中断产生

[x] = 1, GPIO[x]有中断产生

16’h0

表 69 GPIOB裸中断状态寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO裸中断状态(MASK前),每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]没有中断产生

[x] = 1, GPIO[x]有中断产生

32’h0

GPIO屏蔽后中断状态寄存器

表 70 GPIOA屏蔽后中断状态寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO屏蔽后中断状态(MASK后),每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]没有中断产生(MASK后)

[x] = 1, GPIO[x]中断产生(MASK后)

16’h0

表 71 GPIOB屏蔽后中断状态寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO屏蔽后中断状态(MASK后),每BIT与相应的GPIO线对应,1’bx:

[x] = 0, GPIO[x]没有中断产生(MASK后)

[x] = 1, GPIO[x]中断产生(MASK后)

32’h0

GPIO中断清除控制寄存器

表 72 GPIOA中断清除控制寄存器

访问

操作说明

复位值

[15: 0]

RW

GPIO中断清除控制,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, 无动作

[x] = 1, 清除GPIO[x]中断状态

16’h0

表 73 GPIOB中断清除控制寄存器

访问

操作说明

复位值

[31: 0]

RW

GPIO中断清除控制,每BIT与相应的GPIO线对应,1’bx:

[x] = 0, 无动作

[x] = 1, 清除GPIO[x]中断状态

32’h0

高速SPI设备控制器

功能概述

兼容通用SPI物理层协议,通过约定与主机交互的数据格式,主机可以对设备进行高速访问,最高支持工作频率为50MHZ。

主要特性

  • 兼容通用SPI协议

  • 可选择的电平中断信号

  • 最高支持50Mbps速率

  • 简单的帧格式,全硬件解析与DMA

功能描述

SPI协议简介

SPI以主从方式工作,通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。分别是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

(1)SDI – Serial Data In,串行数据输入

(2)SDO – Serial Data Out,串行数据输出

(3)SCLK – Serial Clock,时钟信号,由主设备产生

(4)CS – Chip Select,从设备使能信号,由主设备控制。

其中,CS是从芯片是否被主芯片选中的控制信号,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),主芯片对此从芯片的操作才有效。这就使在同一条总线上连接多个SPI设备成为可能。

除了上述4根信号线之后,HSPI还额外增加了一根INT线,当从设备有数据需要上传时,产生一个下降沿的中断,实现数据的主动上报。

SPI通讯是通过数据交换完成的,数据是一位一位的传输的,由SCLK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。因此,至少需要8次时钟信号的改变(上沿和下沿为一次),才 能完成8位数据的传输。

SCLK信号线由主设备控制,从设备不能控制信号线。在一个基于SPI的设备中,至少有一个主控设备。

SPI工作过程

芯片内部的HSPI是和wrapper控制器一起工作的,wrapper控制器内部集成DMA,通过DMA实现HSPI内部FIFO和芯片内部缓存之间的数据交换。该操作是硬件实现的,软件不需要关心数据发送接收过程,只需要配置发送接收数据链表,以及操作wrapper控制器相应的寄存器。

关于wrapper控制器的详细介绍,请参考相关章节。

寄存器描述

HSPI芯片内部操作的寄存器列表

表 74 HSPI内部访问寄存器

偏移地址

名称

缩写

描述

复位值

0X0000

HSPI FIFO清空寄存器

CLEAR_FIFO

RW

清除Tx和Rx FIFO的内容,同时会同步复位系统时钟域的电路

0X0000_0000

0X0004

HSPI配置寄存器

SPI_CFG

RW

配置SPI的传输模式以及大小端配置

0X0000_0000

0X0008

HSPI模式配置寄存器

MODE_CFG

RW

配置ahb master访问总线时的burst长度

0X0000_0000

0X000C

HSPI中断配置寄存器

SPI_INT_CPU _MASK

RW

配置中断是否使能

0X0000_0003

0X0010

HSPI中断状态寄存器

SPI_INT_CPU _STTS

RW

获取以及清除中断状态

0X0000_0000

0X0018

HSPI数据上传长度寄存器

RX_DAT_LEN

RW

配置可以上传的数据长度

0X0000_0000

HSPI FIFO清空寄存器
表 75 HSPI FIFO清空寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

Clear FIFOs,清除Tx和Rx FIFO的内容,同时会同步复位系统时钟域的电路(本列表中的寄存器除外)

0:不清除FIFO

1:清除有效

软件置位,硬件清零

注:如果要复位整个电路,需要采用本模块的异步复位管腿:rst_n

1’b0

HSPI 配置寄存器
表 76 HSPI配置寄存器

访问

操作说明

复位值

[31: 4]

RO

保留

[3]

RW

Bigendian, spi 接口支持数据的大小端选择。

0:支持小段数据传输

1:支持大端数据传输

1’b0

[2]

RW

spi_tx_always _drive

0:spi输出只有在片选有效时有效,其它时刻为高阻

1:spi输出一直有效

1’b0

[1]

RW

SPI CPHA

0:传输模式A

1:传输模式B

1’b0

[0]

RW

SPI CPOL,SCK在IDLE时的极性

0:SCK IDLE时为0

1:SCK IDLE 时为1

1’b0

HSPI 模式配置寄存器
表 77 HSPI模式配置寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

Burst len,ahb master访问总线时的burst长度

0:burst len为1字

1:burst len为4字

建议设置为4个字的burst传输,这样在spi接口频率较高时,可以保证不断流

1’b0

HSPI 中断配置寄存器
表 78 HSPI中断配置寄存器

访问

操作说明

复位值

[31: 2]

RO

保留

[1]

RW

IntEnRxOverrun,RxOverrun中断使能

0:Rx FIFO overflow 中断使能

1:Rx FIFO overflow 中断不使

1’b

[0]

RW

IntEnTxUnderrun,TxUnderrun中断使能

0:Tx FIFO underflow 中断使能

1:Tx FIFO underflow 中断不使能

1’b

HSPI 中断状态寄存器
表 79 HSPI中断状态寄存器

访问

操作说明

复位值

[31: 2]

RO

保留

[1]

RW

RxOverrun

0:Rx FIFO overflow

1:Rx FIFO overflow

写1清零

1’b0

[0]

RW

TxUnderrun

0:Tx FIFO underflow

1:Tx FIFO underflow

写1清零

1’b0

HSPI 数据上传长度寄存器
表 80 HSPI数据上传长度寄存器

访问

操作说明

复位值

[31:16]

RO

保留

[15: 0]

RW

Rx_dat_len

表示可以上传的数据长度,单位为字节

上传长度都是字的整数倍,如果上传长度不足整字,向上取整。

16’h0

主机端访问HSPI控制器寄存器列表

主机端通过固定的SPI命令格式访问SPI接口寄存器。命令长度固定为一个字节,数据长度固定为两个字节。

表 81 HSPI接口配置寄存器(主设备访问)

偏移地址

名称

缩写

访问

描述

复位值

0X02

获取数据长度寄存器

RX_DAT_LEN

RO

上传数据时,spi主机用来获取从device端读取的数据长度

0X0000

0X03

下发数据标志寄存器

TX_BUFF _AVAIL

RO

主向从发数据时,用于判断是否可以下传数据或者命令

0X0000

0X04

保留

RSV

RO

0X05

中断配置寄存器

SPI_INT _HOST _MASK

RW

是否屏蔽中断

0X0000

0X06

中断状态寄存器

SPI_INT _HOST _STTS

RO

中断状态寄存器,spi主机查询该位确认是否有数据上传

0X0000

0X07

保留

RSV

RO

0X00

数据端口0

DAT_PORT0

RW

Spi主机通过该寄存器端口向从设备下发数据,下发前面的数据帧使用该端口

0X10

数据端口1

DAT_PORT1

RW

Spi主机通过该寄存器端口向从设备下发数据,下发最后一个数据帧使用该端口

0X01

命令端口0

DN_CMD _PORT0

WO

Spi主机通过该寄存器向从设备下发命令数据,下发前面的命令数据使用该端口

0X11

命令端口1

DN_CMD _PORT1

WO

Spi主机通过该寄存器向从设备下发命令数据,下发最后一帧命令数据使用该端口

HSPI 获取数据长度寄存器
表 82 HSPI获取数据长度寄存器

访问

操作说明

复位值

[15: 0]

RO

spi主机只读寄存器,在上传数据时,主要用来获知从device端读取多少数据

但在本模块中,上传长度都是字的整数倍,如果此上传长度值不为整字,则主机读数时向上取整,即多读部分冗余字节

16’h0

HSPI 下发数据标志寄存器
表 83 HSPI下发数据标志寄存器

访问

操作说明

复位值

[15: 2]

RO

保留

[1]

RO

tx_cmdbuff_avail

标志发送cmd的buff是否可用,如果可用,则主机可以下发cmd。

0:发送buff不可用

1:发送buff可用

1’b0

[0]

RO

tx_buff_avail

标志发送buff是否可用,如果可用,则主机可以下发数据。

0:发送buff不可用

1:发送buff可用

1’b0

HSPI 中断配置寄存器
表 84 HSPI中断配置寄存器

访问

操作说明

复位值

[15: 1]

RO

保留

[0]

RO

IntMaskup_dat _cmd_rdy

中断屏蔽

0:中断没有被屏蔽,可以产生中断

1:中断被屏蔽

注:建议采用主机自己内部的中断屏蔽,这样可以提高效率。

1’b0

HSPI 中断状态寄存器
表 85 HSPI中断状态寄存器

访问

操作说明

复位值

[15: 1]

RO

保留

[0]

RO

up_dat_cmd_rdy

向SPI主机产生中断的状态寄存器

0:数据或命令没有准备好

1:数据或命令已经准备好

读可清

1’b0

HSPI 数据端口0
表 86 HSPI数据端口0

访问

操作说明

复位值

RW

SPI主机通过该寄存器端口和device进行数据传输,向该寄存器写数,即可下发数据,从该寄存器读数,即可上传数据。如果正在传输的帧需要通过多次传输才能完成,则最后一次传输采用寄存器端口DAT_PORT1,其它的采用DAT_PORT0。

HSPI 数据端口1
表 87 HSPI数据端口1

访问

操作说明

复位值

RW

SPI主机通过该寄存器端口和device进行数据传输,向该寄存器写数,即可下发数据,从该寄存器读数,即可上传数据。如果正在传输的帧需要通过多次传输才能完成,则最后一次传输采用寄存器端口DAT_PORT1,其它的采用DAT_PORT0。

HSPI 命令端口0
表 88 HSPI命令端口0

访问

操作说明

复位值

RW

SPI主机通过该寄存器端口和device进行命令交互,向该寄存器写数,即可下发命令。如果正在传输的命令需要通过多次传输才能完成,则最后一次传输采用寄存器端口DN_CMD_PORT1 ,其它的采用DN_CMD_PORT0。

注:此窗口只用来下发驱动和固件协商的命令。

HSPI 命令端口1
表 89 HSPI命令端口1

访问

操作说明

复位值

RW

SPI主机通过该寄存器端口和device进行命令交互,向该寄存器写数,即可下发命令。如果正在传输的命令需要通过多次传输才能完成,则最后一次传输采用寄存器端口DN_CMD_PORT1 ,其它的采用DN_CMD_PORT0。

注:此窗口只用来下发驱动和固件协商的命令。

高速SPI设备控制器接口时序

主要描述SPI读写时序,以及主SPI如何与HSPI进行数据交互。

数据格式

数据格式分为命令域和数据域两部分,如下图。其中命令域固定长度为8bit,数据域长度根据访问对象不同,长度不同,具体参见下文。

命令域的最高bit为读写标志位,其余7bit为地址.

  • 0表示从后边7bit地址处读数据

  • 1表示向后边7bit地址写数据

图 5上位机SPI收发数据格式

图 5上位机SPI收发数据格式

本模块数据域只支持两种长度,上位机SPI访问接口配置寄存器(表2),数据域长度为16bit;

通过端口(数据端口0,数据端口1,命令端口0和命令端口1)传输数据,数据域长度为32bit的整数倍;

下图为读写接口配置寄存器的时序图。从设备默认配置是小端模式。

图 6 HSPI 寄存器读操作(大端模式)

图 6 HSPI 寄存器读操作(大端模式)

图 7 HSPI寄存器写操作(大端模式)

图 7 HSPI寄存器写操作(大端模式)

图 8 寄存器读操作(小端模式)

图 8 寄存器读操作(小端模式)

图 9 寄存器写操作(小端模式)

图 9 寄存器写操作(小端模式)

下图为读写数据的时序图,数据域长度为32bit的整数倍,图示只传输一个字的长度。

图 10 端口读操作(大端模式)

图 10 端口读操作(大端模式)

图 11 端口写操作(大端模式)

图 11 端口写操作(大端模式)

图 12 端口读操作(小端模式)

图 12 端口读操作(小端模式)

图 13 端口写操作(小端模式)

图 13 端口写操作(小端模式)

注:命令和数据之间可以没有等待时间,即传输命令字段后,可以紧接着数据传输,不需要多余空闲时钟或者空闲时间。有时间延迟也可以,但不能出现空闲时钟。

时序

本模块支持半双工,可以支持的时序根据时钟相位和采样点的不同,分为4种。以下时序只是给出时钟的相位和采样关系。需要注意的是,芯片默认支持(CPOL=0,CPHA=0)。

注:命令和数据之间可以没有等待时间,即传输命令字段后,可以紧接着数据传输,不需要多余空闲时钟或者空闲时间。有时间延迟也可以,但不能出现空闲时钟。

图 14 CPOL=0,CPHA=0

图 14 CPOL=0,CPHA=0

图 15 CPOL=0,CPHA=1

图 15 CPOL=0,CPHA=1

图 16 CPOL=1,CPHA=0

图 16 CPOL=1,CPHA=0

图 17 CPOL=1,CPHA=1

图 17 CPOL=1,CPHA=1

中断

中断信号由从设备发送给主设备,通过SPI_INT管脚触发,低电平有效。

spi_int主要通知spi主机有数据或者命令需要上传,spi主机处理中断时关心的接口寄存器为:

  • SPI_INT_HOST_MASK

  • SPI_INT_HOST_STTS

  • RX_DAT_LEN

注:每一上传的帧对应一个中断。只有当前需要上传的帧传输完成后,如果还有帧需要上传,此时,才会产生新的中断。下图是处理中断的一种方式。

图 18主SPI处理中断流程

图 18主SPI处理中断流程

主SPI收发数据工作流程
图 19下行数据流程图

图 19下行数据流程图

注意:下发的数据的长度必须是以字为单位,如果非整字,填0补齐。

图 20下行命令流程图

图 20下行命令流程图

注意:下发的命令的长度必须是以字为单位,如果非整字,填0补齐。

图 21上行数据(命令)流程图

图 21上行数据(命令)流程图

上行数据和上行命令的流程一样。

此处需要注意的是,上行的数据的长度必须是以字为单位,如果有效长度非整字,尾部多余数据可以扔掉。

需要说明的是,主从之间有数据和命令两个通道可以交互数据,用户可以根据需要任意选择一个通道使用或者两个都使用。命令通道一次交互最大数据长度为256字节,数据通道一次交互最大数据长度为1500字节。数据长度限制由从设备控制,如果长度超限,会破坏从设备的数据结构。

SDIO设备控制器

功能概述

W800集成了SDIO设备端接口,作为从设备,完成与主机数据的交互。内部集成了1024byte的异步FIFO,完成主机与芯片的数据交互。

主要特性

  • 兼容SDIO卡规范2.0

  • 支持主机速率0~50MHz

  • 支持最大1024字节的Block

  • 支持1比特SD和4比特SD模式

功能描述

SDIO总线

SDIO总线和USB总线类似,SDIO总线也有两端,其中一端是主机端,另一端是设备端,采用HOST- DEVICE这样的设计是为了简化DEVICE的设计,所有的通信都是由HOST端发出命令开始的。在DEVICE端只要能解析HOST的命令,就可以同HOST进行通信了,SDIO的HOST可以连接多个DEVICE。

在SDIO总线定义中,DAT1信号线复用为中断线。在SDIO的1BIT模式下DAT0用来传输数据,DAT1用作中断线。在SDIO的4BIT模式下DAT0-DAT3用来传输数据,其中DAT1复用作中断线。

SDIO命令

SDIO总线上都是HOST端发起请求,然后DEVICE端回应请求,其中请求和回应中会包含数据信息:

  • Command:用于开始传输的命令,是由HOST端发往DEVICE端的,其中命令是通过CMD信号线传送的;

  • Response:回应是DEVICE返回的,作为Command的回应。也是通过CMD线传送的;

  • Data:数据是双向的传送的。可以设置为1线模式,也可以设置为4线模式。数据是通过DAT0-DAT3信号线传输的。

SDIO的每次操作都是由HOST在CMD线上发起一个CMD,对于有的CMD,DEVICE需要返回Response,有的则不需要。

对于读命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个读传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。

对于写命令,首先HOST会向DEVICE发送命令,紧接着DEVICE会返回一个握手信号,此时,当HOST收到回应的握手信号后,会将数据放在4位的数据线上,在传送数据的同时会跟随着CRC校验码。当整个写传送完毕后,HOST会再次发送一个命令,通知DEVICE操作完毕,DEVICE同时会返回一个响应。

SDIO内部存储

SDIO设备内部具有固定的存储映射,包括一般资讯区域(CIA)和特殊功能区域(function unique area)。

CIA中的寄存器包括了I/O端口功能,中断产生以及端口工作信息,可以通过读写功能0对CIA所定义的寄存器进行相关操作。CIA包含了CCCR,FBR和CIS共三方面信息。其中CCCR定义了SDIO卡的公共控制寄存器,主机端通过操作CCCR可以对SDIO卡进行检查和对端口进行操作,CCCR的地址为0X0 0-0XFF。FBR定义了所支持的端口功能1到端口功能7的操作,包括了各端口的要求和功能,电源控制等,FBR的地址为0Xn00-0Xnff(其中n为功能端口号)。CIS定义了卡的一些信息结构,地址为0X1000- 0X17FFF,CIS有公共CIS和各功能端口各自的CIS,其中公共CIS的初始地址在CCCR的CIS Pointer域中,各端口功能的CIS在各功能端口FBR的CIS Pointer域中。

CIA的存储映射如下图。

图 22 SDIO内部存储映射

图 22 SDIO内部存储映射

CIA中各寄存器的描述参考下文。要深入了解CIA,请参阅SDIO协议规范。

寄存器描述

寄存器列表

SDIO Fn0 寄存器

Fn0寄存器为SDIO协议规定的寄存器,其地址范围为:0x00000~0x1FFFF,共128K。起始地址为0x00000。

Fn0寄存器由SDIO 主机通过CMD52命令进行访问,偏移地址即为访问地址,功能号为0。

图 23 CCCR 寄存器存储结构

图 23 CCCR 寄存器存储结构

图 23 CCCR 寄存器存储结构

图 24 FBR1 寄存器结构

图 24 FBR1 寄存器结构

图 24 FBR1 寄存器结构

图 25 CIS存储空间结构

图 25 CIS存储空间结构

图 25 CIS存储空间结构

SDIO CCCR寄存器和FBR1寄存器列表
表 90 SDIO CCCR寄存器和FBR1寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X00

CCCR/SDIO Revision

SDIOx

RO

[3:0],表示 支持的CCCR/FBR格式

4’h0:CCCR/FBR Version 1.00

4’h1:CCCR/FBR Version 1.10

4’h2:CCCR/FBR Version 1.20

4’h3-4’hF:Rsv

由CIA Register [3:0] 来表示

4’h2

CCCRx

RO

[7:4],表示支持的SDIO协议版本

4’h0:SDIO Version 1.00

4’h1:SDIO Version 1.10

4’h2:SDIO Version 1.20 (unrelea sed)

4’h3:SDIO Version 2.00

4’h4-4’hF:Rsv

由CIA Register [7:4] 来表示

4’h3

0X01

SD

pecifica

tion

Revision

SDx

RO

[3:0],表示支持的SD协议版本

4’h0:SD Physical Version 1.01 (March 2000)

4’h1:SD Physical Version 1.10 (October 2004)

4’h2:SD Physical Version 2.00 (May 2006)

4’h3-4’hF:Rsv

由CIA Register [11:8] 来表示

4’h2

RO

RFU

4’h0

0X02

I/O Enable

IOEx

RO

RFU

1’b0

RW

[7:1],Function使能,bit1-bit7分别对应7个function,对应SD主机使相应bit为1,则使能相应function,否则相应function不能工作。

注:CIS0,CIS1以及CSA放在Fn1中,此时即使Fn1不使能,SD主机也可以对这个三个区域进行读写(CIS0,CIS1不可以写)。

7’b0

0X03

I/O Ready

IORx

RO

RFU

1’b0

RO

[7:1],IOR共7bit,分别对应7个function的状态 ,如果对应bit为1,则表示该function可以工作。

本设计中,HC8051通过配置program register 的function ready 位为1,使的本寄存器bit1=1 ,从而标志Fn1可以正常工作。

注:对CIS0、 CIS1、CSA 的读写操作独立于IOR1,即,即使IOR1=0,也可以访问这三个存储空间的内容。

7’b0

0X04

Int Enable

IENM

RW

[0],中断使能信号

0:来至卡里的中断不能送给SD主机

1:任何func tion的中断都 可以送给主机

1’b0

IENx

RW

[7:1], functionx 的中断使能。

IEN1=0,则来至Fn1的中断不会送给主机。

IEN1=1,则允许Fn1的中断送给主机

7’b0

0X05

Int

Pending

RO

[0],RFU

1’b0

INTx

RO

[7:1], functionx 的中断挂起。

INT1=0,没 有Fn1的中断被挂起

INT1=1,Fn1有中断被挂起 。

注:如果IEN1和IENM不为1,则主机不会收到挂起中断

7’b0

0X06

I/O Abort

ASx

WO

[2:0],取消IO读或者写,从而释放总线。

取消Fn1操作,应该采用CMD52写写入3’b1 。该命令在SPI下不支持。

3’b0

RES

WO

[3],软复位信号

1:复位SD 时钟域的电路,该bit在置位后自动清零,不需要专门清零。该复位信号不会影响当前卡的协议选择(SD 或者SPI模式) ,同时也不会影响 CD Disable。只能采用CMD52操作。

1‘b0

RO

RFU

4‘b0

0X07

Bus Interface ontrol

Bus Width

RW

[1:0],数据线宽度

2’b00:1bit数据线模式

2’b10:4bit数据线模式

复位或者上电,会变为2’b00

2’b00

RO

[4:2],RFU

3’b000

ECSI

RW

[5],允许连续的SPI中断。

如果SCSI为1 ,则这一个寄存器用来允许SDIO卡在SPI模式下,在任何时间给出中断,此时不需要关心CS线的状态 。

1’b0

SCSI

RO

[6],支持连续的SPI中断。

如果为1,表示SDIO卡支持SPI模式下,在任何时候给出中断,而不需要关心CS的状态。

当progtam reg [2] 为1 ,该寄存器置位。

1’b1

CD Disable

RW

[7],连接或者 断开 CD/DAT[3] (pin1) 上的10-90K上拉电阻。

0:连接上拉电阻

1:断开上拉电阻

在上电后,该寄存器清零,即连接上拉电阻。该寄存器的状态不会被SD 协议中的复位命令影响。

1’b0

0X08

Card Capability

SDC

RO

[0],支持在数据传输期间执行CMD52命令。在SPI模式下不支持该寄存器。

当progtam reg [3] 为1 时,该寄存器为1

1’b1

SMB

RO

[1],表示SDIO卡支持CMD53要求的Block传输模式。

当program_reg [4] 为1时,该寄存器为 1

1’b1

SRW

RO

[2],表示SDIO支持读等待-Read Wait Control( RWC)操作。

当program_reg [5] 为1时,该寄存器为 1

1’b1

SBS

RO

3,表示SDIO卡支持挂起/恢复。

如果为0,则不支持(0x0C-0x0F)寄存器

如果为1,除了Fn0,所有function都会根据SD主机要求挂起或者恢复

当program_reg [6] 为1时,该寄存器为 1

1’b1

S4MI

RO

[4],表示SDIO卡支持在4bit多Block数据传输模式下,向主机产生中断。

0:不支持在Block传输间产生中断,在这种情况下,只要IENx =1,SDIO还是可以在其他中断周期向主机发起中断

1:支持在Block传输间产生中断

当program_reg [7] 为 1时,该寄存器为 1

1’b1

E4MI

RW

[5],中断使能 。

允许4bit多Block模式下,在两block数据传输中间向主机产生中断。

0:不允许

1:允许

上电复位或者复位命令会使该寄存器清0

1’b0

LSC

RO

[6],

0:表示SDIO卡为全速设备

1:表示SDIO卡为低速设备

当program_reg [8] 为 1时,该寄存器为 1

1’b0

4BLS

RO

[7],

0:表示SDIO为低速模式设备或者不支持4bit模式

1:表示SDIO为低速模式设备,且支持4bit模式

当program_reg [9] 为 1时,该寄存器为 1

1’b1

0X09-0X0B

Common CIS pointer

RO

[23:0],指向SDIO卡共用 CIS(CIS0)的起始地址指针 。CIS0包含关于整个卡的信息。其访问空间为:0x001000- 0x017FFF 。指针以小端格式存储(LSB)。

24’h001000

0X0C

Bus Suspend

BS

RO

[0],总线状态 。

0:当前选中的function没有使用数据总线

1:当前选中的function( 用FSx或者用IO命令中的function number)正在执行将要在数据线上传输数据的命令

这个寄存器被主机用来决定哪个function当前正在使用数据总线 。

如果SDIO卡不支持挂起恢复功能 ,则该寄存器为0 .

任何访问CIA的操作不能挂起,该寄存器一直为1,即使BR寄存器为 1。

SPI模式下,只读,且为0.

1’b0

BR

RW

总线释放请求/状态。该寄存器用来请求选定的function(用FSx或者CMD53总function number选中)释放数据总线并挂起相关操作。

如果主机设置该寄存器为1,则选定的function将暂时停止在数据线上的数据传输 ,并挂起当前数据操作的命令。BR寄存器保持为1,直到释放过程完成 。一旦function被挂起,设备通过清零BS、BR来通知主机。主机可以通过读BR来监测挂起请求的执行状态,如果 BR为1,则挂起请求仍在执行。主机可以主动向BR写0来取消正在执行的挂起请求。

SPI模式下,只读,且为0.

4’h0

RO

[7:2],RFU

6’b0

0X0D

Function Select

FSx

RW

[3:0],在挂起/恢复操作中,用来选取 function [0-7] 。两种方法写FSx:

对CCCR执行IO写操作

新发起的IO命令将导致FSx设置为命令中的function number。

如果function当前被挂起, 向FSx写该function的number,则在读FSx时,将恢复该function的数据传输操作。返回的值将会是当前选中的 function 的number。

注:当读FSx时,如果BS=0,则FSx的值未定义。

4’b0000:Transaction of function 0 (CIA)

4’b0001- 4’b0111:Transaction to functions 1-7

4’b1000:Transaction of memory in combo card

4’b1001- 4’b1111:Not defined, reserved for future use

4’b0

RO

[3:1],RFU

3’b000

DF

RO

[7],恢复数据标志。向FSx写入function number,将 恢复选中function的数据传输。一旦数据传输恢复,DF寄存器将标明是否有更多的数据要传输。

0:在function被恢复后,没有更多数据要传输。

1:在function被恢复后,有更多数据要传输。

DF用来在4bit模式下,控制中断周期。如果为1 ,在function恢复后,有更多数据要传输,在这种情况下,中断周期被取消。如果为0,function在数据传输结束后恢复(在b usy情况下), 在这种情况下,在恢复后,没有数据传输,因此主机可以在function恢复后监测到中断周期的开始。

1’b0

0X0E

Exec Flags

EXx

RO

[7:0],执行标志位。主机通过这些bit位来决定所有 function [7-1] 执行命令的状态。 这些寄存器可以告知主机某一function正在执行命令,因此不能对该function发出新的命令 。

SPI模式下,只读,且为0.

8’h00

0X0F

Ready Flags

RFx

RO

[7:0],读标志位。主机通过这些寄存器可以得知对 function [7-1] 读写忙状态。如果一个function 正在执行一个写交易,对应的RFx bit清零标志着该function忙,没有准备好接收更多的数据。如果一个function正在执行一个读操作,对应的RFx bit清零,则标明读数据无效,如果为1,则标明读数据可以传输。

SPI无效,只读,且为0

8’h00

0X10-0X11

FN0 Block Size

RW

[15:0],Fn0对应的Block传输时,Block size大小。最大2048Byte,最小1Byte。存储方式为小段格式(LSB)

16’h00

0X12

Power Control

SMPC

RO

[0],支持主机功耗控制。

0:SDIO总电流小于200mA ,即使所有function都有效(IOEx=1) 。EMPC、SPS、EPS都为0 。

1:SDIO总电流可以超过200 mA。EMPC、SPS、EPS有效。

1’b1

EMPC

RO

[1],主机功耗控制使能。

0:SDIO卡总电流小于200mA。SDIO卡自动切换function(s)到低电流模式或者不允许一些function使能,而其忽略EPS的值, 从而使卡的电流小于等于200mA 。

1:SDIO卡总电流可以超过200mA,且SPS和EPS有效。主机根据自己提供电流的能力使用FBR中的SPS、EPS以及IOEx 使能更大电流的function。

1’b0

RO

[7:2],RFU

0X13

High-Speed

SHS

RO

[0],表示SDIO卡支持高速

0:不支持高速

1:支持高速

1’b1

EHS

RW

[1],高速使能

0:SDIO卡工作在缺省速度下,最高频率25MHZ

1:SDIO卡可以工作在高速模式下,最高频率50MHZ

1’b0

RO

[7-2],RFU

0X14-0XEF

RFU

RO

Reserved for Future Use (RFU)

8’b0

0XF0-0XFF

Reserved for Vendors

RO

Area Reserved for Vendor Unique Registers

8’b0

0X100

I/O Device Interface Code

RO

[3:0],标志 Fn1为什么样的设备。

通过寄存器CIA [15:12]可编程。

4’h0 No SDIO standard interface supported by this function

4’h1 This function supports the SDIO Standard UART

4’h2 This function supports the SDIO Type-A for Bluetooth standard interface

4’h3 This function supports the SDIO Type-B for Bluetooth standard interface

4’h4 This function supports the SDIO GPS standard interface

4’h5 This function supports the SDIO Camera standard interface

4’h6 This function supports the SDIO PHS standard interface

4’h7 This function supports the SDIO WLAN interface

4’h8 This function supports the Embedded SDIO-ATA standard interface

4’h7

RFU

RO

[5:4],RFU

2’b00

Function supports CSA

RO

[6],

0:Fn1不支持CSA

1:Fn1支持且有CSA

可以通过寄存器CIA[16]编程

1’b0

Function CSA enable

RW

[7],

0:不允许访问CSA

1:允许访问CSA

1’b0

0X101

Extended standard I/O device type code

RO

[7:0],I/O Device Interface Code的扩展

通过可以通过寄存器CIA[24:17]编程

8’b0

0X102

SPS

RO

[0],标明Fn1是否有功耗选择

0:没有功耗选择

1:有两个功耗选择,可以通过EPS选择

通过可以通过寄存器CIA[25]编程

1’b0

EPS

RW

[1],功耗选择

0:Fn1工作在高电流模式

1:Fn1工作在低电流模式

1’b0

RO

[7:2],RFU

6’b0

0X103 - 0X108

RO

RFU

0

0X109 - 0X10B

Address pointer to function CIS1

RO

[16:0],Fn1的CIS地址指针,即CIS1,指示主机访问Fn1的CIS起始地址。存储方式为LSB小段格式。

17’h02000

RO

[23:17], RFU

7’b0

0X10C - 0X10E

Address pointer to function CSA

RW

[23:0],指向CSA的24bit地址指针,主机通过CSA访问窗口访问CSA后,该指针自动加1.

地址采用小段格式 存储(LSB)

24’h00 0000

0X10F

Data access window to CSA

RW

[7:0],对CSA的读写窗口。对该地址写操作时,对应的数据会通过本窗口写入CSA 24bit地址指针所指示的地址中,对该地址读操作时,从24bit CSA地址指针所指示的地址读取数据,通过本窗口送给主机。

8’b00

0X110 - 0X111

Function 1 IO Block Size

RW

[15:0],16bit的寄存器,用来设置IO block size。最大的 block size为2048Byte,最小为1。

该数据以小端模式存储(LSB)。

16’b0

0X1000 - 0X1010

CIS0

RO

主机访问Fn0的CIS地址空间,即主机通过这个地址空间段访问CIS0.本SDIO 卡中支持最多17个字节的CIS0

0X2000 - 0X2133

CIS1

RO

主机访问Fn1的CIS地址空间,即主机通过这个地址空间段访问CIS1。本SDIO卡支持CIS1的字节数据为55~ 308.

RFU

RFU

SDIO Fn1 寄存器

Fn1寄存器为SDIO协议分配给function1的地址空间,其地址范围为:0x00000~0x1FFFF,共128K。

由于芯片内部AHB总线地址位宽为32位,SDIO无法使用17位地址直接对芯片内部进行访问,因此在设计中, 需要完成一次地址映射。具体映射关系如下表:(FN1访问空间)

表 91 SDIO Fn1地址映射关系

SDIO主机访问窗口

对应实际理地址空间

实际物理地址空间内容

0X0000 ~ 0X00FF

0X0000 ~ 0X00FF

SDIO模块内部寄存器地址空间。

0X1000 ~ 0X1FFF

可配置

CIS0物理空间,具体物理空间由固件配置。

0X2000 ~ 0X2FFF

可配置

CAPINVS1物理空间,具体物理空间由固件配置。

0X4000 ~ 0X4FFF

可配置

下行和上行cmd物理空间,具体物理空间地址由固件配置。

0X5000 ~ 0X5FFF0X15000 ~ 0X15FFF

可变

送buffer地址空间,具体根据sdio_txbd中的指示。

0X6000 ~ 0X7FFF0X16000 ~ 0X17FFF

可变

收buffer地址空间,具体根据sdio_rxbd中的指示。

0X8000 ~ 0X9FFF

0X0E000000 ~ 0X0E002000

AHB总线config地址空间。

0XA000 ~ 0XBFFF

0X0F000000 ~ 0X0F002000

AHB总线APB地址空间。

驱动应该避免访问超出以上范围的空间,这样做可能会带来意想不到的结果。

其中第一项地址空间寄存器是在SDIO内部,并且只能由SDIO HOST访问;其他地址空间的访问将根据描述映射到芯片 内部其他空间中。

本节只介绍SDIO 0x0000 ~ 0x00FF地址空间中的寄存器,这些寄存器由SDIO 主机通过CMD52命令直接访问, 偏移地址即为访问地址,功能号为1。

表 92 SDIO Fn1部分寄存器(供HOST访问)

偏移地址

名称

位宽

访问

描述

复位值

0X00~0X03

RO

RSV

0X04

[7:1]

RO

RSV

7’b0

int_read _data

[0]

RW

上行数据中断。高有效,写1清零。

在读取0x1C时,也会被自动清0。

1’b0

0X05

[7:1]

RO

RSV

7’b0

int_mask

[0]

RW

对应int_src的屏蔽使能信号。1则屏蔽相应中断。

1’d0

0X06

[7:2]

RO

RSV

6’b0

wlan_awake _stts

[0]

RO

当前WLAN状态:

1为ACTIVE;0为SLEEP。

1’b1

0X1C

dat_len0

[6:0]

RO

上行数据长度高7bit。共12bit,低5bit在0x1D中。

7’b0

dat_vld

[7]

RO

1’b1

1’b1

0X1D

dat_len1

[7:3]

RO

上行数据长度低5bit。共12bit,高7bit在0x1C中。

5’b0

[2:0]

RO

RSV

3’b0

0X1E

RO

RSV

0X1F

[7:2]

RO

RSV

6’b0

down _cmdbuf _vld

[1]

RO

下行命令 buffer 可用,1有效。

1’b1

txbuf_vld

[0]

RO

下行数据buffer可用。1有效,表示存在可用的发送buffer。

1’b0

0X20

wlan_wake _en

[0]

RW

SLEEP状态下SDIO下发的芯片唤醒使能,高有效。

芯片被唤醒后,此位将被硬件自动清0。

1’b0

0X21

[7:1]

RO

RSV

7’b0

fn1_rst

[0]

RW

软复位,1有效。

软件写1后,(即芯片wlan部分电路)被复位,写0后,function1复位被释放。

1’b0

0X22

[7:1]

RO

RSV

7’b0

fn1_recov

[0]

RW

错误恢复使能,1有效,命令response结束后,该位自动清0。

该功能用来完成fn0/fn1 io abort相同的功能,当存在cmd异常或者提前结束命令时,可以将此寄存器置1, 来完成io abort操作。

由于在某些bus driver版本中,io abort命令受限制(即该寄存器 访问地址空间受限 ),不允许用户驱动使用, 此时向该寄存器写1可以取代io abort操作,并产生相同的效果 。

1’b0

SDIO AHB接口从设备寄存器

下面的寄存器,在SDIO从设备初始化的时候使用。

传输数据时,需要和wrapper控制器配合使用,Wrapper控制器的部分参考HSPI部分说明文档。

表 93 SDIO AHB总线寄存器

偏移地址

名称

位宽

访问

描述

复位值

0X0000 0X0004

RO

Rsv

0X0008

CIS function0 address

[31:0]

RW

CIS0在系统内部memory中存储的偏移地址。

CIS0实际存储起始地址 =0x01000 (读命令起始地址 )+该偏移地址

32’b0

0X000C

CIS function1 address

[31:0]

RW

CIS1在系统内部memory中存储的偏移地址。

CIS1实际存储起始地址=0x02000 (读命令起始地址 )+该偏移地址

32’b0

0X0010

CSA address

[31:0]

RW

固件初始化时设置访问CSA的便宜地址,其原理和CIS设置相同。本设计中不支持CSA。

32’b0

0X0014

Read address

[31:0]

RW

用来设置DMA从memory读取数据的起始地址。配合Data Port寄存器可以实现对系统内部 memory的读操作(即访问地址为0x00+ Read address)。在本设计中,没有采用这种方法,因此缺省为0

32’b0

0X0018

Write address

[31:0]

RW

用来设置DMA向memory写数据的起始地址。配合Data Port寄存器可以实现对系统内部 memory的写操作(即访问地址为0x00+ write address)。在本设计中,没有采用这种方法,因此缺省为0

32’b0

0X001C

AHB Transfer count

[20:0]

RW

SDIO设备通知主机,在将发起的读数据操作中,需要读取多少字节数据。

[23:21]RFU

32’b0

0X001F

RO

rsv

0X0020

SDIO Transfer count

[20:0]

RO

一次数据传输中,从主机向SDIO设备下发的字节数 。当数据传输完成后,通过该寄存器高速设备内部下发的字节数。

[31:21]RFU

32’b0

0X0024

CIA register

RW

[3:0]:CCCR Revision。缺省为4’h2

4’h0 CCCR/FBR Version 1.00

4’h1 CCCR/FBR Version 1.10

4’h2 CCCR/FBR Version 1.20

[7:4]SDIO Revision 。缺省为4’h3

4’h0 SDIO Specification 1.00

4’h1 SDIO Version 1.10

4’h2 SDIO Version 1.20

4’h3 SDIO Version 2.0

[11:8]SD Revision。缺省为4’h2

4’h0 SD Physical Specification 1.01

4’h1 SD Physical -Spec-1.10

4’h2 SD Physical Spec 2.0

[15:12]IO-Device Code。缺省为 4’h7,即本产品为WLAN设备 。

[16]csa_support, 缺省为1.

0:不支持CSA

1:支持CSA

初始化时,固件需要配置该寄存器为 0。

[24:17], Extended IO-device code

缺省为8’b0。

Fn1的standard IO-device code的扩展。

[25],SPS ,缺省为1,即Fn1支持高功耗

0:不支持

1:支持

[26],SHS ,缺省为1,支持高速

0:不支持

1:支持

[31:27]:RFU

32’h06017232

0X0028

Program Register

RW

[0],function ready。hc8051在完成SD初始化所需要的Fn1寄存器配值后,置位该寄存器,向SD主机标明 Fn1已经准备好工作。缺省为0

0:Fn1 not ready

1:Fn1 ready

[1],fun1 read data ready。Fn 1准备好向SD主机送数据时,置位该寄存器。当主机响应读中断后,读中断源寄存器(Interrupt Identification),该bit自动清零。缺省为0.

0:无数据送给主机

1:有数据送给主机。

[2],SCSI。支持连续的SPI中断。缺省为1 .

0:不支持

1:支持

[3],SDC。标明SDIO卡在数据传输同时,支持执行CMD52 命令。缺省为1

0:不支持

1:支持

[4],SMB。 SDIO卡支持CMD53的Block传输。缺省为1.

0:不支持

1:支持

[5],SRW。标明SDIO卡支持读等待。缺省为1.

0:不支持

1:支持

[6],SBS。 标明SDIO卡支持挂起/恢复。缺省为1

0:不支持

1:支持

[7],S4MI 。标明SDIO卡支持在4bit多Block数据传输时产生中断。缺省为1。

0:不支持

1:支持

[8],LSC。标明SDIO卡是低速设备。缺省为0.

0:全速设备

1:低速设备

[9],4BLS 。标明SDIO卡是一个低速设备,但支持4bit数据传输。缺省为1 。

0:不支持

1:支持

[10],card ready。属于SD时钟域的信号,上电复位释放后 ,该寄存器自动变为1,标明SDIO(接口部分)已经准备好。固件监测到该信号,即可以配置初始化时需要的Fn1寄存器。上电复位时为0 .

[15:11], RFU。缺省为0

16’h 02fc

0X0034

OCR register

RW

[23:0],工作情况寄存器,内部可编程,主要用来与主机工作电压范围匹配。缺省为 :24’hff8 000。

寄存器Bit 支持电压范围

0-3 Reserved

4 Reserved

5 Reserved

6 Reserved

7 Reserved

8 2.0-2.1

9 2.1-2.2

10 2.2-2.3

11 2.3-2.4

12 2.4-2.5

13 2.5-2.6

14 2.6-2.7

15 2.7-2.8

16 2.8-2.9

17 2.9-3.0

18 3.0-3.1

19 3.1-3.2

20 3.2-3.3

21 3.3-3.4

22 3.4-3.5

23 3.5-3.6

[31:24], 8’b0

32’h00ff 8000

0X0038

RW

rsv

32’h0

0X003C

CD_State Register

RW

[0],标明SD dat[3]数据线上拉电阻的状态 。

0:上拉有效

1:上拉无效

片内AHB总线都可以对该寄存器访问。

注:AHB对该寄存器的写操作结果会间接修改CCCR7[7] CD的值。

[31:1],RFU

32’b0

0X0040

Fn1_Ena Register

RW

[0],标明Fn1是否被使能。

0:禁止

1:使能

片内AHB总线都可以对该寄存器访问。

注:AHB对该寄存器的写操作结果会间接修改CCCR1[1] IOE1的值。

[31:1],RFU

32’b0

HSPI/SDIO Wrapper控制器

功能概述

配合接口控制器(SDIO和HSPI)完成主机和芯片内部缓存之间数据的DMA操作。包括上下行数据缓存的软硬件交互控制,发送与接收缓存的填充与释放,上行数据中断的产生等等。

SDIO和HSPI都通过wrapper控制器和上位机交互数据,两者的控制命令以及流程是相同的。为了描述方便,部分寄存器加上了前缀SDIO。相应寄存器操作同样适用于HSPI

需要注意的是,对于前缀是SDIO_TX相关寄存器,控制的是设备接收数据,对于SDIO_RX相关寄存器,控制的是设备发送数据。

对于寄存器中出现的cmd字段,只是从描述上和数据帧区分,并不表示命令通道只能传输命令,也可以用来传输数据。在这里命令和数据的区别是,命令通道只有一块缓存区,并且缓存长度一般会少于256字节,而数据通道有多块缓存区,每块缓存区的长度都超过1K,多块缓存构成一个链表结构,具体长度由软件配置。由于数据帧的 这种链表缓存结构,传输速率会快于命令通道。

主要特性

  • 支持字对齐的数据搬移

  • 支持DMA功能

  • 支持链表结构管理

  • 支持中断产生

  • 最大可接收4096字节数据

功能描述

上行数据接收功能

上行方向是指主设备(SDIO或者HSPI)向从设备(W800)发送数据的方向。

当主设备向从设备发送数据时,SDIO或者HSPI模块接收到数据后,会通过WRAPPER把数据链接到接收BD,并产生中断通知应用软件处理数据。

接收BD描述符:

图 26 SDIO接收BD描述符

图 26 SDIO接收BD描述符

当W800的SDIO模块或者HSPI模块检测到接收使能有效后,读取RXBD,并判断Vld的标志。

下行数据搬移功能

当W800有数据要向主设备发送数据的时候,软件先把发送描述准备好,然后,通知WRAPPER把数据搬移,WRAPPER通过SDIO或者HSPI的中断信号通知主设备来读取要发送的设备,当数据发送完成后,WRAPPER产生发送完成中断通知程序。

发送BD描述符:

图 27 SDIO发送BD描述符

图 27 SDIO发送BD描述符

寄存器描述

寄存器列表

表 94 WRAPPER控制器寄存器

偏移地址

名称

缩写

访问

描述

复位值

0X0000

WRAPPER 中断状态寄存器

INT_STTS

RW

命令或者数据帧中断状态

0X0000

0X0004

WRAPPER 中断配置寄存器

INT_MASK

RW

命令或者数据帧中断是否屏蔽

0X0000

0X0008

WRAPPER 上行命令就绪寄存器

UP_CMD _AVAIL

RW

上行命令是否就绪

0X0000

0X000c

WRAPPER 下行命令 buf 就绪寄存器

DOWN_CMD _BUF _AVAIL

RW

下行命令buf是否就绪

0X0000

0X0010

SDIO_TX 链接使能寄存器

SDIO_TX_BD _LINK_EN

RW

指示 sdio_txbd 链表描述符是否有效

0X0001

0X0014

SDIO_TX链接地址寄存器

SDIO_TX_BD _ADDR

RW

当前 sdio_txbd 指向的地址,需要字对齐,初始化时需要配置

0X0000

0X0018

SDIO_TX 使能寄存器

SDIO_TX_EN

RW

SDIO发送帧使能

0X0000

0X001c

SDIO_TX状态寄存器

SDIO_TX _STTS

RO

SDIO发送状态

0X0000

0X0020

SDIO_RX 链接使能寄存器

SDIO_RX_BD _LINK_EN

RW

指示 sdio_rxbd 链表描述符是否有效

0X0001

0X0024

SDIO_RX 链接地址寄存器

SDIO_RX_BD _ADDR

RW

当前 sdio_rxbd 指向的地址,需要字对齐,初始化时需要配置

0X0000

0X0028

SDIO_RX使能寄存器

SDIO_RX_EN

RW

SDIO接收帧使能

0X0000

0X002c

SDIO_RX状态寄存器

SDIO_RX _STTS

RO

SDIO接收状态

0X0000

0X0030

WRAPPER CMD BUF基地址寄存器

CMD_BUF _BASE_ADDR

RW

下行cmd buf 基地址

0X0000

0X0034

WRAPPER CMD BUF SIZE寄存器

CMD_BUF _SIZE

RW

Cmd buf字节大小

0X0064

WRAPPER中断状态寄存器

表 95 WRAPPER中断状态寄存器

访问

操作说明

复位值

[31: 4]

RO

保留

[3]

RW

int_down_cmd 下行cmd帧完成中断。写1清0。

1’b0

[2]

RW

int_up_cmd 上行cmd帧字完成中断。写1清0。

1’b0

[1]

RW

int_sdio_txfrm 下行数据帧完成中断。写1清0。

1’b0

[0]

RW

int_sdio_rxfrm 上行数据帧完成中断。写1清0。

1’b0

WRAPPER中断配置寄存器

表 96 WRAPPER中断配置寄存器

访问

操作说明

复位值

[31: 4]

RO

保留

[3]

RW

int_mask_down_cmd 下行cmd帧完成中断屏蔽寄存器。1为屏蔽,下同。

1’b0

[2]

RW

int_mask_up_cmd 上行cmd帧完成中断屏蔽寄存器。

1’b0

[1]

RW

int_mask_sdio_t xfrm 下行数据帧完成中断屏蔽寄存器。

1’b0

[0]

RW

int_mask_sdio_r xfrm 上行数据帧完成中断屏蔽寄存器。

1’b0

WRAPPER上行命令就绪寄存器

表 97 WRAPPER上行命令就绪寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

存在上行cmd帧时,固件置此位为1。当完成上行cmd传输时,硬件自动将其清0,并产生int_up_cmd中断。

1’b0

WRAPPER下行命令buf就绪寄存器

表 98 WRAPPER下行命令buf就绪寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

发送完下行cmd后,硬件将此位清0,同时产生中断。当固件处理完成此下行命令后,将此位置1。

1’b0

SDIO TX链接使能寄存器

表 99 SDIO TX链接使能寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

sdio_txbd链接使能,高有效。

若此位有效,硬件在处理完成一个sdio_txbd描述符,直接处理next_sdio_txbd_addr指向的下一个描述符 。若此位无效,硬件在处理完成一个sdio_txbd后,会立即停止。

对HSPI同样适用。

1’b1

SDIO TX链接地址寄存器

表 100 SDIO TX链接地址寄存器

访问

操作说明

复位值

[31: 0]

RW

当前sdio_txbd字节地址,软件需要严格保证字对齐,下同。

初始时固件需要配置此寄存器,硬件每次处理完成一个发送buf后,将sdio_txbd描述符中的next_sdio_txbd_addr更新至此寄存器。

对HSPI同样适用。

32’h0

SDIO TX使能寄存器

表 101 SDIO TX使能寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

SDIO发送帧使能,高有效。

固件在组建完成每个描述符sdio_txbd描述符后,将此位置1,以通知SDIO模块存在新的发送描述符。SDIO模块检测到此位有效,则启动读取当前的sdio_txbd,并完成发送帧流程。

硬件自动完成此寄存器的清0操作 。

对HSPI同样适用。

1’b0

SDIO TX状态寄存器

表 102 SDIO TX状态寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

SDIO发送状态。

0:SDIO由于没有可用发送描述符,已停止发送流程

1:SDIO处于发送过程中

对HSPI同样适用。

1’b0

SDIO RX链接使能寄存器

表 103 SDIO RX链接使能寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

sdio_rxbd链接使能,高有效。

若此位有效,硬件在处理完成一个sdio_rxbd描述符,直接处理next_sdio_rxbd_addr指向的下一个描述符 。若此位无效,硬件在处理完成一个sdio_rxbd后,会立即停止。

对HSPI同样适用。

1’b1

SDIO RX链接地址寄存器

表 104 SDIO RX链接地址寄存器

访问

操作说明

复位值

[31: 0]

RW

当前sdio_rxbd字节地址 。

初始时固件需要配置此寄存器,硬件每次处理完成一个发送buf后 ,将sdio_rxbd描述符中的next_sdio_rxbd_addr更新至此寄存器。

对HSPI同样适用。

32’h0

SDIO RX使能寄存器

表 105 SDIO RX使能寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

SDIO接收帧使能,高有效。

固件在组建完成每个描述符sdio_rxbd描述符后,将此位置 1,以通知SDIO模块存在新的接收描述符。SDIO模块检测到此位有效,则启动读取当前的sdio_txbd,并完成接收帧流程。

硬件自动完成此寄存器的清0操作 。

对HSPI同样适用。

1’b0

SDIO RX状态寄存器

表 106 SDIO RX状态寄存器

访问

操作说明

复位值

[31: 1]

RO

保留

[0]

RW

SDIO接收状态。

0:SDIO由于没有有效的上行描述符和上行命令,已停止接收流程

1:SDIO处于接收过程中

对HSPI同样适用。

1’b0

WRAPPER CMD BUF基地址寄存器

表 107 WRAPPER CMD BUF基地址寄存器

访问

操作说明

复位值

[31: 0]

RW

下行cmd buf基地址。

上行cmd buf基地址为该基地址加上cmd_buf_size。

32’h0

WRAPPER CMD BUF SIZE寄存器

表 108 WRAPPER CMD BUF SIZE寄存器

访问

操作说明

复位值

[31:12]

RO

保留

[11: 0]

RW

cmd buf字节大小,必须为4字节的整数倍。

12’d64

SDIO HOST设备控制器

功能概述

SDIO HOST 设备控制器提供了一个能够访问安全数字输入输出卡(SDIO)以及MMC卡的数字接口。能够访问兼容SDIO 2.0 协议的SDIO 设备和SD卡设备。主要接口有CK,CMD以及4根数据线。

主要特性

  • 兼容SD卡规范1.0/1.1/2.0(SDHC)

  • 兼容SDIO 内存卡规范1.1.0

  • 兼容MMC规范2.0~4.2

  • 可配置接口时钟速率,支持主机速率0~50MHz,

  • 支持标准MMC接口

  • 支持最大1024字节的Block

  • 支持软复位功能

  • 自动Command/Response CRC 生成/校验;

  • 自动数据 CRC 生成/校验;

  • 可配置timeout检测;

  • 支持SPI、1比特SD和4比特SD模式

  • 支持DMA 数据传输

功能描述

寄存器描述

寄存器列表

偏移地址

寄存器名称

名称

位宽

属性

说明

复位值

0x00

mmc_ctrl

RSV

[15:11]

RO

[10]

RW

SDIO 读等待使能

‘1’ : 使能SDIO读等待

‘0’ : 关闭SDIO读等待

1’b0

[9]

RW

SDIO 中断使能

‘1’ : SDIO 中断使能

‘0’ : SDIO 中断关闭

1’b0

[8]

RW

SDIO 模式使能

‘1’ : SDIO

‘0’ : SD/MMC

1’b0

[7]

RW

SD / MMC / SDIO 接口数据宽度

‘1’ : 4 bits

‘0’ : 1 bit

1’b0

[6]

RW

SD / MMC / SDIO 传输模式

‘1’ : High-Speed Mode

‘0’ : Low-Speed Mode

1’b1

[5:3]

RW

SDIO / MMC / SDIO 端口时钟速率选择

参考Table 2

3’b000

[2]

RW

SDIO / MMC / SDIO 接口驱动模式选择

‘1’ : open _DrainMode

‘0’ :Push - Pull Mode

1’b1

[1]

RW

信号模式选择

‘1’ : 自动选择传输模式

‘0’ :使用 mmc_port 寄存器选择

1’b0

[0]

RW

端口模式选择

‘1’ : MMC mode

‘0’ :SPI mode

1’b1

0x04

mmc_io

RSV

RO

[15:10]

6’d0

RW

[9]

SDIO cmd12 / IO Abort 标志

‘1’ : 将当前命令标志为cmd12 / IO Abort

‘0’ : 标志当前命令不是cmd12 / IO Abort

1’b0

RW

[8]

SDIO 命令属性

‘1’ : 标记当前命令后有数据块;

’0‘ : 标记当前命令后没有数据块和命令响应;

1’b0

RW

[7]

Enable auto generate 8 null clock

after response / command or single block data

在响应/命令或者单个数据块后自动生成8个null 时钟功能

‘1’ : 使能

‘0’ : 关闭

1’b0

RW

[6]

Enable auto receive response after command

在命令后自动接收响应功能

‘1’ : 使能

‘0’ : 关闭

1’b0

RW

[5]

SD / MMC / SDIO 端口时钟线上8个 null 时钟生成

‘1’ : 生成8个 null 时钟

‘0’ : 根据bit 3 设置接收响应/发送命令

1’b0

RW

[4]

为CID 和 CSD 读设计。当发送CID或 者CSD命令时 ,SD / MMC / SDIO 卡设备会在CMD线上回复136bit CID 或者11 CSD 数据。当设置此bit为1时,CID 或者 CSD 数据将存储在命令 buffer 区域的 [135:8] 中;

1’b0

RW

[3]

bit[5] 为‘0’时响应/命令选择

‘1’: 接收响应

‘0’: 发送命令.

1’b0

RW

[2]

设置 自动 8 null时钟/命令/响应传输功能

‘1’: 使能自动 8 null时钟/命令/响应传输

‘0’: 关闭自动 8 null时钟/命令/响应传输 .

根据bit 5 与 bit3 设置,生成8个null时钟,接收response或者传输命令。当传输完成,此bit自动清除;

1’b0

RW

[1]

设置数据传输方向

’1‘ : 读数据;

‘0’ : 写数据;

1’b0

RW

[0]

设置自动数据传输

‘1’ : 使能自动数据传输

‘0’ :关闭自动数据传输.

当数据传输完毕,此bit将被自动清除;

1’b0

0x08

mmc_bytecntl

RW

[15:0]

数据传输字节计数寄存器

16’h0200

0x0C

mmc_tr_blockcnt

RO

[15:0]

多数据块传输时,已完成数据块计数器

16’h0000

0x10

mmc_crcctl

RW

[7]

SD / MMC / SDIO port CMD Line CRC circuit enable.

SD / MMC / SDIO 端口 CMD 线 CRC 功能

‘1’: 使能.

‘0’: 关闭.

1’b0

RW

[6]

SD / MMC / SDIO 端口数据线 CRC 功能

‘1’: 使能.

‘0’: 关闭.

1’b0

RW

[5]

使能自动CRC 检查 crc_status

‘1’: 使能,当crc_status !=3’b010时,会产生crc 状态中断,写数据传输将被stop命令中断, 并且mmc_io[0] 或者 mmc _io _mbctl [2:0] 将被清除;

0: 关闭;

1’b0

RW

[4]

在response之前读多数据块功能

‘1’: 使能.

‘0’ : 关闭

1’b0

RW

[3:2]

DAT CRC selection.

DAT CRC 选择

参考Table 4

1’b0

RO

[1]

CMD CRC 错误.

1’b0

RO

[0]

DAT CRC 错误

1’b0

0x14

cmd_crc

RSV

RO

[7]

RSV

1’b0

RO

[6:0]

CMD CRC 寄存器值

7’d0

0x18

dat_crcl

RO

[7:0]

The DAT CRC 低位寄存器值

NA

0x1C

dat_crch

RO

[7:0]

The DAT CRC 高位寄存器值

NA

0x20

mm_port

RW

[7]

SD / MMC / SDIO port 时钟线信号.

1’b0

RW

[6]

SD / MMC / SDIO port CMD 线信号

1’b1

RW

[5]

SD / MMC / SDIO port 数据线信号

1’b1

RW

[4]

自动 检查Ncr 超时功能

1’: 使能自动检查 Ncr 超时.

‘0’ :关闭自动检查 Ncr 超时

1’b1

RW

[3:0]

Ncr 超时计数值

(SD/MMC /SDIO 时钟数).

4’hF

0x24

mmc _int _mask

RSV

RO

[15:9]

7’d0

[8]

SDIO 数据线 1 中断 屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[7]

CRC 状态 token 错误中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[6]

命令和响应 Ncr 超时中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[5]

多数据块超时中断 屏蔽.

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[4]

多数据块传输完成中断 屏蔽.

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[3]

命令CRC 错误中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[2]

数据CRC 错误中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[1]

数据传输完成中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

[0]

命令传输完成中断屏蔽

‘1’: 不屏蔽

‘0’: 屏蔽

1’b0

0x28

clr _mmc _int

RSV

RO

[15:9]

7’d0

RW

[8]

W: 清除SDIO 数据线1 中断

R: SDIO 数据线1 中断状态

1’b0

RW

[7]

W: 清除CRC 状态 token 错误 中断

R: CRC 状态 token 错误 中断状态;

当此bit 为1时,判断mmc_sig[6:4]

1’b0

RW

[6]

W:清除命令和响应 Ncr 超时中断;

R:命令和响应 Ncr 超时中断状态;

1’b0

RW

[5]

W: 清除多数据块超时中断;

R: 多数据块超时中断状态;

1’b0

RW

[4]

W: 清除多数据块传输完成中断;

R: 多数据块传输完成中断状态:

1’b0

RW

[3]

W: 清除命令CRC 错误中断;

R: 命令CRC错误中断状态;

1’b0

RW

[2]

W: 清除数据CRC 错误中断;

R: 数据CRC错误中断状态;

1’b0

RW

[1]

W: 清除数据传输完成中断;

R: 数据传输完成中断状态;

1’b0

RW

[0]

W: 清除命令传输完成中断;

R: 命令传输完成中断状态;

1’b0

0x2C

mmc _cardsel

RW

[7]

SD / MMC / SDIO 控制器使能

‘1’: 使能

‘0’: 关闭

1’b0

RW

[6]

使能SD / MMC / SDIO 卡设备时钟线

‘1’: 使能

‘0’: 关闭

1’b1

RW

[5:0]

SD / MMC / SDIO 时间基准系数

使用此寄存器建立1MHz时钟;

1MHz = Fhclk / ((mmc _cardsel [5:0 ] + 1) * 2)

6’d0

0x30

mmc_sig

RW

[7]

SD / MMC / SDIO port CMD线信号

当读取此寄存器时,SDIO控制器将在时钟线上生成一个时钟脉冲。并且在时钟上升沿时CMD线上状态将被存储到此寄存器中 。

1’b1

RW

[6:4]

CRC status [2:0] 当写数据CRC status token时;

3’b111

RW

[3]

SD / MMC / SDIO port DAT3 数据信号.

1’b1

RW

[2]

SD / MMC / SDIO port DAT2数据信号.

1’b1

RW

[1]

SD / MMC / SDIO port DAT1数据信号.

1’b1

RW

[0]

SD / MMC / SDIO port DAT0数据信号.

1’b1

0x34

mmc _io _mbctl

RW

[7:6]

SD / MMC / SDIO NAC 超时范围选择

参考Appen dix 2 -Table5.

2‘b0

RW

[5:4]

SD / MMC / SDIO Busy timeout scale selection.

SD / MMC / SDIO 设备忙超时范围选择.

参考Appen dix 2 -Table 6

2’d1

RW

[3]

SD / MMC / SDIO port 时钟线极性

1:时钟下降沿发送,上升沿采集;

0:时钟上升沿发送,下降沿采集;

1’b0

RW

[2]

设置SD / MMC / SDIO 端口全自动命令和多数据块传输

‘1’: 使能

‘0’: 关闭

设置此bit 为1(mmc_io [7:6] ==11)会触发一个SD / MMC / SDIO 的命令,响应,8 null 时钟,多数据块传输。当数据传输完毕,此bit会自动清零。

1’b0

RW

[1]

Select multiple block data transfer direction.

设置多数据块传输方向

‘1’ : 读数据.

‘0’ : 写数据.

1’b0

RW

[0]

Set SD / MMC / SDIO port auto multiple block data ransfer .

设置SD / MMC / SDIO 端口自动多数据块传输

‘1’ : 使能.

‘0’ : 关闭.

设置此bit为1(mmc_io [7:6] ==11)会触发一个SD / MMC / SDIO 的多数据块传输 。数据块个数在 mmc_blocknt

寄存器中设置。当数据传输完毕,此bit会自动清零。

1’b0

0x38

mmc_blockcnt

RW

[15:0]

Data block number register.

数据块个数寄存器

配置此寄存器定义在多数据块传输中总共传输数据块个数。

16’h0001

0x3C

mmc_timeoutcnt

RW

[7:0]

Data transfer timeout count register.

数据传输超时计数器

Time = Scale * bit [7:0 ].

Scale 通过寄存器mmc_io_mbctl [7:6 ] / [5:4] 定义;

8’h40

0x40

cmd_buf0

RW

[7:0]

The cmd_buf byte 0.Mapped to command line bit [15:8]

命令buf 字节0,映射到命令线上 bit[15: 8]

8’h00

0x44

cmd_buf1

RW

[7:0]

The cmd_buf byte 1.Mapped to command line bit [23:16]

命令buf 字节1,映射到命令线上 bit [23: 16]

8’h00

0x48

cmd_buf2

RW

[7:0]

The cmd_buf byte 2.Mapped to command line bit [31:24]

命令buf 字节2,映射到命令线上 bit [31: 24]

8’h00

0x4C

cmd_buf3

RW

[7:0]

The cmd_buf byte 3.Mapped to command line bit [39:32]

命令buf 字节3,映射到命令线上 bit [39: 32]

8’h00

0x50

cmd_buf4

RW

[7:0]

The cmd_buf byte 4.Mapped to command line bit [47:40]

命令buf 字节4,映射到命令线上 bit [47: 40]

8’h00

0x54

cmd_buf5

RW

[7:0]

The cmd_buf byte 5. Mapped to command line bit [55:48]

命令buf 字节5,映射到命令线上 bit [55: 48]

8’h00

0x58

cmd_buf6

RW

[7:0]

The cmd_buf byte 6. Mapped to command line bit [63:56]

命令buf 字节6,映射到命令线上 bit [63: 56]

8’h00

0x5C

cmd_buf7

RW

[7:0]

The cmd_buf byte 7.Mapped to command line bit [71:64]

命令buf 字节7,映射到命令线上 bit [71: 64]

8’h00

0x60

cmd_buf8

RW

[7:0]

The cmd_buf byte 8.Mapped to command line bit [79:72]

命令buf 字节8,映射到命令线上 bit [79: 72]

8’h00

0x64

cmd_buf9

RW

[7:0]

The cmd_buf byte 9.Mapped to command line bit [87:80]

命令buf 字节9,映射到命令线上 bit [87: 80]

8’h00

0x68

cmd_buf10

RW

[7:0]

The cmd_buf byte 10.Mapped to command line bit [95:88]

命令buf 字节10,映射到命令线上 bit [95: 88]

8’h00

0x6C

cmd_buf11

RW

[7:0]

The cmd_buf byte 11. Mapped to command line bit [103:96 ]

命令buf 字节11,映射到命令线上 bit [103 :96]

8’h00

0x70

cmd_buf12

RW

[7:0]

The cmd_buf byte 12. Mapped to command line bit [111:10 4]

命令buf 字节12,映射到命令线上 bit [111 :104]

8’h00

0x74

cmd_buf13

RW

[7:0]

The cmd_buf byte 13.Mapped to command line bit [119:11 2]

命令buf 字节13,映射到命令线上 bit [119 :112]

8’h00

0x78

cmd_buf14

RW

[7:0]

The cmd_buf byte 14.Mapped to command line bit [127:12 0]

命令buf 字节14,映射到命令线上 bit [127 :120]

8’h00

0x7C

cmd_buf15

RW

[7:0]

The cmd_buf byte 15.Mapped to command line bit [135:12 8]

命令buf字节15,映射到命令线上 bit [135 :128]

8’h00

0x80

buf_ctrl

RW

[15]

数据缓冲清除使能

1: 触发数据缓冲清除;

0:保持

当写1后,此寄存器在一个时钟后自动清零;

1’b0

RW

[14]

DMA 请求屏蔽

0:不屏蔽;

1:屏蔽;

注意:请在使能dma之前配置此寄存器;在使能dma后再配置此寄存器无效果;

1’b0

RW

[13]

RSV

1’b0

RW

[12]

数据 FIFO 状态信号屏蔽配置

1:激活

0:默认

数据FIFO 状态信号,高有效;

读取卡设备时屏蔽FIFO full信号;

写卡设备时屏蔽 FIFO空信号;

1’b0

RW

[11]

设置缓冲访问方向

1: 写

0: 读

1’b0

RW

[10]

DMA 硬件接口使能:

1:使能DMA 接口;

0: AHB接口访问数据缓存;

当使用DMA接口时,当数据传输完成后将自动复位此bit( 单数据块传输或者多数据块传输 )

1’b0

RW

[9:2]

数据缓存数据水线设置;只有当buf_ctl[10]=1 时有效;

注意:数据缓存深度为 128个word,不要配置此寄存器大于127.

8’d0

RO

[1]

数据缓存空信号

1’b1

RO

[0]

数据缓存满信号

1’b0

0x100~0x2FF

data_buf

RW

数据缓存

NA

Table 2 Mmc_ctrl[5:3] 详细定义

Bit5

Bit4

Bit3

Speed

0

0

0

1/2 base clock

0

0

1

1/4 base clock

0

1

0

1/6 base clock

0

1

1

1/8 base clock

1

0

0

1/10 base clock

1

0

1

1/12 base clock

1

1

0

1/14 base clock

1

1

1

1/16 base clock

Note:当mmc_ctrl[6] = 1 ,控制器工作在高速模式时,base clk = hclk;

当mmc_ctrl[6] = 0 ,控制器工作在低速模式时,base clk = clk1m;

Clk1m= Fhclk/((mmc_cardsel[5:0]+1)*2);

Table 3 Mmc_io[7:0] 详细定义

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

操作模式

传输字节

x

x

x

x

x

0

x

0

无操作

N/A

x

x

1

x

0

Trig

x

0

生成8 null clk

N/A

0

0

0

x

0

Trig

x

0

发送命令

6

0

0

0

0

1

Trig

x

0

接收响应

6

0

0

0

1

1

Trig

x

0

接收响应

17

1

0

0

0

0

Trig

x

0

传输命令+生成8 null clk

N/A

0

1

0

0

0

Trig

x

0

传输命令+接收响应

N/A

1

1

0

0

0

Trig

x

0

传输命令+接收响应+生成 8 null clk

N/A

x

x

x

x

x

0

1

Trig

读取单个数据+8 null clk

mmc _bytecnt

x

x

x

x

x

0

0

Trig

写单个数据+8 null clk

mmc _bytecnt

Note:

  1. Table 3 中除了最后两行,其他操作会产生CMD DONE 中断;

  2. Table 3中最后两行操作会产生数据传输完成中断。

Table 4 mmc_crctrl[3:2] 详细定义

Bit3

Bit2

data_crcl 和 data_crch寄存器显示内容

0

0

DAT0 线上数据CRC值

0

1

DAT1 线上数据CRC值

1

0

DAT2 线上数据CRC值

1

1

DAT3 线上数据CRC值

Table 5 mmc_io[7:6] 和mmc_io_mbctl[2:0] 详细定义

Bit7

Bit6

Bit2

Bit1

Bit0

操作描述

传输字节数

mmc_io

mmc_io_mbctl

1

1

Trig

0

0

写多块命令+响应+8 null clock +数据

mmc _blokcnt

1

1

Trig

1

0

读多块命令+响应+8 null clock +数据

mmc _blokcnt

x

x

0

0

Trig

写多块数据

mmc _blockcnt

x

x

0

1

Trig

读多块数据

mmc _blockcnt

Note:

  1. Table 5 中前两列操作会产生多块数据完成中断,每块数据会产生数据完成中断,以及CMD DONE 中断;

2.当超时发生时,多块数据完成中断将不会产生,而会产生超时中断。

Table 6 mmc_io_mbctl[7:6] NAC超时中断单位选择

Bit7

Bit6

时间单位

0

0

1us

0

1

100us

1

0

10ms

1

1

1s

Table 7 mmc_io_mbctl[5:4] 端口超时中断单位选择

Bit7

Bit6

时间单位

0

0

1us

0

1

100us

1

0

10ms

1

1

1s

Note:

  1. 当使用DMA接口时,DMA使能需要先打开;

  2. 如果不使用中断,当传输命令/响应/8 null clock 时,可以查询mmc_io[2];当需要传输数据时,可以查询mmc_io[0];当传输多块数据时,可以查询mmc_io_mbctl[2]/mmc_io_mbctl[0];

  3. 当Ncr 超时发生时,数据传输会中断,控制器需要重新配置 一个新的传输;

SPI控制器

功能概述

SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI是一种高速、全双工、同步的通信总线。SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),包括 SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

主要特性

  • 既可作为SPI主设备,也可作为SPI从设备

  • 发送和接收通路各有8个字深度的FIFO

  • master支持motorola spi的4种格式(CPOL,CPHA),TI时序,macrowire时序

  • slave支持motorola spi的4种格式(CPOL,CPHA)

  • 支持全双工和半双工

  • 主设备支持bit传输,最大支持65535bit传输

  • 从设备支持各种长度byte的传输模式

  • 从设备输入的spi_clk最大时钟频率为系统APB时钟的1/6

功能描述

主从可配

SPI控制器既支持设备作为SPI通信主设备,也支持设备作为SPI通信从设备。通过设置SPI_CFG寄存器的Bit2可以来回切换设备主从角色。

多种模式支持

作为主设备时,通过设置SPI_CFG寄存器的Bit1(CPHA) 和 Bit0(CPOL),可以使其分别以MOTOROLA SPI的四种格式传输数据。CPOL是用来决定SCK时钟信号空闲时的电平,CPOL=0,空闲电平为低电平,CPOL=1时,空闲电平为高电平。CPHA是用来决定采样时刻的,CPHA =0,在每个周期的第一个时钟沿采样,CPHA=1,在每个周期的第二个时钟沿采样。还可以通过设置TRANS_MODE寄存器来设置主设备以TI时序或者microwire时序来传输数据,两种时序下的传输数据长度均可调。

作为从设备时,则只支持MOTOROLA SPI的四种格式,格式选择也是通过设置与作为主设备时相同的寄存器来实现。

高效的数据传输

FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。SPI控制器集成了两个(收发各一个)深度均为8个字的FIFO存贮器,以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统,从而提高了系统性能。可以通过设置MODE_C FG寄存器的Bit[8:6]和Bit[4:2]可以设置RXFIFO和TXFIFO的trigger level,以满足不同传输速率下的性能要求。FIFO的trigger level被触发后,就可以触发中断或者DMA,将数据从内存移到TXFIFO或者将将数据从RXFIFO搬移至内存。

寄存器描述

寄存器列表

表 109 SPI寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

通道配置寄存器

CH_CFG

RW

用以对收发通道的相关项进行一些配置

0X0000_0000

0X0004

SPI配置寄存器

SPI_CFG

RW

对SPI通信相关项进行配置

0X0000_0004

0X0008

时钟配置寄存器

Clk_CFG

RW

用以设置时钟分频系数

0X0000_0000

0X000C

模式配置寄存器

MODE_CFG

RW

配置传输模式

0X0000_0000

0X0010

中断控制寄存器

SPI_INT _MASK

RW

屏蔽或者使能相关中断

0X0000_00FF

0X0014

中断状态寄存器

SPI_INT _SOURCE

RW

用于查询中断源

0X0000_0000

0X0018

SPI状态寄存器

SPI_STATUS

RO

列举SPI通信中的相关状态

0X0000_0000

0X001C

SPI超时寄存器

SPI_TIME_OUT

RW

设置SPI通信超时

0X0000_0000

0X0020

数据发送寄存器

SPI_TX_DATA

RW

TX FIFO,用于存放待发送数据

0X0000_0000

0X0024

传输模式寄存器

TRANS_MODE

RW

设置传输模式

0X0000_0000

0X0028

数据长度寄存器

SLV_XMIT _LEN

RO

作为从设备时用于存放发送出去或者接收到的数据的长度

0X0000_0000

0X002C

RSV

保留

0X0000_0000

0X0030

数据接收寄存器

SPI_RX_DATA

RW/RO

RX FIFO,用于存放接收到的数据

0X0000_0000

通道配置寄存器

表 110 SPI通道配置寄存器

访问

操作说明

复位值

[31]

RSV

1’b0

[30:23]

RW

RX_INVALID_BIT

表示接收通路在开始接收时,前多少bit是无效数据,这些无效数据需要直接扔掉,不进入Rx FIFO。只有后续的数据进入Rx FIFO

本寄存器与Tx/Rx length配合使用。最后实际存入Rx FIFO的数据量为Tx/Rx length - RX_INVALID_BIT

注:master模式有效

Motorola/ TI模式有效

8’h0

[22]

RW

Clear FIFOs,清除Tx和Rx FIFO的内容,同时同步复位master和slave所有电路(配置寄存器除外)

1’b0:不清除FIFO

1’b1:清除有效

软件置1,硬件清0

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

[21]

RW

continue mode,该模式下,spi发送不受Tx FIFO空的影响。,持续传输,直至整个传输过程完成。

1’b0:normal,Tx FIFO空后,需要等待FIFO 中出现数据,SCK停止翻转,同理,Rx FIFO满后,SCK停止翻转,等待RX FIFO有空间接收数据

1’b1:continue mode,Tx fifo空,仍可以传输,直至传输完成,但此时如果rx fifo满,则需要暂停传输,直至rx fifo可以存数为止

注:master有效

一般情况下,不设置该模式。

开启该模式时,如果tx fifo中没有数据,有可能导致无效数据先发送出去。所以请先填入数据后,再启动spi master

Motorola / TI / microwire 模式有效

1’b0

[20]

RW

RxChOn,接收通路是否开启

1’b0: Rx channel off

1’b1: Rx channel on

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

[19]

RW

TxChOn,发送通路是否开启

1’b0: Tx channel off

1’b1: Tx channel on

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

[18:3]

RW

Tx/Rx length

Spi在传输时,有效的SCK数

也间接的反映了发送或者接收数据的长度。

当(TxChOn=1,RxCh On=1)时,表示发送的bit数,以及最大接收的bit数(具 体接收多少与RX_INVALI D_BIT有关)

当(TxChOn=1,RxCh On=0)时,

表示发送的bit数,

当(TxChOn=0,RxCh On=1)时,

表示最大接收的bit数(具体接收多少与RX_INVALID_BIT有关,实际接收数为Tx/ Rx length - RX_INVALID_BIT)

当(TxChOn=0,RxCh On=0)时,

无意义。

注:master有效

Motorola / TI / microwire 模式有效

16’h0

[2]

RW

Chip selects

1’b0:SPI_CS有效信号为0

1’b1:SPI_CS有效信号为1

注:master有效

Motorola / TI / microwire 模式有效

1’b0

[1]

RW

Force CS out

1’b0:spi_cs信号输出由硬件控制

1’b1:spi_cs信号输出由软件控制,具体输出值为Chip selects

该信号配合Chip selects可以实现输出csn信号可编程,即该信号为1时, spi_cs = Chip selects

注:master有效

Motorola / TI / microwire 模式有效

1’b0

[0]

RW

SPI start,

命令SPI开始接收或者发送,写1为spi开始工作,之后,自动归零

1’b0:停止spi工作

1’b1:启动spi的一次发送或者接收,自动归零

注:master有效

Motorola / TI / microwire 模式有效

1’b0

SPI配置寄存器

表 111 SPI配置寄存器

访问

操作说明

复位值

[31:19]

RSV

13’h0

[18:17]

RW

FRAM FORMAT

2’b00:motorola

2’b01:TI

2’b10:microwire

2’b11:RSV

选择master支持那个厂家的协议

注:master有效

2’b0

[16]

RW

SPI_TX pin always driven

1’b0:spi输出只有在spi_cs有效时,被驱动,其它时间为三态

1’b1:spi输出一直有驱动,即使没有数据传输

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

[15]

RSV

1’b0

[14:12]

RW

cs hold spi_cs在数据传输完成后持续有效的时间,即spi_cs的hold时间

3’b000 >=1 个APB 总线 CLK

3’b001 >=2 个APB 总线CLK

3’b010 >=4 个APB 总线 Clk

3’b011 >=8 个APB 总线 CLK

3’b100 >=16 个APB 总线 CLK

3’b101 >=32 个APB 总线 CLK

3’b110 >=64 个APB 总线 CLK

3’b111 >=127 个APB 总线 CLK

注: master有效

Motorola模式有效

3’b0

[11:9]

RW

cs setup, spi_cs在数据传输前提前有效的时间,即spi_cs的setup时间

3’b000 >=1 个APB 总线 CLK

3’b001 >=2 个APB 总线 CLK

3’b010 >=4 个APB 总线 CLK

3’b011 >=8 个APB 总线 CLK

3’b100 >=16 个APB 总线 CLK

3’b101 >=32 个APB 总线 CLK

3’b110 >=64 个APB 总线 CLK

3’b111 >=127 个APB 总线 CLK

注:master有效

Motorola模式有效

3’b0

[8:7]

RW

SPI-out delay, SPI数据输出相对与SCK的delay,主要是为了hold time考虑。

[8:7] 系统时钟周期数(APB clock)

2’b00 0

2’b01 1

2’b10 2

2’b11 3

注:master/slave都有效

Motorola模式有效

2’b0

[6:4]

RW

Frame delay,默认在一帧(spi_cs有效期间)传输结束到下一帧开始的间隔为SCK时钟周期的一半,即SPI_CS无效时间。 但为了兼容性,此处可配置。默认至少0.5SCK

[6:4] SCK clock

3’b000 0

3’b001 2

3’b010 4

3’b011 8

3’b100 16

3’b101 32

3’b110 64

3’b111 127

例如,按照block模式传输128byte的数据,数据传输完成后,会加入所设置的延迟时间。

注:master有效

3’b0

[3]

RW

Bigendian

1’b0:数据格式采用小端模式,即传输过程中,先发低字节

1’b1:数据格式采用大端模式,即传输过程中,先发高字节

1’b0

[2]

RW

MASTER/SLAVE

1’b0:slave,该设备是 slave

1’b1:master,该设备 是master

注:master/slave都有效

1’b1

[1]

RW

SPI CPHA

1’b0:传输模式A

1’b1:传输模式B

注:master/slave都有效

Motorola模式有效

1’b0

[0]

RW

SPI CPOL,SCK在IDLE时的极性

1’b0:SCK IDLE时为0

1’b1:SCK IDLE时为1

注:master/slave都有效

Motorola模式有效

1’b0

时钟配置寄存器

表 112 SPI时钟配置寄存器

访问

操作说明

复位值

[31:16]

RSV

16‘h0

[15:0]

RW

Divider

FSCK = FAPB_CL K/ ( 2 x (Divider +1))

注:master有效

Motorola / TI / microwire 模式有效

16’h0

[31:16]

RSV

16’h0

[15:0]

RW

Divider

FSCK = FAPB_CL K/ ( 2 x (Divider +1))

注:master有效

Motorola / TI / microwire 模式有效

16’h0

模式配置寄存器

表 113 SPI模式配置寄存器

访问

操作说明

复位值

[31:9]

RSV

23’h0

[8:6]

RW

RxTrigger level

RX FIFO 存储的数据触发中断或者DMA请求的阈值:0~7word

只有rxbuffer中的数据大于RxTrigger level,才会触发中断或者请求DMA搬移

注:master/slave都有效

Motorola / TI / microwire 模式有效

3’b0

[5]

RSV

1’b0

[4:2]

RW

TxTrigger level

TX FIFO 存储的数据触发中断或者DMA请求的阈值:0~7word

只有txbuffer中的数据大于等于TxTrigger level,才会触发中断或者请求DMA搬移

注:master/slave都有效

Motorola / TI / microwire 模式有效

3’b0

[1]

RW

RxDMA On,采用DMA搬移数据使能

1’b0:不采用DMA,

1’b1:采用DMA

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

[0]

RW

TxDMA On,采用DMA搬移数据使能

1’b0:不采用DMA,

1’b1:采用DMA

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b0

中断控制寄存器

表 114 SPI中断控制寄存器

访问

操作说明

复位值

[31:8]

RSV

24’h0

[7]

RW

IntEn_spi_timeout

1’b0:允许产生spi_timeout中断

1’b1:不允许产生spi_timeout中断

注:master/slave都有效

Motorola / TI / microwire 模式有效

1’b1

[6]

RW

IntEn_spi_done

1’b0:spi发送或者接收完成,允许产生中断

1’b1:spi发送或者接收完成,不允许产生中断

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[5]

RW

IntEnRxOverrun

1’b0:Rx FIFO overflow 中断使能

1’b1:Rx FIFO overflow 中断不使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[4]

RW

IntEnRxUnderrun

1’b0:Rx FIFO underflow 中断不使能

1’b1:Rx FIFO underflow 中断使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[3]

RW

IntEnTxOverrun

1’b0:Tx FIFO overflow 中断使能

1’b1:Tx FIFO overflow 中断不使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[2]

RW

IntEnTxUnderrun

1’b0:Tx FIFO underflow 中断使能

1’b1:Tx FIFO underflow 中断不使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[1]

RW

IntEnRxFifoRdy

1’b0:Rx FIFO 有数据上传中断使能

1’b1:Rx FIFO 有数据上传中断不使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

[0]

RW

IntEnTxFifoRdy

1’b0:Tx FIFO可以向TX FIFO写数据中断使能

1’b1:Tx FIFO可以向TX FIFO写数据中断不使能

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b1

中断状态寄存器

表 115 SPI中断状态寄存器

访问

操作说明

复位值

[31:8]

RSV

24’h0

[7]

RW

spi_timeout

1’b0:rxfifo中没有结尾数据需要CPU取走

1’b1:rxfifo中有结尾数据需要CPU取走

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[6]

RW

spi_done

1’b0:SPI发送或者接收没有完成

1’b1:SPI发送或者接收完成

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[5]

RW

RxOverrun

1’b0:Rx FIFO overflow

1’b1:Rx FIFO overflow

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[4]

RW

RxUnderrun

1’b0:Rx FIFO underflow

1’b1:Rx FIFO underflow

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[3]

RW

TxOverrun

1’b0:Tx FIFO overflow

1’b1:Tx FIFO overflow

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[2]

RW

TxUnderrun

1’b0:Tx FIFO underflow

1’b1:Tx FIFO underflow

写1清零

在 continue mode = 1 的情况下,永远不会产生该中断。

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[1]

RW

RxFifoRdy

1’b0:Rx FIFO 数据量<= RxTrigger level,不需要上传

1’b1:Rx FIFO数据量> RxTrigger level,要求上传

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[0]

RW

TxFifoRdy

1’b0:Tx FIFO 数据量 > TxTrigger level,不可以向Tx FIFO写数据

1’b1:Tx FIFO 数据量 <= TxTrigger level,可以向TX FIFO写数据

写1清零

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

SPI状态寄存器

表 116 SPI状态寄存器

访问

操作说明

复位值

[31:13]

RSV

19’h0

[12]

RO

SPI Busy

1’b0:SPI没有发送和接收任务

1’b1:SPI处于发送或者接收过程

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[11:6]

RO

RX FIFO fill level

Rx FIFO中数据量,单位为字节

注:master/slave都有效Motorola / TI / microwire 模式有效

6’h0

[5:0]

RO

Tx FIFO fill level

Tx FIFO中数据量,单位为字节

注:master/slave都有效Motorola / TI / microwire 模式有效

6’h0

SPI超时寄存器

表 117 SPI超时寄存器

访问

操作说明

复位值

[31]

RW

spi_timer_en

1’b0:不允许timer计时

1’b1:允许timer计时

注:master/slave都有效Motorola / TI / microwire 模式有效

1’b0

[30:0]

RW

SPI_TIME_OUT

当一次传输完成后,在接收通路rxfifo中,结尾的数据如果不能触发接收中断RxFifoRdy或者DMA请求时,需要采用计时机制来通知CPU搬走结尾数据 。

具体方法:当rxfifo处于idle状态下(没有读写操作,没有dma请求,cs无效,rxfifo中有数据,且数据量小于等于RxTrigger level),开始计数,达到本寄存器设置的值,则触发time out中断,请求CPU搬走结尾数据。

任何对rxfifo的读写操作都会清楚timeout计时器。

所表示的时间为:T = SPI_TIME_OUT / F APB_CLK

注:master/slave都有效Motorola / TI / microwire 模式有效

31’h0

数据发送寄存器

表 118 SPI数据发送寄存器

访问

操作说明

复位值

[31:0]

RW

向Tx FIFO写数据的窗口地址

注:

master/slave都有效

Motorola / TI / microwire 模式有效

32’h0

传输模式寄存器

表 119 SPI传输模式寄存器

访问

操作说明

复位值

[31:30]

RSV

16’d0

[29:24]

RW

TI_BLK_LEN

在TI的时序模式下,每个block传输的长度,即每次CS有效之后的传输数据长度。支持4~32bit

6’h4: 4bit长数据

6’h5: 5bit长数据

6’h6: 6bit长数据

……..

6’h20: 32bit长数据

注:master有效

TI模式有效

6’d0

[16]

RW

MICRO_BURST

1b’1:Microwire模式下,采用burst传输,即Tx发送控制字,Rx接收数据,依次交替进行,MICRO_CONTROL_LEN表示的是控制字长度,MICRO_DAT_LEN 表示的是发送或者接收字的长度,Tx/Rx length表示的是整个传输过程中有效sck,burst模式下,发送接收交替进行的次数为(Tx/Rx length)/(MICRO_CONTROL _LEN + MICRO_DAT _LEN + 1 )

1’b0:Microwire模式下,不采用burst传输

在此模式下,有两种情况

1)tx_ch_on = 1, rx_ch_on = 0,此时,只有发送,MICRO_CONTROL _LEN表示的是控制字长度,Tx/Rx length表示的是整个传输过程中有效sck,此时发送的数据长度为 m * MICRO_DAT_LEN = Tx/Rx length - MICRO_CONTROL _LEN,其中m表示发送多少个(MICRO_DAT _LEN)长度的字

2)tx_ch_on = 1, rx_ch_on = 1,此时,Tx发送控制字,Rx接收数据,MICRO_CONTROL _LEN表示的是控制字长度,Tx/Rx length表示的是整个传输过程中有效sck,接收数据长度为 m*MICRO_DAT _LEN = Tx/Rx length-MICRO_CONTROL _LEN-1,其中m 表示接收多少个(MICRO_D AT_LEN)长度的字

注:master有效

microwire模式有效

1’b0

[13:8]

RW

MICRO_DAT_LEN

Microwire模式下,在burst模式模式时,每个burst传输数据的长度

从1~32:

6’h1: 1bit长数据

6’h2: 2bit长数据

6’h3: 3bit长数据

……..

6’h20 32bit长数据

注:master有效

microwire模式有效

6’d0

[5:0]

RW

MICRO_CONTROL_LEN

Microwire模式下,命令字的长度

从1~32:

6’h1: 1bit长命令

6’h2: 2bit长命令

6’h3: 3bit长命令

……..

6’h20 32bit长命令

注:master有效

microwire模式有效

6’d0

数据长度寄存器

表 120 SPI数据长度寄存器

访问

操作说明

复位值

[31:16]

RO

作为slave时,在cs有效期间,发送出去的数据长度,单位为 bit

注:slave有效

Motorola模式有效

16’h0

[15:0]

RO

作为slave时,在cs有效期间,接收到的数据长度,单位为bit

注:slave有效

Motorola模式有效

16’h0

数据接收寄存器

表 121 SPI数据接收寄存器

访问

操作说明

复位值

[31:0]

RO

从Rx FIFO读数据的窗口地址

注:master/slave都有效

Motorola / TI / microwire 模式有效

32’h0

I2C控制器

功能概述

I2C总线是一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。

主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件 寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。

主要特性

  • APB总线协议标准接口

  • 只可作为主设备控制器使用

  • I2C工作速率可配,100KHz~400KHz

  • 多路GPIO可复用成I2C的通信接口

  • 可快速输出和检测时序信号

功能描述

传输速率选择

通过设置寄存器PRERlo和寄存器 PRERhi就可以将I2C总线上的数据传输速率配置在100KHz到400KHz之间的任意总线频率整数分频值。

中断及启动停止可控

通过设置寄存器CTR的Bit6允许或者禁止I2C控制器产生中断,并且还可以通过设置Bit7来随时启动或者停止I2C控制器的工作。

快速输出及检测信号

通过设置寄存器CR_SR的相应位可以使控制器快速输出或者检测总线START信号,总线STOP信号,总线ACK信号,总线NACK信号。在主模式下,I2C接口启动数据传输并生成时钟信号。 一个串行数据传输始终以启动信号开始,以停止信号结束。一旦在总线上生成启动信号,就选择了主设备模式。

寄存器描述

寄存器列表

表 122 I2C寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

时钟分频寄存器_1

PRERlo

RW

存放低8位的分频值,用以对APB总线时钟进行分频

0X0000_00FF

0X0004

时钟分频寄存器_2

PRERhi

RW

存放高8位的分频值,用以对APB总线时钟进行分频

0X0000_00FF

0X0008

控制寄存器

CTR

RW

用以控制中断的使能以及I2S控制器的使能

0X0000_0040

0X000C

数据寄存器

TXR_RXR

RW

用以存放待发送的数据或者接收到的数据

0X0000_0000

0X0010

收发控制寄存器

CR_SR

RW

用以控制一些数据读写相关的操作

0X0000_0000

0X0014

TXR读出寄存器

TXR

RO

读取I2C发送时的TXR寄存器值

0X0000_0000

0X0018

CR读出寄存器

CR

RO

读取I2C控制寄存器的设定值CR

0X0000_0000

时钟分频寄存器_1

表 123 I2C时钟分频寄存器_1

访问

操作说明

复位值

[31: 8]

保留

[7 : 0]

RW

时钟分频配置prescale的低8bit。

例如:

apb_clk=40MHz, SCL=100KHz

prescale = (40*1000) / (5*100) – 1 = 16’d79

apb_clk = 40M, SCL=400K

prescale=(40*1000) / (5*400) – 1 = 16’d19

8’hff

时钟分频寄存器_2

表 124 I2C时钟分频寄存器_2

访问

操作说明

复位值

[31: 8]

保留

[7 : 0]

RW

时钟分频配置prescale的高8bit。

例如:

apb_clk=40MHz, SCL=100KHz

prescale = (40*1000) / (5*100) – 1 = 16’d79

apb_clk = 40M, SCL=400K

prescale = (40*1000) / (5*400) – 1 = 16’d19

8’hff

控制寄存器

表 125 I2C控制寄存器

访问

操作说明

复位值

[31:8]

保留

[7]

RW

I2C使能控制,

1’b0:不使能

1’b1:使能

1’b0

[6]

RW

中断MASK,

1’b0:允许中断产生

1’b1:不允许中断产生

1’b1

[5:0]

保留

数据寄存器

表 126 I2C数据寄存器

访问

操作说明

复位值

[31:8]

保留

[7:0]

WR

写该寄存器时,为发送寄存器TXR,

表示下一个要发送的字节,

当为设备地址时,

[0]:1时表示读,0时表示写。

读该寄存器时,为接收寄存器RXR,

为最新从I2C上接收到的字节。

8’h0

收发控制寄存器

表 127 I2C收发控制寄存器

访问

操作说明

复位值

[31:8]

保留

[7:0]

WR

写该寄存器时,为CR,功能如下:

[7]:STA,控制产生START时序;

1’b0:无效

1’b1:产生START时序

[6]:STO,控制产生STOP时序;

1’b0:无效

1’b1:产生STOP时序

[5]:RD,从SLAVE读;

1’b0:无效

1’b1:从SLAVE读

[4]:WR,向SLAVE写;

1’b0:无效

1’b1:向SLAVE写

[3]:控制向SLAVE送回ACK/NACK;

1’b0:回ACK

1’b1:回NAK

[2:1]:保留;

[0]:IACK,清除中断状态,1有效;

1’b0:无效

1’b1:清除中断标志

读该寄存器时,为SR,功能如下:

[7]:RxACK,从SLAVE收到的ACK/NACK状态;

1’b0:从SLAVE收到ACK

1’b1:从SLAVE收到NAK

[6]:BUSY;

1’b0:STO后置0

1’b1:STA后置1

[5]:AL,Arbitration Lost,此位保留;

[4:2]:保留;

[1]:TIP;

1’b0:无传输正在进行

1’b1:有传输正在进行

[0]:IF,中断状态位;

1’b0:无中断产生

1’b1:传输完成或者AL时置1

8’h0

TXR读出寄存器

表 128 I2C TXR读出寄存器

访问

操作说明

复位值

[31:8]

保留

[7:0]

RO

只读,TXR寄存器的读出值,

功能描述见TXR_RXR寄存器;

8’h0

CR读出寄存器

表 129 I2C CR读出寄存器

访问

操作说明

复位值

[31:8]

保留

[7:0]

RO

只读,CR寄存器的读出值,

功能描述见CR_SR寄存器;

8’h0

I2S控制器

功能概述

I2S(Inter-IC Sound)是针对数字音频设备(如CD播放器、数码音效处理器、数字电视音响系统)之间的音频数据传输而制定的一种总线标准。它采用了独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。标准的I2S总 线电缆是由3根串行导线组成的:1根是时分多路复用(简称TDM)数据线;1根是字选择线;1根是时钟线。

主要特性

  • 实现I2S接口,支持I2S和PCM协议

  • 支持amba APB总线接口,32bit single读写操作

  • 支持主从模式

  • 支持8,16,24,32位宽,最高采样频率为192KHz

  • 支持单声道和立体声模式

  • 兼容I2S和MSB justified数据格式,兼容PCM A/B格式

  • 支持DMA请求读写操作,只支持按字操作

功能描述

多种模式支持

通过设置I2S Control寄存器的Bit[25:24]可以设置数据格式为I2S格式,MSB justified格式,PCM A格式,或者PCM B格式;通过设置I2S Control寄存器的Bit[22]可以选择单声道或者立体声模式。通过设置I2S Control寄存器的Bit[5:4]可以设置数据传输字的位宽,可以设置为8bit,16bit,24bit,32bit。

零交叉检测

通过设置I2S Control寄存器的Bit[17:16]可以设置是否启用左右声道的零交叉检测功能;通过设置I2S_IMASK寄存器的Bit[9:8]可以设置左右声道零交叉检测功能是否产生中断。若启用了检测功能,并且使了中断,则当检测到零交叉现象时,程序会执行中断子程序,同时I2S_INT_FLAG 寄存器的Bit[9:8]的相应位会被置1。

高效的数据传输

FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个存储器的输入口,另一个口是存储器的输出口。I2S控制器集成了两个(收发各一个)深度均为8个字的FIFO存贮器,以增加数据传输率、处理大量数据流、匹配具有不同传输率的系统,从而提高了系统性能。可以通过设置I2S Control寄存器的Bit[14:12]和Bit[11:9]可以设置RXFIFO和TXFIFO的trigger level,以满足不同传输速率下的性能要求。FIFO的trigger level被触发后,就可以触发中断或者DMA,将数据从内存移到TXFIFO或者将将数据从RXFIFO搬移至内存。

I2S/PCM时序图

本模块提供对4种协议的支持,标准I2S,MSB Justified,PCM-A,PCM-B. 通过配置寄存器0x00[25:24] 来选择使用哪种协议。具体每种协议的接口时序见Fig1至Fig4.

Fig1. I2S Bus Timing Diagram(PCM=0,Format=0)

Fig1. I2S Bus Timing Diagram(PCM=0,Format=0)

Fig2. MSB Justified Timing Diagram(PCM=0,Format=1)

Fig2. MSB Justified Timing Diagram(PCM=0,Format=1)

Fig3. PCM A Audio Diagram(PCM=1,Format=0)

Fig3. PCM A Audio Diagram(PCM=1,Format=0)

Fig4. PCM B Audio Diagram(PCM=1,Format=1)

Fig4. PCM B Audio Diagram(PCM=1,Format=1)

FIFO存储结构图

Fig 5. FIFO存储结构

Fig 5. FIFO存储结构

I2S模块提供2个8x32bit 大小的FIFO,一个作为TX FIFO,一个作为RX FIFO。

FIFO内数据的存储结构根据工作模式的不同有所不同。当工作在单声道8bit模式时,FIFO内每个word可以存储4个sample 数据。当工作在双声道8bit模式时,左右声道数据交替存储于FIFO内,处于低位的byte存储右声道数据,处于高位的byte存储左声道数据。一个word可以存储2个samp le数据。单工16bit模式时,一个word可以存储2个sample,双工16bit模式时,一个word存储一个sample数据,低16位为右声道,高16位为左声道。24bit与32bit模式时每个word只能存储一个sample数据或者一个声道的数据,具体存储方式见图5所示。

I2S 模块工作时钟配置

I2S 模块的工作时钟配置通过设置在时钟与复位模块中 0x40000718寄存器可以配置时钟源选用外部时钟还是内部160MHz时钟,是否开启MCLK 时钟,以及MCLK和BCLK的工作频率。

通过设置寄存器0x40000718[0]可以选择使用内部160MHz时钟还是使用外部时钟作为I2S 模块时钟源。如果选用外部时钟,I2S 模块将使用从IO- I2S_M_EXTCLK(PA_5,Option 4)输入的时钟作为模块时钟源。

而0x40000718[1] 选择是否开启MCLK时钟。[7:2] 位为配置MCLK 分频比的区域。计算公式如下:

F_mclk=F_I2SCLK/MCLKDIV

F_mclk 为实际MCLK 频率;

F_I2SCLK 为I2S 模块的时钟源。如果选用内部时钟,则F_I2SCLK =160MHz;如果选用外部时钟,则F_I2SCLK 等于外部输入的时钟频率;

MCLKDIV 即为寄存器0x40000718[7:2] 配置的时钟分频比。需要注意的是MCLKDIV>=2;

寄存器0x40000718 的[17:8]位 为配置BLCK 时钟的分频比的区域。分频比计算公式如下:

F_BCLK=F_I2SCLK/BCLKDIV

F_BCLK 为BCLK 实际工作的频率;

F_I2SCLK为I2S 模块的时钟源。如果选用内部时钟,则F_I2SCLK =160MHz;如果选用外部时钟,则F_I2SCLK 等于外部输入的时钟频率;

BCLKDIV 即是需要配置的分频比。根据不同的工作模式需要选择不同的分频比。选择分频比的公式如下:

BCLKDIV=round (F_I2SCLK/(Fs*W*F))

Fs为I2S接口上音频数据的采样频率,最高支持192KHz;

W为采样位宽,8/16/24/32 bit 可以选择;

F为单声道/双声道选择。传输数据为单声道时F=1,传输数据为双声道时F=2;

最后计算出来的分频比进行四舍五入。

以下为根据实际工作模式选取BCLKDIV 的例子:

若选取内部时钟为模块时钟源,需要传输128KHz采样率,24bit双声道数据,则计算需要设置BCLKDIV 的过程如下:

BCLKDIV=round(160*10e6/128*10e3*24*2)=10’d26;

分频寄存器说明如下:

0x18

I2S_Clk_Ctrl

[0]

RW

EXTAL_EN

External clock select

Select whether use External or Internal clock for I2S block

0=internal clk

1=external clk

Note: When External clock is enabled, the external clk must be 2*N*256 fs, where fs is sample frequenc y and N must be integer.

1’b0

[1]

RW

MCLKEN

MCLK enable

0=MCLK disabled

1=MCLK enabled

1’b0

[7:2]

RW

MCLKDIV

MCLK divider

If external clock is selected , this divider is used to produce proper MCLK frequency.

F_mclk = F_I2SCLK / MCLKDIV

Where MCLKDIV >=2

F_mclk = F_I2SCLK when MCLKDIV=0

Where F_I2SCLK is external clk.

Note: F_mclk should be configur ed as 256 * fs where fs is sample frequency.

6’d0

[17:8]

RW

BCLKDIV

BCLK divider

F_BCLK = F_I2SCLK / BCLKDIV

Note: When EXTAL_EN is not selected ,

Internal PLL is used and

F_I2SCLK = 160MHz

When WXTAL_EN is enabled,

F_I2SCLK = External crystal frequency

BCLKDI V = round (F_I2SCL K / (Fs*W* F))

Where Fs is sample frequency of audio data and W is word width.

F=2 when data is stereo and

F=1 when data is mono.

For example, if internal PLL is used and the data width is 24bit, Format is stereo format, sample frequenc y is 128KHz. Then the BCLKDIV should be configur ed as (160*10e 6/128*10 e3*24*2) =10’d26

10’d0

[31:18]

RO

RSV

14’d0

其他功能说明:

过零检测:

为了避免数据损坏导致频率突然变化而产生的噪声,I2S 模块针对每个声道都提供了过零检测的功能。当发送的相邻两个数据符号位出现变化时,模块会产生中断,提醒MCU进行检测,处理;同时将后一个数据强制静音。

静音功能

当静音功能打开时,数据仍将发送,但输出的数据将被强制置为0;

中断

本模块提供发送/接收完成中断,左右声道过零检测中断,发送/接收 FIFO 的阈值中断(发送FIFO中数据低于阈值,接收FIFO中数据高于阈值),发送/接收FIFO的underflow/overflow中断。中断状态在寄存器0x08中查询。

FIFO状态查询

寄存器0x10提供CPU 对I2S 模块中发送/接收FIFO的状态查询功能。通过寄存器CPU 能够检查FIFO中剩余多少数据未处理。在接收FIFO中最后一个word中有几个byte是有效数据。

数据传输流程

主端发送音频数据

  1. 配置好使用的引脚, SDO, BCLK, LRCLK

  2. 参考Section 2.4 设置时钟与复位模块中寄存器0x40000718,配置好工作时钟频率;

  3. 设置I2S寄存器0x00,设置为master mode, 配置传输格式,声道选择,数据位宽,左右声道是否开启过零检测,并设置发射通路-txen开启。

  4. 设置寄存器0x4,使能想要使用的中断;

  5. 如果使用DMA传输数据,在DMA模块中选择使用的通道,配置好发射数据的地址,长度。并在I2S模块寄存器中0x0中使能DMA,并设置FIFO阈值。当FIFO中数据低于阈值范围即会自动请求DMA搬运数据。

  6. 向发射FIFO地址-寄存器0x10写入需要发射的数据,使能寄存器0x0[0], 模块即会自动从FIFO中取出数据送到I2S总线上。

  7. 当FIFO中数据小于设置的阈值时,模块将向DMA模块请求数据,或者发送TXTHIF中断。

  8. 当FIFO中数据全部取出后,TXDONE 中断将置位,当最后一帧发送完成,TXUDIF中断将置位,通知CPU发送完成,模块停止发送。

从端接收音频数据

  1. 配置好使用的引脚, SDI, BCLK, LRCLK

  2. 设置I2S寄存器0x00,设置为slave mode配置传输格式,声道选择,数据位宽,左右声道是否开启过零检测,并设置接收通路-rxen开启。

  3. 设置寄存器0x4,使能想要使用的中断;

  4. 如果使用DMA传输数据,在DMA模块中选择使用的通道,配置好发射数据的地址,长度。并在I2S模块寄存器中0x0中使能DMA,并设置FIFO阈值。当数据高于阈值范围即会自动请求DMA搬运数据。

  5. 使能寄存器0x0[0], 模块检测到有效的BCLK和LRCLK后即会自动从SDI上采集数据存储在FIFO中。当FIFO中数据高于设置的阈值时,模块将向DMA请求搬运数据到内存中,或者发送RXTHIF中断。当CPU关闭RXEN时RXDONE中断产生。CPU可以通过寄存器0x10查询接收FIFO中有多少 个数据,最后一个word中有多少个byte的有效数据。然后根据FIFO状态处理最后剩余的数据。

主端接收音频数据

  1. 配置好使用的硬件,SDI , SCLK, LRCLK

  2. 参考Section 2.4 设置时钟与复位模块中寄存器0x40000718,配置好工作时钟频率;

  3. 设置I2S寄存器0x00,设为master mode,配置传输格式,声道选择,数据位宽,左右声道是否开启过零检测,并设置接收通路rxen开启。

  4. 设置寄存器0x4,使能想要使用的中断;

  5. 如果使用DMA传输数据,在DMA模块中选择使用的通道,配置好发射数据的地址,长度。并在I2S模块寄存器中0x0中使能DMA,并设置FIFO阈值。当数据高于阈值范围即会自动请求DMA搬运数据。

  6. 使能寄存器0x0[0], 模块即会自动发送BCLK和LRCLK,同时从SDI上采集数据存储在FIFO中。当FIFO中数据高于设置的阈值时,模块将向DMA请求搬运数据到内存中,或者发送RXTHIF中断。当CPU关闭RXEN时RXDONE中断产生。CPU可以通过寄存器0x10查询接收FIFO中有多少个数 据,最后一个word中有多少个byte的有效数据。然后根据FIFO状态处理最后剩余的数据。

  7. 数据接收完成后关闭 i2s使能。

从端发送音频数据

  1. 配置好使用的引脚, SDO, BCLK, LRCLK

  2. 设置I2S寄存器0x00,设置为slave mode, 配置传输格式,声道选择,数据位宽,左右声道是否开启过零检测,并设置发射通路txen开启。

  3. 设置寄存器0x4,使能想要使用的中断;

  4. 如果使用DMA传输数据,在DMA模块中选择使用的通道,配置好发射数据的地址,长度。并在I2S模块寄存器中0x0中使能DMA,并设置FIFO阈值。当FIFO中数据低于阈值范围即会自动请求DMA搬运数据。

  5. 向发射FIFO地址-寄存器0x10写入需要发射的数据,使能寄存器0x0[0], 当模块检测到有效的BCLK和LRCLK时,模块即会自动从FIFO中取出数据送到SDO上。

  6. 当FIFO中数据小于设置的阈值时,模块将向DMA模块请求数据,或者发送TXTHIF中断。

  7. 当FIFO中数据全部取出后,TXDONE 中断将置位,当最后一帧发送完成,TXUDIF中断将置位,通知CPU发送完成,模块停止发送。

全双工模式

  1. 配置好使用的引脚,SDI, SDO, BCLK, LRCLK

  2. 如果是master模式,需要配置时钟分频。

  3. 设置I2S寄存器0x00,配置工作模式(主/从), 配置传输格式,声道选择,数据位宽,左右声道是否开启过零检测,并设置发射通路txen和接收通路rxen开启。

  4. 设置寄存器0x4,使能想要使用的中断;

  5. 如果使用DMA传输数据,在DMA模块中选择使用的通道,配置好发射数据的地址,长度。并在I2S模块寄存器中0x0中使能DMA,并设置FIFO阈值。当FIFO中数据低于阈值范围即会自动请求DMA搬运数据。

  6. 向发射FIFO地址-寄存器0x10写入需要发射的数据

  7. 如果是master模式,使能寄存器0x0[0], 模块会开始发送BCLK和LRCLK,从发送FIFO中取出数据开始从SDO端口送出,同时从SDI接收数据存入接收FIFO。

  8. 如果是slave模式,当模块检测到有效的BCLK和LRCLK时,模块即会自动从发送FIFO中取出数据送到SDO上,同时从SDI接收数据存入接收FIFO。

  9. 当发送FIFO中数据小于设置的阈值时,模块将向DMA模块请求数据,或者发送TXTHIF中断。

  10. 当FIFO中数据高于设置的阈值时,模块将向DMA请求搬运数据到内存中,或者发送RXTHIF中断。

  11. 当TXFIFO中数据全部取出后,TXDONE 中断将置位,当最后一帧发送完成,TXUDIF中断将置位,通知CPU发送完成,模块停止发送。

  12. 当CPU关闭RXEN时RXDONE中断产生。CPU可以通过寄存器0x10查询接收FIFO中有多少个数据,最后一个word中有多少个byte的有效数据。然后根据FIFO状态处理最后剩余的数据。

寄存器描述

寄存器列表

表 130 I2S寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

控制寄存器

I2S Control

RW/RO

控制I2S相关功能,详见下述章节;

0X0000_4800

0X0004

中断屏蔽寄存器

I2S_IMASK

RW

控制开启或关闭I2S中所有的中断

0X0000_03FF

0X0008

中断标志寄存器

I2S_INT _FLAG

RW/RO

中断标志位,可用于查询中断是否产生及清除相关中断

0X0000_0000

0X000c

状态寄存器

I2S_STATUS

RO

用于查询I2S通信过程中FIFO的相关状态

0X0000_0000

0X0010

数据发送寄存器

I2S_TX

WO

控制器会将它里面的数据发送到总线上

0X0000_0000

0X0014

数据接收寄存器

I2S_RX

RO

控制器会将总线上的数据接收到它里面

0X0000_0000

控制寄存器

表 131 I2S控制寄存器

访问

操作说明

复位值

[31:29]

RO

RSV

7’h0

[28]

RW

模式选择

0 = master 模式

1 = slave 模式

1’b0

[27]

RW

双工模式选择

1 = 使能双工模式

0 = 关闭双工模式

1’b0

[26]

RW

超时计数控制位,当此位被置1并且传输进程被主设备强制停止时,将不发生接收完成(RXDONE)中断

1’h0

[25:24]

RW

FORMAT

数据格式选择

2’b00:I2S 数据格式

2’b01:MSB Justified 数据格式

2’b10:PCM A声音数据格式

2’b11:PCM B声音数据格式

2’b0

[23]

RW

RXLCH

声道接收使能控制位

1’b0:使能接收右声道数据

1’b1:使能接收左声道数据

注意:只有选择MONO_STEREO的单声道模式时,此位才有效

1’b0

[22]

RW

MONO_STEREO

单声道立体声选择位

1’b0:数据以立体声格式传输

1’b1:数据以单声道格式传输

1’b0

[21]

RW

RXDMAEN

接收DMA请求使能位

1’b0:不使能发送DMA请求

1’b1:使能发送DMA请求

注意:当使能传输DMA请求并且RXFIFO中的字的个数等于或者大于RXTH时,I2S控制器会向DMA发出传输请求 直至RXFIFO为空才停止DMA传输。

1’b0

[20]

RW

TXDMAEN

发送DMA请求使能位

1’b0:不使能发送DMA请求

1’b1:使能发送DMA请求

注意:当使能传输DMA请求并且TXFIFO中的字的个数小于TXTH时,I2S控制器会向DMA发出传输请求直至TXFIFO 满才停止DMA传输。

1’b0

[19]

WO

RXCLR

清空RXFIFO

1’b0:无效

1’b1:清空RXFIFO

注意:写1清空RXFIFO,由硬件自动清空。读此位永远返回0

1’b0

[18]

WO

TXCLR

清空TXFIFO

1’b0:无效

1’b1:清空TXFIFO

注意:写1清空TXFIFO,由硬件自动清空。读此位永远返回0

1’b0

[17]

RW

LZCEN

左声道零交叉检测使能控制位

1’b0:停止左声道零交叉检测

1’b1:使能左声道零交叉检测

1’b0

[16]

RW

RZCEN

右声道零交叉检测使能控制位

1’b0:停止右声道零交叉检测

1’b1:使能右声道零交叉检测

1’b0

[15]

RW

Rx_clk_phase_sel

接收时钟相位选择

1’b0:默认模式

以上面提及的I2S总线时序展示

1’b1:反转模式

以上面提及的I2S总线时序的反转形式展示

1’b0

[14:12]

RW

RXTH

RXFIFO阙值

3’b000:设置阙值为0个字

3’b000:设置阙值为1个字

3’b111:设置阙值为7个字

注意:当RXFIFO中现有的字等于或者多于RXTH的值时,RXTHIF位会被置位。此时可以根据设置来选择触发RXDMA或者I2S中断

3’h4

[11:9]

RW

TXTH

TXFIFO阙值

3’b000:设置阙值为0个字

3’b000:设置阙值为1个字

3’b111:设置阙值为7个字

注意:当TXFIFO中现有的字等于或者少于TXTH的值时,TXTHIF位会被置位。此时可以根据设置来选择触发TXDMA或者I2S中断

3’h4

[8]

RW

Tx_clk_phase_sel

选择发射时钟相位模式

1’b0:默认模式

以上面提及的I2S总线时序展示

1’b1:反转模式

以上面提及的I2S总线时序的反转形式展示

1’b0

[7:6]

RW

RSV

2’h0

[5:4]

RW

WDWIDTH

传输字长设置位

2’b00:字长8 bit

2’b01:字长16 bit

2’b10:字长24 bit

2’b11:字长32 bit

2’b0

[3]

RW

MUTE

传输哑声使能标志位

1’b0:从移位寄存器传输数据,正常操作模式

1’b1:将传输数据置 0,使声音静音

1’b0

[2]

RW

RXEN

接收使能标志位

1’b0:停止I2S数据接收

1’b1:使能I2S数据接收

1’b0

[1]

RW

TXEN

传输使能标志位

1’b0:停止I2S数据传输

1’b1:使能I2S数据传输

1’b0

[0]

RW

I2SEN

I2S使能标志位

1’b0:不使能

1’b1:使能

1’b0

中断屏蔽寄存器

表 132 I2S中断屏蔽寄存器

访问

操作说明

复位值

[31:10]

RO

RSV

22’h0

[9]

RW

LZCIMASK

左声道零交叉中断使能标志位

1’b0:中断不使能

1’b1:中断使能

当使能中断,并且检测到左声道上有零交叉时,产生中断

1’b1

[8]

RW

RZCIMASK

右声道零交叉中断使能标志位

1’b0:中断不使能

1’b1:中断使能

当使能中断,并且检测到右声道上有零交叉时,产生中断

1’b1

[7]

RW

TXDONEMASK

发送完成中断使能位

1’b0:中断不使能

1’b1:中断使能

当使能中断,并且TXFIFO为空时,产生中断

1’b1

[6]

RW

TXTHIMASK

TXFIFO阙值中断使能位

1’b0:中断不使能

1’b1:中断使能

当使能中断,并且TXFIFO中的数据数等于或者小于TXTH时 ,产生中断

1’b1

[5]

RW

TXOVIMASK

TXFIFO溢出中断使能位

1’b0:中断不使能

1’b1:中断使能

注意:当使能中断,TXFIFO满,CPU再向TXFIFO中写数据时,TXOVIF标志位将会被置位

1’b1

[4]

RW

TXUDIMASK

TXFIFO下溢中断使能位

1’b0:中断不使能

1’b1:中断使能

注意:当使能TXFIFO下溢中断,并且检测到TXUDIF为1 时,将产生下溢中断

1’b1

[3]

RW

RXDONEMASK

接收完成中断使能标志位

1’b0:中断不使能

1’b1:中断使能

当使能接收完成中断,并且接收过程完成时,将产生接收完成中断

1’b1

[2]

RW

RXTHIMASK

RXFIFO阙值中断使能标志位

1’b0:中断不使能

1’b1:中断使能

当使能RXFIFO阙值中断,并且RXFIFO中的数据个数等于或者多于阙值数时,产生生RX中断

1’b1

[1]

RW

RXOVIMASK

RXFIFO溢出中断使能位

1’b0:中断不使能

1’b1:中断使能

注意:当使能RXFIFO流出中断,并且检测到TXOVIF为1 时,将产生溢出中断

1’b1

[0]

RW

RXUDIMASK

RXFIFO下溢中断使能位

1’b0:中断不使能

1’b1:中断使能

注意:当使能RXFIFO下溢中断,并且检测到TXUDIF为1 时,将产生下溢中断

1’b1

中断标志寄存器

表 133 I2S中断标志寄存器

访问

操作说明

复位值

[31:13]

RO

RSV

19’h0

[12]

RO

TXIF

I2S 发送中断标志

1’b0:未发生I2S中断

1’b1:I2S有发送中断产生

1’b0

[11]

RO

RXIF

I2S 接收中断标志

1’b0:未发生I2S中断

1’b1:I2S有接收中断产生

1’b0

[10]

RO

I2SIF

I2S 中断标志位

1’b0:未发生I2S中断

1’b1:I2S有中断产生

注意:只要RX或者TX之一有中断,此位就会置位

1’b0

[9]

RW

LZCIF

左声道零交叉检测标志

此位指示左通道下一个样本数据符号位改变或所有数据位为零。

1’b0:未检测到零交叉

1’b1:检测到零交叉

注意:写1来清除中断标志

1’b0

[8]

RW

RZCIF

右声道零交叉检测标志

此位指示右通道下一个样本数据符号位改变或所有数据位为零。

1’b0:未检测到零交叉

1’b1:检测到零交叉

注意:写1来清除中断标志

1’b0

[7]

RW

TXDONEIF

发送完成中断标志

1’b0:本次发送未完成

1’b1:本次发送完成

注意:写1来清除中断标志

1’b0

[6]

RO

TXTHIF

RXFIFO中断标志

1’b0:TXFIFO中的字个数大于阙值

1’b1:TXFIFO中的字个数小于或等于于阙值.

注意:当TXFIFO中字的个数 (TXCNT)等于或者少于TXTH设置的阙值时,这个位会被置 1,直至向TXFIFO中的写入数据并且TXCNT的值大于TXTH的值后,它才会变回0。

1’b0

[5]

RW

TXOVIF

TXFIFO溢出中断标志

1’b0:TXFIFO没有发生溢出中断

1’b1:TXFIFO发生了溢出中断

注意:写1来清除中断标志

1’b0

[4]

RW

TXUDIF

TXFIFO下溢中断标志

1’b0:TXFIFO没有发生下溢中断

1’b1:TXFIFO发生了下溢中断

注意:写1来清除中断标志

1’b0

[3]

RW

RXDONEIF

接收完成中断标志

1’b0:本次接收未完成

1’b1:本次接收完成

注意:写1来清除中断标志

1’b0

[2]

RO

RXTHIF

RXFIFO中断标志

1’b0:RXFIFO中的字个数小于阙值

1’b1:RXFIFO中的字个数等于或大于阙值.

注意:当RXFIFO中字的个数等于或者多于RXTH设置的阙值时,这个位会被置1,直至RXFIFO中的数据被读出并且RXCNT的值小于RXTH的值后,它才会变回0。

1’b0

[1]

RW

RXOVIF

RXFIFO溢出中断标志

1’b0:RXFIFO没有发生溢出中断

1’b1:RXFIFO发生了溢出中断

注意:写1来清除溢出中断

1’b0

[0]

RW

RXUDIF

RXFIFO下溢中断标志

1’b0:RXFIFO没有发生下溢中断

1’b1:RXFIFO发生了下溢中断

注意:写1来清除下溢中断

1’b0

状态寄存器

表 134 I2S状态寄存器

访问

操作说明

复位值

[31:10]

RO

RSV

22’h0

[9:8]

RO

VALIDBYTE

最后一个字中可用的字节数。

2’b00:接收完成后,RXFIFO中所有的字节都是可用的

2’b01:接收完成后,RXFIFO中有1个字节是可用的

2’b10:接收完成后,RXFIFO中有2个字节是可用的

2’b11:接收完成后,RXFIFO中有3个字节是可用的

2’h0

[7:4]

RO

TXCNT

记录当前时刻TXFIFO中字的个数。

4’b0000:没有数据

4’b0001:有1个字

4’b1000:有8个字

4’h0

[3:0]

RO

RXCNT

记录当前时刻RXFIFO中字的个数。

4’b0000:没有数据

4’b0001:有1个字

4’b1000:有8个字

4’h0

数据发送寄存器

表 135 I2S数据发送寄存器

访问

操作说明

复位值

[31:0]

WO

TXFIFO

I2S内置了8个字长度的FIFO用于存贮待发送的数据。每次向TXFIFO中写一个字,TXFIFO中的字就增加一个。I2S 控制器会自动将先进入TXFIFO中的字发送出去。

32’h0

数据接收寄存器

表 136 I2S数据接收寄存器

访问

操作说明

复位值

[31:0]

RO

RXFIFO

I2S内置了8个字长度的FIFO用于存贮接收到的数据。每次从RXFIFO中读取一个字,RXFIFO中的字就会少一个。

32’h0

UART模块

功能概述

UART是一种通用串行数据总线,用于异步通信。该总线支持双向通信,可以实现全双工传输和接收。

W800 共6组普通UART口,通过精细的时钟分频组合可以实现各种波特率的设置,最大可支持2Mbps的通信速率。W800 UART能和硬件DMA配合使用,实现数据的高效异步传输。

主要特性

  • 符合APB总线接口协议,全双工异步通信方式

  • 支持中断或轮询工作方式

  • 支持DMA Byte传输模式,发送接收各32-byte FIFO

  • 波特率可编程,最大支持2Mbps

  • 5-8bit 数据长度,以及parity极性可配置

  • 1或2个stop位可配置

  • 支持RTS/CTS流控

  • 支持Break帧发送与接收

  • 支持Overrun,parity error,frame error,rx break frame中断指示

功能描述

UART波特率

异步通信因为两边没有同一时钟源作参考,需要通信双方按照协商好的波特率来发送和接收数据。W800可以通过波特率设置寄存器BAUD_RATE_CTRL寄存器来实现精细的波特率控制。BAUD_RATE_CTRL[15:0]命名为ubdiv,BAUD_RATE_CTRL[19:16]命名为ubdiv_fra c,需要设置的波特率baudrate,计算公式如下:

ubdiv = apbclk / (16 * baudrate) – 1 //取整数

ubdiv_frac = (apbclk % (baudrate * 16)) / baudrate //取整数

以APB时钟40MHz,波特率19200bps为例:

ubdiv = 40000000 / (16 * 19200) – 1 = 129

ubdiv_frac = (40000000 % (19200* 16)) / 19200 = 3

根据以上公式计算APB时钟40MHz,波特率19200bps的情况下,波特率寄存器应该设置为:BAUD_RATE _CTRL = (3<<16) | 129 = 0x0003_0081。

UART数据格式

  • 数据长度

W800的UART支持支持5bit、6bit、7bit、8bit的数据长度可配置。关于数据长度的定义如下:

图 28 UART数据长度

图 28 UART数据长度

正常的UART通信是由1bit起始位,1bit停止位再加中间的数据位,而中间的数据位是可以配置的,W800支持5bit、6bit、7bit、8bit 4种长度的数据位可配置,可根据实际应用来选择数据位长度。

  • 停止位

W800的UART支持1bit 停止位和2bit 停止位可配置,可根据实际需要配置,如下:

图 29 UART 停止位

图 29 UART 停止位

  • 奇偶检验位

奇偶校验位的作用是为了校验数据的正确性,W800可以设置奇校验、偶校验和无校验。

奇校验的计算方法:如果当前数据位1的个数是奇数个,奇校验位为0,如果当前数据为1的个数是偶数个,奇校验位为1。总之保证奇数个1。

偶校验的计算方法:如果当前数据位1的个数是奇数个,偶校验位为1,如果当前数据为1的个数是偶数个,偶校验位为0。总之保证偶数个1。

图 30 UART奇偶校验位

图 30 UART奇偶校验位

UART硬件流控

W800 UART支持RTS/CTS方式的硬件流控。流控的主要目的是为了防止UART fifo里的数据因为软件来不及处理而造成丢失,RTS和CTS是对应使用的,如下图:

图 31 UART硬件流控连接

图 31 UART硬件流控连接

W800的硬件流控是通过AUTO_FLOW_CTRL寄存器来控制的。当硬件流控AUTO_FLOW_CTRL[0]为1时,W800会根据AUTO_FLOW_CTRL[4:2]设定的rxfifo中的数据个数来进行流控设置,大于设定个数,RTS拉高,其他设备则不再给W800发送数据,小于设定个数RTS拉低 ,其他设备继续给W800发送数据。当AUTO_FLOW_CTRL[0]为0时,软件通过AUTO_FLOW_CTRL[1]来设定RTS的高低。

W800发送数据时,可以通过中断判断当前CTS是否发生变化,并通过FIFO_STATUS[12]查询CTS状态,来决定是否继续给其他设备发送数据。

UART DMA传输

W800的UART支持DMA传输模式,DMA传输时需要配置UART寄存器列表里面的DMA_CTRL寄存器来打开UART的DMA使能。同时需要配置UART_FIFO_CTRL配置txfifo、rxfifo中剩余多少个字节触发DMA搬运。

DMA的源或目的地址设置为TX_DATA_WINDOW 或 RX_DATA_WIDNOW,其他DMA寄存器的设置参考DMA寄存器章节。

注意:UART DMA传输只能设置为Byte模式,不支持half_word和word传输模式。

UART中断

UART 支持中断操作模式,包括fifo空,fifo达到设定触发值,CTS变化,出错等都会产生UART中断,可以通过INT_MASK寄存器来设置需要的中断。

当UART中断产生后,可以通过INT_SRC来查询当前的中断状态,触发中断的原因。软件写1清0。

寄存器描述

寄存器列表

表 137 UART寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

数据流控制寄存器

UART_LINE _CTRL

RW

uart通信的数据格式设置

0X0000_000B

0X0004

自动硬件流控寄存器

AUTO_FLOW _CTRL

RW

uart rts/cts硬件流控设置

0X0000_0014

0X0008

DMA设置寄存器

DMA_CTRL

RW

uart dma传输模式设置

0X0000_0024

0X000C

FIFO控制寄存器

UART_FIFO _CTRL

RW

设置 uart fifo触发等级

0X0000_0014

0X0010

波特率控制寄存器

BAUD_RATE _CTRL

RW

设置uart 通信波特率

0X0003_0081

0X0014

中断屏蔽寄存器

INT_MASK

RW

设置uart需要使用的中断

0X0000_01FF

0X0018

中断状态寄存器

INT_SRC

RW

uart中断状态指示

0X0000_0000

0X001C

FIFO状态寄存器

FIFO_STATUS

RW

fifo状态,cts状态查询

0X0000_1000

0X0020

TX起始地址寄存器

TX_DATA _WINDOW

WO

0X0000_0000

0X0024

保留

0X0028

保留

0X002C

保留

0X0030

RX起始地址寄存器

RX_DATA _WINDOW

RO

0X0000_0000

0X0034

保留

0X0038

保留

0X003C

保留

数据流控制寄存器

表 138 UART数据流控制寄存器

访问

操作说明

复位值

[31: 8]

保留

[7]

RW

uart_rx_enable

接收使能,高有效

1’b0

[6]

RW

uart_tx_enable

发送使能,高有效。

1’b0

[5]

RW

send break enable

发送break数据包。Uart 会在该为被置位后发送完一个break数据包,发送完成后自动清 0。

1’b0

[4]

RW

parity极性

1’b0:偶校验

1’b1:奇校验

1’b0

[3]

RW

parity en

奇偶检验使能,高有效

1’b1

[2]

RW

stop bit个数

1’b0:1个停止位

1’b1:2个停止位

1’b0

[1 : 0]

RW

uart比特长度。

2’h0:5bit

2’h1:6bit

2’h2:7bit

2’h3:8bit

2’h3

自动硬件流控寄存器

表 139 UART自动硬件流控寄存器

访问

操作说明

复位值

[31: 5]

保留

[4 : 2]

RW

RTS trigger level

在afc_enable有效时,决定何时需要将RTS置无效。|

3’h0:rxfifo有4个以上字节

3’h1:rxfifo有8个以上字节

3’h2:rxfifo有12个以上字节

3’h3:rxfifo有16个以上字节

3’h4:rxfifo有20个以上字节

3’h5:rxfifo有24个以上字节

3’h6:rxfifo有28个以上字节

3’h7:rxfifo有31个以上字节

3’h5

[1]

RW

RTS set

当AFC_enable无效时,软件可以通过设置此位来完成接收流量控制。当AFC_enable有效时,此位不关心。

1’b0

[0]

RW

afc enable

1’b1:有效,接收条件rts使用rts_trigger_level控制产生。

1’b0

DMA设置寄存器

表 140 UART DMA设置寄存器

访问

操作说明

复位值

[31: 8]

保留

[7 : 3]

RW

rxfifo timeout num

rxfifo 中存在数据小于 rxfifo _trigger _level 情况下,如果N个包的时间内,没有接收到新的数据时,产生 rxfifo timeout 中断。

该计时功能使能后,无论是第一次计时还是上一次计时完成,都只在接收到至少1个包后才开始计时

5’h04

[2]

RW

rxfifo timeout en

rxfifo超时使能

1’b1

[1]

RW

rx dma enable

接收DMA使能,高有效。

0:表示接收过程使用中断。

1’b0

[0]

RW

tx dma enable

发送DMA使能,高有效。

0:表示发送过程使用中断。

1’b0

FIFO控制寄存器

表 141 UART FIFO控制寄存器

访问

操作说明

复位值

[31: 6]

保留

[5 : 4]

RW

rxfifo trigger level

当rxfifo中数据字节数大于等于该值时,触发中断,或者触发 rxdma req。

2’h0:1byte

2’h1:4byte

2’h2:8byte

2’h3:16byte

2’h1

[3 : 2]

RW

txfifo trigger level

当txfifo中数据字节数小于等于该值时,触发中断,或者触发 txdma req。

2’h0:empty

2’h1:4byte

2’h2:8byte

2’h3:16byte

2’h1

[1]

RW

rxfifo reset

复位rxfifo,将rxfifo状态清空

1’b0

[0]

RW

txfifo reset

复位txfifo,将txfifo状态清空

1’b0

波特率控制寄存器

表 142 UART 波特率控制寄存器

访问

操作说明

复位值

[31:20]

保留

[19:16]

RW

ubdiv_frac

系统时钟除以16倍波特率时钟商的小数部分指示。具体值为frac×16。

(参考章节2.3.2,波特率计算方法)

4’h3

[15: 0]

RW

ubdiv

系统时钟除以16倍波特率时钟商的整数部分减1。

默认系统时钟为40MHz,波特率为19200。

(参考章节2.3.2,波特率计算方法)

16’h81

中断屏蔽寄存器

表 143 UART 中断屏蔽寄存器

访问

操作说明

复位值

[31: 9]

保留

[8]

RW

overrun error int mask,rxfifo溢出中断屏蔽位,高有效。

1’b1

[7]

RW

parity error int mask,奇偶检验中断屏蔽位,高有效。

1’b1

[6]

RW

frame error int mask,数据帧出错中断屏蔽位,高有效。

1’b1

[5]

RW

break detect int mask,break信号检测中断屏蔽位,高有效。

1’b1

[4]

RW

cts changed indicate mask,CTS信号变化中断屏蔽位,高有效。

1’b1

[3]

RW

rxfifo data timeout int mask,rxfifo接收数据超时中断屏蔽位,高有效。

1’b1

[2]

RW

rxfifo trigger level int mask,rxfifo达到触发值中断屏蔽位,高有效。

1’b1

[1]

RW

txfifo trigger level int mask,txfifo达到触发值中断屏蔽位,高有效。

1’b1

[0]

RW

txfifo empty int mask,txfifo为空中断屏蔽位,高有效。

1’b1

中断状态寄存器

表 144 UART 中断状态寄存器

访问

操作说明

复位值

[31: 9]

保留

[8]

RW

overrun error

rxfifo出现溢出。

软件主动写1清0。

1’b0

[7]

RW

parity error

接收到的包校验位错误。

DMA情况下,此中断仍会产生。 但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[6]

RW

frame error

接收到的包停止位错误。

DMA情况下,此中断仍会产生。 但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[5]

RW

break detect

接收到break包。

DMA情况下,此中断仍会产生。 但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[4]

RW

cts changed

cts信号变化则产生此中断。

软件主动写1清0。

1’b0

[3]

RW

rxfifo data timeout

rxfifo中数据长度小于rx fifo trigger level但N个数据周期没有接收到任何数据,则产生中断。

软件主动写1清0。

1’b0

[2]

RW

rxfifo trigger level interrupt

当rxfifo中数据个数由小于 rxfifo trigger level中指定的数变成大于或等于该数时,产生此中断。

此时应该根据rxfifo

count确定当前数据帧大小。

软件主动写1清0。

1’b0

[1]

RW

txfifo trigger level interrupt

当txfifo中数据个数由大于 txfifo trigger level中指定的数变成小于或等于该数时,产生中断。

软件主动写1清0。

1’b0

[0]

RW

tx fifo empty interrupt

当发送完成当前包,并且txfifo为空时,产生此中断。

软件主动写1清0。

1’b0

FIFO状态寄存器

表 145 UART FIFO状态寄存器

访问

操作说明

复位值

[31:13]

保留

[12]

RW

cts status

当前cts的状态

1’b0

[11: 6]

RW

rxfifo count

rxfifo中数据个数

6’h0

[5 : 0]

RW

txfifo count

txfifo中数据个数

6’h0

TX起始地址寄存器

表 146 UART TX起始地址寄存器

访问

操作说明

复位值

[31: 0]

WO

tx data window

发送数据起始地址。

注意:uart发送与接收数据只支持字节操作,当采用burst传输时,有可能使用字节地址递增的方式,设计中最多支持16-burst的操作,即16byte 。因此从发送/接收起始地址后共 16byte(4个字)都保留为发送/接收数据窗口。

32’h0

RX起始地址寄存器

表 147 UART RX起始地址寄存器

访问

操作说明

复位值

[31: 0]

RO

rx data window

接收数据起始地址。

注意:uart发送与接收数据只支持字节操作,当采用burst传输时,有可能使用字节地址递增的方式,设计中最多支持16-burst的操作,即16byte 。因此从发送/接收起始地址后共 16byte(4个字)都保留为发送/接收数据窗口。

32’h0

UART&7816模块

功能概述

UART&7816模块兼容UART功能,同时兼容7816接口功能。

W800 支持1组UART&7816复用接口(uart2),作为UART使用时,可以通过精细的时钟分频组合可以实现各种波特率的设置,最大可支持2Mbps的通信速率。

W800 UART&7816接口能和硬件DMA配合使用,实现数据的高效传输。

主要特性

  • 符合APB总线接口协议,支持UART异步全双工和7816异步半双工通信方式;

  • 支持中断或轮询工作方式;

  • 支持DMA Byte传输模式,发送接收各32-byte FIFO;

  • 串口功能:

  • 波特率可编程,最大支持2Mbps

  • 5-8bit 数据长度,以及parity极性可配置

  • 1或2个停止位可配置

  • 支持RTS/CTS流控

  • 支持Break帧发送与接收

  • 支持Overrun,parity error,frame error,rx break frame中断指示

  • 7816接口功能:

  • 兼容 ISO-7816-3 T=0.T=1 模式

  • 兼容EVM2000协议

  • 可配置guard time(11 ETU-267 ETU)

  • 正向/反向约定,可软件配置

  • 支持发送/接收奇偶校验及重传功能

  • 支持0.5和1.5个stop位可配置

UART功能描述

参考16章UART功能模块描述

7816功能描述

7816简介

ISO7816是国际标准的智能卡协议,协议规定了智能卡物理特性、尺寸和接口、电信号和传输协议、命令、安全等多方面信息。

W800主要实现了ISO 7816 -3 电信号和传输协议这部分,支持T0和T1卡。通过W800的7816接口,用户可以无法关心时钟和数据的信号通信逻辑,可以直接与智能卡进行数据和命令的交互。关于智能卡的数据和命令交互方式,用户需要自己参考ISO7816-4协议去实现。

7816接口

W800主要集成了智能卡的时钟和数据两个接口,来实现数据和命令的通信电信号逻辑。实际智能卡应用中,还有RST、VCC、GND这三个信号,RST可以通过普通GPIO来控制,主要是智能卡上电复位时使用。VCC可以直接连接3.3V电源,或者通过GPIO配合其他电路来控制智能卡VCC的通断。

图 32 7816 连接示意图

图 32 7816 连接示意图

7816配置

作为7816接口使用时需要进行相关配置:

  • 设置接口工作模式,UART_LIN_CTRL[24]设置为1,选择当前接口为7816模式;

  • 设置7816 MSB或LSB传输模式,UART_LIN_CTRL[3]设置为1,通过UART_LIN_CTRL[3]来选择7816接口是MSB模式(bit7先传输),还是LSB模式(bit0先传输);

  • 设置停止位,UART_LIN_CTRL[2]可选择智能卡0.5或者1.5个停止位;

  • 选择卡片类型,UART_LIN_CTRL[8]可以选择T0卡或者T1卡;

  • 配置智能卡通信超时时间,通过WAIT_TIME来设置超时时间,接收数据时超时未收到数据则产生超时中断。

7816时钟配置

智能卡时钟是指通过CLK引脚提供给智能卡的时钟,通过BAUD_RATE_CTRL[21:16]来设置,计算方法如下:

\begin{gather*} clk\_ div = \ \frac{fclk\_ apb}{2 \times fsc\_ clk} - 1 \end{gather*}

fsc_clk:需要给智能卡提供的CLK;

fclk_apb:系统APB总线时钟;

clk_div:需要设置给BAUD_RATE_CTRL[21:16]的时钟分频因子

因为clk_div只能取整数,为了减少误差,我们最好采取四舍五入的计算方法,C语言计算取整会丢掉小数部分,C语言采取四舍五入的转换方法如下:

clk_div = (fclk_apb + fsc_clk)/(2 * fsc_clk) - 1;

7816速率设置

智能卡中有一个时间单位ETU,智能卡按此时间单位来传输数据和命令。ETU的设置是通过BAUD_RATE_CTRL[15: 0]来设置的,计算方法如下:

\begin{gather*} 1etu = \ \frac{F}{D} \times \frac{1}{f} \end{gather*}

f:即我们智能卡的CLK;

F和D均是有智能卡给出的参数。

其实我们需要设置的BAUD_RATE_CTRL[15: 0]的 ubdiv 就是F/D,上面的公式只是为了计算ETU供大家参考。我们实际设置的时候,只需要设置ubdiv = F/D即可。F和D可由下表进行查询。

表 148 7816速率设置

表 148 7816速率设置 (参考协议文件ISO_IEC_FDIS_7816-3_(E).PDF)

7816上电复位

图 33 7816 上电复位时序

图 33 7816 上电复位时序

上图为智能卡上电复位的时序图。CLK和IO初始状态为低,需要我们配置成GPIO模式并拉低。VCC拉高后CLK和IO配置成7816模式后由7816控制即可。最后我们需要把RST引脚手动拉高,完成复位过程。配置步骤如下:

  • I/O、CLK、RST配置为普通GPIO模式并保持低电平;

  • 设置7816为T=0模式;

  • 通过GPIO控制VCC上电;

  • 配置I/O、CLK为7816模式,由7816驱动时钟和数据;

  • 配置7816时钟频率并允许时钟输出;

  • 置位RST管脚,等待接收ATR数据,若40000个时钟内没有收到ATR数据,则执行失活流程,卡片失活。

7816热复位

图 34 7816热复位

图 34 7816热复位

如上图所示,热复位的过程很简单,正常工作模式,将RST引脚拉低400个周期即可。配置步骤如下:

  • 保持VCC上电状态;

  • 拉低RST引脚至少400个时钟周期;

  • 拉高RST引脚,等待接收ATR数据,若40000个时钟内没有收到ATR数据,则执行失活流程,卡片失活。

7816 失活过程

图 35 7816 失活过程

图 35 7816 失活过程

如上图所示,RST拉低之后需要将CLK和IO配置成普通IO模式并拉低,最后关闭VCC电源,操作步骤如下:

  • 保持VCC上电状态;

  • 拉低RST引脚;

  • 配置CLK和IO为GPIO模式,并拉低;

  • 通过GPIO控制VCC掉电;

7816数据传输

7816的数据传输的时序已经有W800硬件完成,无需用户操作,用户如果想要了解此部分具体内容,请参考ISO7816-3协议中的规定。

图 36 7816数据传输

图 36 7816数据传输

UART&7816 DMA传输

W800的UART&7816支持DMA传输模式,DMA传输时需要配置UART&7816寄存器列表里面的DMA_CTRL寄存器来打开UART的DMA使能。同时需要配置UART_FIFO_CTRL配置txfifo、rxfifo中剩余多少个字节触发DMA搬运。

DMA的源或目的地址设置为TX_DATA_WINDOW 或 RX_DATA_WIDNOW,其他DMA寄存器的设置参考DMA寄存器章节。

注意:UART&7816 DMA传输只能设置为Byte模式,不支持half_word和word传输模式。

UART&7816中断

UART&7816 支持中断操作模式,包括fifo空,fifo达到设定触发值,CTS变化,出错等都会产生UART&7816中断,可以通过INT_MASK寄存器来设置需要的中断。

当UART&7816中断产生后,可以通过INT_SRC来查询当前的中断状态,触发中断的原因。软件写1清0。

寄存器描述

寄存器列表

表 149 UART&7816寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

数据流控制寄存器

UART_LINE _CTRL

RW

uart&7816通信的数据相关设置

0X0033_520B

0X0004

自动硬件流控寄存器

AUTO_FLOW _CTRL

RW

uart rts/cts 硬件流控设置

0X0000_0014

0X0008

DMA设置寄存器

DMA_CTRL

RW

uart&7816 dma传输模式设置

0X0000_0024

0X000C

FIFO控制寄存器

UART_FIFO _CTRL

RW

设置 uart&7816 fifo触发等级

0X0000_0014

0X0010

波特率控制寄存器

BAUD_RATE _CTRL

RW

设置uart波特率、7816时钟

0X0003_0082

0X0014

中断屏蔽寄存器

INT_MASK

RW

设置 uart&7816 需要使用的中断

0X0000_03FF

0X0018

中断状态寄存器

INT_SRC

RW

uart&7816中断状态指示

0X0000_0000

0X001C

FIFO状态寄存器

FIFO_STATUS

RW

fifo状态,cts状态查询

0X0000_0000

0X0020

TX起始地址寄存器

TX_DATA _WINDOW

WO

0X0000_0000

0X0024

保留

0X0028

保留

0X002C

保留

0X0030

RX起始地址寄存器

RX_DATA _WINDOW

RO

0X0000_0000

0X0034

保留

0X0038

保留

0X003C

保留

0X0040

7816保护时间寄存器

GUARD_TIME

RW

7816数据间保护时间

0X0000_0000

0X0044

7816超时时间寄存器

WAIT_TIME

RW

7816接收数据超时时间

0X0007_8000

数据流控制寄存器

表 150 UART&7816数据流控制寄存器

访问

操作说明

复位值

[31:25]

保留

[24]

RW

sc_mode

1’b0:uart模式

1’b1:7816模式

1’b0

[23]

RW

7816卡T0模式rx_retrans_en

1’b0:Rx自动重传无效

1’b1:Rx自动重传使能

1’b0

[22:20]

RW

7816卡T0模式rx_retrans_cnt

3’h3

[19]

RW

7816卡T0模式tx_retrans_en

1’b0:Tx自动重传无效

1’b1:Tx自动重传使能

1’b0

[18:16]

RW

7816卡T0 模式tx_retrans_cnt

tx自动重传次数

3’h3

[15:11]

RW

7816卡的最小MIN_BGT (Min Block Guard Time )

Min Block Guard Time计算:10+stop位(默认2位)+ 配置值MIN_BGT

Note:

T=0:在发送和接收的两个相反方向连续字符的起始位下降沿之间的最小时间间隔不能小于16个ETU。必须能够正确解释接收到的 其起始位下降沿和最后发送的字节起始位下降沿间隔为15个ETU的字符。

T=1:在发送和接收的两个相反方向连续字符的起始位下降沿之间的最小时间间隔(块保护时间,B GT)必须为22个ETU。必须能够正确解释接收到的其起始位下降沿和最后发送的字节起始位下降沿间隔为21个ETU以内接收到的字符。

5’ha

[10]

RW

7816卡时钟控制配置

1’b0:在配置为卡模式时产生卡时钟输出,否则卡时钟输出无效

1’b1:时钟停止

1’b0

[9]

RW

7816卡的parity错误时是否接收数据

1’b0:不接收

1’b1:接收

1’b1

[8]

RW

7816卡的T0/T1模式配置 ,

1’b0:T0模式

1’b1:T1模式

1’b0

[7]

RW

uart_rx_enable

uart/7816模式下,接收使能,高有效

1’b0

[6]

RW

uart_tx_enable

uart/7816模式下,发送使能,高有效。

1’b0

[5]

RW

send break enable

发送break数据包。Uart会在该为被置位后发送完一个break数据包,发送完成后自动清 0。

1’b0

[4]

RW

parity极性 (UART 模式)

1’b0:偶校验

1’b1:奇校验

正反向(7816 模式)

1’b0:LSB(b0 bit)先传输

1’b1:MSB(b7 bit)先传输

1’b0

[3]

RW

parity使能,高有效(UART模式)

1’b1

[2]

RW

stop bit个数(UART模式)

1’b0:1个停止位

1’b1:2个停止位

stop bit个数(7816模式)

1’b0:0.5个停止位

1’b1:1.5个停止位

1’b0

[1 : 0]

RW

uart比特长度(UART模式 )

2’h0:5bit

2’h1:6bit

2’h2:7bit

2’h3:8bit

2’h3

自动硬件流控寄存器

表 151 UART&7816自动硬件流控寄存器

访问

操作说明

复位值

[31: 5]

保留

[4 : 2]

RW

RTS trigger level(UART模式)

在afc_enable有效时,决定何时需要将RTS置无效。

3’h0:rxfifo有4个以上字节

3’h1:rxfifo有8个以上字节

3’h2:rxfifo有12个以上字节

3’h3:rxfifo有16个以上字节

3’h4:rxfifo有20个以上字节

3’h5:rxfifo有24个以上字节

3’h6:rxfifo有28个以上字节

3’h7:rxfifo有31个以上字节

3’h5

[1]

RW

RTS set(UART模式)

当AFC_enable无效时,软件可以通过设置此位来完成接收流量控制。当AFC_enable有效时,此位不关心。

1’b0

[0]

RW

afc enable(UART模式)

接收条件rts使用rts_trigger_level控制产生 ,高有效。

1’b0

DMA设置寄存器

表 152 UART&7816 DMA设置寄存器

访问

操作说明

复位值

[31: 8]

保留

[7 : 3]

RW

rxfifo timeout num(UART模式)

rxfifo中存在数据小于 rxfifo _trigger _level情况下,如果N个包的时间内,没有接收到新的数据时,产生 rxfifo timeout 中断。

该计时功能使能后,无论是第一次计时还是上一次计时完成,都只在接收到至少1个包后才开始计时

5’h4

[2]

RW

rxfifo timeout en(UART&7816模式)

rxfifo超时使能,高有效

1’b1

[1]

RW

rx dma enable(UART&7816模式)

接收DMA使能,高有效。

0表示接收过程使用中断。

1’b0

[0]

RW

tx dma enable(UART&7816模式)

发送DMA使能,高有效。

0表示发送过程使用中断。

1’b0

FIFO控制寄存器

表 153 UART&7816 FIFO控制寄存器

访问

操作说明

复位值

[31: 6]

保留

[5 : 4]

RW

rxfifo trigger level(UART&7816 模式)

当rxfifo中数据字节数大于等于该值时,触发中断,或者触发 rxdma req。

2’h0:1byte

2’h1:4byte

2’h2:8byte

2’h3:16byte

2’h1

[3 : 2]

RW

txfifo trigger level(UART&7816 模式)

当txfifo中数据字节数小于等于该值时,触发中断,或者触发 txdma req。

2’h0:empty

2’h1:4byte

2’h2:8byte

2’h3:16byte

2’h1

[1]

RW

rxfifo reset(UART&7816 模式)

复位rxfifo,将rxfifo状态清空

1’b0

[0]

RW

txfifo reset(UART&7816 模式)

复位txfifo,将txfifo状态清空

1’b0

波特率控制寄存器

表 154 UART&7816波特率控制寄存器

访问

操作说明

复位值

[31:20]

保留

[19:16]

RW

ubdiv_frac

UART模式:

系统时钟除以16倍波特率时钟商的小数部分指示。具体值为frac×16。

(参考章节波特率计算方法)

7816模式:

ubdiv_frac = (fclk_apb + fsc_clk)/(2 * fsc_clk) - 1;

(参考7816时钟计算方法)

4’h3

[15: 0]

RW

ubdiv

UART模式:

系统时钟除以16倍波特率时钟商的整数部分减1。

默认系统时钟为40MHz,波特率为19200。

(参考波特率计算方法)

7816模式:

ubdiv=Fi/Di (Fi、Di为智能卡反馈的参数 ,edu频率:f_etuclk = fsc_clk/(ubdiv+ 1))

(参考章节7816速率计算方法 )

16’h82

中断屏蔽寄存器

表 155 UART&7816中断屏蔽寄存器

访问

操作说明

复位值

[31:10]

保留

[9]

RW

7816卡发送时收到error signal错误信号。(7816模式)

1’b1

[8]

RW

overrun error int mask,rxfifo溢出中断屏蔽位,高有效。(UART&7816模式 )

1’b1

[7]

RW

parity error int mask,奇偶检验中断屏蔽位, 高有效。(UART&7816模式)

1’b1

[6]

RW

frame error int mask,数据帧出错中断屏蔽位 ,高有效。(UART模式)

1’b1

[5]

RW

break detect int mask,break信号检测中断屏蔽位,高有效。(UART模式)

1’b1

[4]

RW

cts changed indicate mask,CTS信号变化中断屏蔽位,高有效。(UART模式)

1’b1

[3]

RW

rxfifo data timeout int mask,rxfifo接收数据超时中断屏蔽位,高有效。(UART&7816模式)

1’b1

[2]

RW

rxfifo trigger level int mask,rxfifo达到触发值中断屏蔽位,高有效。(UART&7816模式)

1’b1

[1]

RW

txfifo trigger level int mask,txfifo达到触发值中断屏蔽位,高有效。(UART&7816模式)

1’b1

[0]

RW

txfifo empty int mask,txfifo为空中断屏蔽位,高有效。(UART&7 816模式)

1’b1

中断状态寄存器

表 156 UART&7816中断状态寄存器

访问

操作说明

复位值

[31: 9]

保留

[9]

RW

7816卡发送时收到error signal错误信号。(7816模式)

[8]

RW

overrun error(UART&7816模式)

rxfifo出现溢出。

软件主动写1清0。

1’b0

[7]

RW

parity error(UART&7816模式)

接收到的包校验位错误。

DMA情况下,此中断仍会产生。但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[6]

RW

frame error(UART模式)

接收到的包停止位错误。

DMA情况下,此中断仍会产生。但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[5]

RW

break detect(UART模式)

接收到break包。

DMA情况下,此中断仍会产生。但DMA操作不关心此中断。

软件主动写1清0。

1’b0

[4]

RW

cts changed(UART模式)

cts信号变化则产生此中断。

软件主动写1清0。

1’b0

[3]

RW

rxfifo data timeout(UART&7816模式)

rxfifo中数据长度小于rxfifo trigger level但N个数据周期没有接收到任何数据,则产生中断。

软件主动写1清0。

1’b0

[2]

RW

rxfifo trigger level interrupt(UART&7816模式)

当rxfifo中数据个数由小于 rxfifo trigger level中指定的数变成大于或等于该数时,产生此中断。

此时应该根据rxfifo

count确定当前数据帧大小。

软件主动写1清0。

1’b0

[1]

RW

txfifo trigger level interrupt(UART&7816模式)

当txfifo中数据个数由大于 txfifo trigger level中指定的数变成小于或等于该数时,产生中断。

软件主动写1清0。

1’b0

[0]

RW

txfifo empty interrupt(UART& 7816模式)

当发送完成当前包,并且txfifo为空时,产生此中断。

软件主动写1清0。

1’b0

FIFO状态寄存器

表 157 UART&7816 FIFO状态寄存器

访问

操作说明

复位值

[31:13]

保留

[12]

RW

cts status(UART模式)

当前cts的状态

1’b0

[11: 6]

RW

rxfifo count(UART&7816模式)

rxfifo中数据个数

6’h0

[5 : 0]

RW

txfifo count(UART&7816模式)

txfifo中数据个数

6’h0

TX起始地址寄存器

表 158 UART&7816 TX起始地址寄存器

访问

操作说明

复位值

[31: 0]

WO

tx data window(UART&7816模式)

发送数据起始地址。

注意:uart发送与接收数据只支持字节操作,当采用burst传输时,有可能使用字节地址递增的方式,设计中最多支持16-burst的操作,即16byte。因此从发送/接收起始地址后共16byte(4个字)都保留为发送/接收数据窗口。

32’h0

RX起始地址寄存器

表 159 UART&7816 RX起始地址寄存器

访问

操作说明

复位值

[31: 0]

RO

rx data window(UART&7816模式)

接收数据起始地址。

注意:uart发送与接收数据只支持字节操作,当采用burst传输时,有可能使用字节地址递增的方式,设计中最多支持16-burst的操作,即16byte 。因此从发送/接收起始地址后共 16byte(4个字)都保留为发送/接收数据窗口。

32’h0

7816保护时间寄存器

表 160 7816保护时间寄存器

访问

操作说明

复位值

[31: 8]

保留

[7 : 0]

RW

ex_gt_num

7816模式下,guard time计算:10+stop位+配置值ex_gt_num

8’h0

7816超时时间寄存器

表 161 7816超时时间寄存器

访问

操作说明

复位值

[31:24]

保留

[23: 0]

RW

wait time计数器(以ETU为单位 )

7816模式下:

CWT和BWT时间,配置为最大默认值。

(在T1模式下:BWT =(11 etu+ 2BWI*960*Fd/fsc ))

24’h78000

Timer模块

功能概述

定时器包含一个32-bit自动加载的计数器,该计数器由系统时钟经过分频后驱动。W800有6路完全独立定时器。实现了精确的定时时间以及中断功能,可用于延时或者周期性事件处理。

主要特性

  • 6路完全独立的定时器

  • 32-bit自动加载计数器

  • 定时单位可配置为ms、us

  • 可实现单次定时或者重复定时功能

  • 定时中断功能

  • 可随时查询计时器计数值;

功能描述

定时器模块由6路完全独立的定时器组成,互不影响,6路可以同时工作。

系统时钟经过分频系数分频后得到us标准时钟,用于计数器的输入时钟。定时单位可配置为us、ms两种级别。

定时值是一个32-bit可配置的寄存器,可满足不同定时时长的需求。每一个定时器对应一个中断,当

定时时间满足后,如果使能了中断功能,则会产生一个中断请求,可以用于处理周期性事件。

定时功能

定时功能是指依据用户设定时间,当时间到产生硬件中断,通知用户实现特定的功能。定时触发支持单次和周期两种,一种可用于处理单次事件,一种可用于处理周期性事件。

用户依据系统时钟的分频系数获得APB总线时钟频率,设定定时器的基准微秒计数配置寄存器(TMR_CONFIG),设置定时值,配置定时单位,工作模式,使能中断,然后,启动定时功能。当定时时间到,程序进入定时器中断处理函数,清除中断。

延时功能

延时功能是指用户可以依据定时器的倒计时功能,让程序处于等待状态,直至计时完成,程序才继续运行。

寄存器描述

寄存器列表

表 162 Timer寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

标准us配置寄存器

TMR_CONFIG

RW

标准us定时分频值,由总线时钟分频得到标准us定时,该值等于APB总线频率(MHz)减一

0X0000_0027

0X0004

定时器控制寄存器

TMR_CSR

RW

定时器控制寄存器

0X0631_8C63

0X0008

定时器1定时值配置寄存器

TMR1_PRD

RW

Timer1定时值配置寄存器

0X0000_0000

0X000C

定时器2定时值配置寄存器

TMR2_PRD

RW

Timer2定时值配置寄存器

0X0000_0000

0X0010

定时器3定时值配置寄存器

TMR3_PRD

RW

Timer3定时值配置寄存器

0X0000_0000

0X0014

定时器4定时值配置寄存器

TMR4_PRD

RW

Timer4定时值配置寄存器

0X0000_0000

0X0018

定时器5定时值配置寄存器

TMR5_PRD

RW

Timer5定时值配置寄存器

0X0000_0000

0X001C

定时器6定时值配置寄存器

TMR6_PRD

RW

Timer6定时值配置寄存器

0X0000_0000

0X0020

定时器1当前计数值

TMR1_CNT

RO

Timer1当前计数值

0X0000_0000

0X0024

定时器2当前计数值

TMR1_CNT

RO

Timer2当前计数值

0X0000_0000

0X0028

定时器3当前计数值

TMR1_CNT

RO

Timer3当前计数值

0X0000_0000

0X002C

定时器4当前计数值

TMR1_CNT

RO

Timer4当前计数值

0X0000_0000

0X0030

定时器5当前计数值

TMR1_CNT

RO

Timer5当前计数值

0X0000_0000

0X0034

定时器6当前计数值

TMR1_CNT

RO

Timer6当前计数值

0X0000_0000

标准us配置寄存器

表 163 Timer标准us配置寄存器

访问

操作说明

复位值

[31: 7]

保留

[6 : 0]

RW

时钟分频配置prescale。

例如:

apb_clk=40MHz

prescale = 40 – 1 = 8’d39

7’h27

定时器控制寄存器

表 164 Timer定时器控制寄存器

访问

操作说明

复位值

[31:30]

RW

保留

2’h0

[29:25]

RW

TMR6_CSR,同TMR1_CSR

5’h3

[24:20]

RW

TMR5_CSR,同TMR1_CSR

5’h3

[19:15]

RW

TMR4_CSR,同TMR1_CSR

5’h3

[14:10]

RW

TMR3_CSR,同TMR1_CSR

5’h3

[9 : 5]

RW

TMR2_CSR,同TMR1_CSR

5’h3

[4 : 0]

RW

[4 : 0]为TMR1_CSR,具体如下:

[4]:中断状态寄存器,写1清除

1’b0:Timer无中断产生;

1’b1:Timer产生中断;

1’b0

[3]:中断使能寄存器

1’b0:定时时间完成后不产生中断;

1’b1:定时时间完成后产生中断;

1’b0

[2]:定时器使能寄存器

1’b0:定时器不工作;

1’b1:使能定时器

1’b0

[1]:定时器工作模式

1’b0:定时器重复定时;

1’b1:定时器只定时一次,定时完成后自动关闭;

1’b1

[0]:定时器定时单位

1’b0:定时单位为us;

1’b1:定时单位为ms;

1’b1

定时器1定时值配置寄存器

表 165定时器1定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器1的定时值

32’b0

定时器2定时值配置寄存器

表 166 定时器2定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器2的定时值

32’b0

定时器3定时值配置寄存器

表 167 定时器3定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器3的定时值

32’b0

定时器4定时值配置寄存器

表 168 定时器4定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器4的定时值

32’b0

定时器5定时值配置寄存器

表 169 定时器5定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器5的定时值

32’b0

定时器6定时值配置寄存器

表 170 定时器6定时值配置寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时器6的定时值

32’b0

定时器1当前计数值寄存器

定时器1当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器1当前计数值;

32’b0

定时器2当前计数值寄存器

定时器2当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器2当前计数值;

32’b0

定时器3当前计数值寄存器

定时器3当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器3当前计数值;

32’b0

定时器4当前计数值寄存器

定时器4当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器4当前计数值;

32’b0

定时器5当前计数值寄存器

定时器5当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器5当前计数值;

32’b0

定时器6当前计数值寄存器

定时器6当前计数值寄存器

访问

操作说明

复位值

[31: 0]

RO

读取定时器6当前计数值;

32’b0

电源管理模块

功能概述

PMU实现芯片硬件工作状态的切换,以及状态切换过程中的电源管理,同时提供定时器、实时时钟以及32K时钟。

主要特性

  • 提供芯片电源控制

  • 提供定时器功能

  • 提供实时时钟控制

  • 提供32K RC振荡器校准功能

  • 提供唤醒功能;

功能描述

全芯片电源控制

PMU模块控制芯片的电源开关,包括40M起振电路,BandGap,数字PLL,电压检测电路,数字电路LDO。

在芯片上电时,PMU模块根据预设上电顺序引导各模块依次打开电源;

当软件配置寄存器进入休眠模式时,根据安全的下电顺序引导各功能模块依次关闭电源;

当软件配置寄存器进入睡眠模式时,根据顺序关闭时钟,晶体起振电路和相关电源;

在休眠/睡眠模式下提供三种唤醒模式:Timer定时唤醒,RTC定时唤醒或者通过将特殊WAKEUP管脚拉高唤醒。

低功耗模式

通过配置PMU寄存器芯片可以选择2种低功耗模式;

Standby 模式:

此模式下数字电源域的电源将被关断,全芯片只有PMU模块工作,提供唤醒与复位功能;此时全芯片功耗约15uA左右。电源关断后内存中存储数据与内容将全部丢失,唤醒后将重新载入固件,相当于重新启动;

Sleep模式:

此模式下数字电源域的电源将保留,只是关断DPLL与晶体起振电路,切断时钟,此时全芯片功耗约在1mA左右;内存中存储数据与代码仍会保留;唤醒后程序将继续运行;

唤醒模式

PMU支持3种唤醒模式,Timer唤醒,RTC唤醒和外部IO唤醒。

Timer唤醒

在软件设置休眠/睡眠模式之前,配置PMU中Timer0模块,设置好休眠时间。当系统进入休眠模式后,当Timer0 计时到达休眠时间后将会唤醒系统,并产生相应Timer中断。系统恢复运行后需要对中断状态寄存器中相应状态位写’1’清除中断状态,否则,下次进入休眠模式后将立即被中断唤醒;

RTC唤醒

在软件设置休眠/睡眠模式之前,配置PMU中RTC模块,设置好休眠时间。当系统进入休眠模式后,当RTC记时到达休眠时间后将会唤醒系统,并给出相应RTC中断。系统恢复运行后请对中断寄存器0x14中相应状态位写’1’清除中断状态,否则,下次进入休眠模式后将立即被中断唤醒;

外部IO唤醒

在软件休眠/睡眠后,PMU会检测特定Wakeup脚,外部控制器可通过将此IO拉高来唤醒系统,并给出相应IO唤醒中断。PMU在离开休眠模式后不再检测该IO状态。系统恢复运行后请对中断寄存器0x14中相应状态位写’1’清除中断状态,否则,下次进入休眠模式后将立即被中断唤醒;

Timer0定时器

通过AHB寄存器配置定时器使能信号和定时时间。首先设置定时值,然后设置定时器使能BIT启动定时器,当达到定时时间后,产生中断,软件通过写清状态寄存器的BIT0来清除中断标志。

实时时钟功能

参考实时时钟模块

32K时钟源切换与校准

W800芯片集成32K RC振荡器作为PMU 模块时钟来源。

因工作环境与温度变化,32K RC振荡器的输出频率可能会产生变化,造成计时偏差。因此,在PMU模块中引入32K RC振荡器校准功能,以及32K时钟的切换功能,以便矫正计时偏差。

  1. 32K时钟源的切换

32K时钟的切换可以通过设置PS_CR寄存器的bit3为1,从32K RC振荡器切换到由40M时钟分频得到的32K时钟。但是,当芯片进入休眠模式时,因为40M时钟将被关闭,bit3会自动清0。待唤醒以后若固件仍要使用精准计时功能,需重新设置bit3为1。

  1. 32K RC振荡电路的校准

首先设置PS_CR寄存器的bit2为0,然后再把PS_CR寄存器的bit2设置为1。

校准完成后,32K RC振荡器会相对准确。但是如果希望比较精准的计时,还是建议使用40M时钟分频得到的32K时钟,此时将得到精确的RTC时钟,偏差将只与晶体频偏相关。

寄存器描述

寄存器列表

表 171 PMU寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

PMU控制寄存器

PS_CR

RW

用于配置32K校准,配置32K时 钟源,设置芯片的 STANDBY功能

0X0000_0002

0X0004

PMU定时器0

TIMER0

RW

配置定时值(单位为秒),使能定时器

0X0000_0000

0X0008

保留

0X0014

PMU中断源寄存器

INT_SRC

RW

提供PMU中断标志

0X0000_0000

PMU控制寄存器

表 172 PMU控制寄存器

访问

操作说明

复位值

[31: 11]

RO

24’b0

[10]

RW

唤醒按键中断极性选择

0: 唤醒按键为高电平时置位中断;

1: 唤醒按键为高电平时置位中断;

只在 Sleep 中断有效。

1’b0

[9:6]

RW

按键唤醒最低保持时长数

单位:128ms。

4’d01

[5]

RW

DLDO_CORE 参考电压源选择

1: ABG

0: DBG

1’b1

[4]

RW

32K 振荡电路 BYPASS 信号

高有效,置位为1后 32K 为 40M 时钟分频得到。

1’b0

[3]

RW

RC 32K振荡器校准电路启动开关

1’b0:校准电路复位;

1’b1:启动校准电路;

要启动校准功能,需要此位先置0 ,后置1。

1’b0

[2]

RW

使能按键触发进入睡眠功能

0:不使能;

1:在active模式时按下i o_wakeup 按键达到到阈值时间,将触发 io _sleep_flag 中断

,上报给MCU。

1’b0

[1]

RW

Sleep使能信号,高有效。

1’b0:芯片唤醒状态

1’b1:芯片进入 Sleep 状态

如果 WAKEUP 脚为无效电平, 且没有配置 TIMER0/1 中断 唤醒,则该寄存器有效时,芯

片进入 Sleep 状态;

如果唤醒中断产生,则芯片会从 Sleep 状态切换到唤醒状态,唤 醒条件满足,该位自动

清0。

唤醒源:WAKEUP 脚,TIMER0/TIMER1,RTC

  • WAKEUP 脚,高有效; 要想芯片进入 Sleep 状态,WAKEUP 脚必须处于低电平。要唤醒

    时,拉高 WAKEUP 脚,产生唤醒中断,使芯片离开 Sleep 状态。

  • TIMER0 ,定时器唤醒中断

    当 WAKEUP 脚为低, TIMER0 设置定时时间并使能 ,定时时间到会产生唤醒中断,使 芯片离开 Sleep 状态。

  • RTC,定时时间到唤醒

    当 WAKEUP 脚为低,RTC定 时时间到,会产生唤醒中断,使芯片离开 Sleep 状态。

1’b1

[0]

RW

STANDBY 使能信号,高有效

1’b0:芯片唤醒状态;

1’b1:芯片进入 STANDBY 状态;

如果 WAKEUP 脚为无效电平, 且没有配置 TIMER0/1 中断 唤醒,则该寄存器有效时,芯片

进入 STANDBY 状态;

如果唤醒中断产生,芯片会从 STANDBY 状态切换到唤醒状态,唤醒条件满足,该位自动清0。

唤醒源:WAKEUP脚,TIMER0/TIMER1,RTC

  • WAKEUP脚,高有效; 要想芯片进入 STANDBY 状态 ,WAKEUP 脚必须处于低电平 。要

    唤醒时,拉高 WAKEUP 脚 ,产生唤醒中断,使芯片离开 STANDBY 状态。

  • TIMER0,定时器唤醒中断

    当 WAKEU P脚为低, TIMER0 设置定时时间并使能,定时时间到会产生唤醒中断,使芯

    片离开 STANDBY 状态。

  • RTC,定时时间到唤醒

    当 WAKEUP 脚为低, RTC 定时时间到,会产生唤醒中断,使芯片离开 STANDBY 状态

1’B0

PMU定时器0

表 173 PMU定时器0寄存器

访问

操作说明

复位值

[31:17]

RO

保留

15’b0

[16]

RW

Timer0使能位

1’b0:位使能;

1’b1:使能。

1’b0

[15: 0]

RW

Timer0的定时值,单位:秒

16’b0

PMU中断源寄存器

表 174 PMU中断源寄存器

访问

操作说明

复位值

[31: 9]

RW

保留

[8]

RW

显示当次上电状态

1’b0:上电或复位启动;

1’b1:从休眠状态唤醒,写1清除。

1’b0

[7]

RO

保留

1’b0

[6]

RO

保留

1’b0

[5]

RW

RTC定时中断标志位:

1’b0:有定时中断产生

1’b1:无定时中断产生,写1清除。

1’b0

[4]

RW

保留

1’b0

[3]

RW

保留

1’b0

[2]

RW

WAKEUP管脚唤醒中断标志位

1’b0:无WAKEUP唤醒中断产生;

1’b1:有WAEKUP唤醒中断产生,写1清除。

1’b0

[1]

RW

保留

1’b0

[0]

RW

Timer0定时中断标志位

1’b0:无Timer0中断产生;

1’b1:有Timer0中断产生,写1清除。

1’b0

实时时钟模块

功能概述

RTC是由PMU模块提供的BCD计数器/定时器,两个32位寄存器包含秒、分、时、日、月、年,以二进制编码的十进制格式表示(BCD),能自动对28、29(闰年)、30、31天的月份进行修正。

在相应软件配置下,RTC既可以提供时钟日历功能,又可以当作定时器使用,在定时器达到设置的时间后会产生一个RTC中断,可用来唤醒处于睡眠状态的系统。

RTC模块有两个时钟源可以配置:40M时钟分频和内部32K时钟。正常工作时可由软件配置具体使用哪个时钟源;睡眠状态时只能使用32K时钟。如果正常工作状态RTC时钟源由40M时钟分频所得,那么进入睡眠状态后会自动切换到32K时钟,系统被唤醒以后仍然保持使用32K时钟。所以只要电源电压保持在工作范围内,无论模块是正常工作状态还是睡眠状态,RTC模块都不会停止工作。

主要特性

  • 提供计时功能

  • 提供定时功能

  • 提供定时中断

  • 中断唤醒系统

功能描述

计时功能

在RTC配置寄存器1中可配置日、时、分、秒初始值,在RTC配置寄存器2中可配置年、月初始值,在RTC配置寄存器2可使能计时功能。

在RTC计时功能使能之后,读取RTC配置寄存器1可得到当前的日、时、分、秒数值,读取RTC配置寄存器2可得到当前的年、月数值。

定时功能

在RTC配置寄存器1中可配置日、时、分、秒定时值,在RTC配置寄存器2中可配置年、月定时值,在RTC配置寄存器1可使能定时功能。

当RTC定时器到达定时时间后会产生一个RTC中断,此时设置PMU中断源寄存器RTC中断位为1可清除中断状态。

当系统进入睡眠模式之后,RTC定时器产生的中断会唤醒系统。

寄存器描述

寄存器列表

RTC模块一共有2个32位专属寄存器,RTC中断状态需要查询PMU中断源寄存器。

表 175 RTC寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X000C

RTC配置寄存器 1

RTC_R1

RW

配置 RTC 日时分秒值,配置使能定时

0X0000_0000

0X0010

RTC配置寄存器 2

RTC_R2

RW

配置 RTC 年月值,配置使能计时

0X0000_0000

RTC配置寄存器1

表 176 RTC配置寄存器1

访问

操作说明

复位值

[31]

RW

RTC定时中断功能使能

1’b0:不使能

1’b1:使能

1’b0

[30:29]

保留

[28:24]

RW

日初值/日定时值

5’b0

[23:21]

保留

[20:16]

RW

小时初值/小时定时值

5’b0

[15:14]

保留

[13: 8]

保留

[7 : 6]

保留

[5 : 0]

RW

秒初值/秒定时值

6’b0

RTC配置寄存器2

表 177 RTC配置寄存器2

访问

操作说明

复位值

[31:17]

保留

[16]

RW

RTC计时功能使能位

1’b0:不使能

1’b1:使能

1’b0

[15]

保留

[14: 8]

RW

年初值/年定时值

7’b0

[7 : 4]

保留

[3 : 0]

RW

月初值/月定时值

4’b0

看门狗模块

功能概述

实现”看门狗”功能。设计用于系统崩溃时全局复位。

“看门狗”会产生一个周期性中断,系统软件在中断产生后要清除其中断标志,若超过其设定时间未清除,则会产生一个硬复位信号对系统进行复位。

主要特性

  • 提供定时功能

  • 提供复位功能

  • 提供定时中断

功能描述

定时功能

设置定时值到寄存器WD_LD后,设置WDG_CTRL的BIT0为1启动定时器,WDG模块定时时间到会产生定时中断,通知程序处理。如果寄存器WD_CLR的BIT0不清除,则会周期产生定时中断。

WD_LD的值以APB时钟单位为基准,APB的时钟从160M时钟分频出来。

复位功能

设置芯片定时值WD_LD后,启动定时和复位功能(设置WDG_CTRL的BIT1/BIT0),WDG模块启动倒计时,定时时间到,WDG会产生定时中断,同时如果WD_CLR的BIT0不清除,则芯片会在定时时间的下一个周期产生复位信号。

寄存器描述

寄存器列表

表 178 WDG寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

WDG 定时加载寄存器

WD_LD

RW

配置定时值,用于重复加载

0XFFFF_FFFF

0X0004

WDG 当前值寄存器

WD_VAL

RO

获取当前定时器的值

0XFFFF_FFFF

0X0008

WDG 控制寄存器

WD_CTRL

RW

控制寄存器

0X0000_0000

0X000C

WDG 中断清除寄存器

WD_CLR

RO

中断清除寄存器

0X0000_0000

0X0010

WDG 中断源寄存器

WD_SRC

RO

中断源寄存器

0X0000_0000

0X0014

WDG 中断输出寄存器

WD_STATE

RO

中断输出状态寄存器

0X0000_0000

WDG定时值加载寄存器

表 179 WDG定时值加载寄存器

访问

操作说明

复位值

[31: 0]

RW

配置定时值,用于重复加载

此寄存器的值以 APB 时钟为计数 单位。

例如:以 APB 时钟为 40MHZ ,则定时值最大时长约107s左 右,即

0FFFFFFFF/40000000

32’hffff_ffff

WDG当前值寄存器

表 180 WDG当前值寄存器

访问

操作说明

复位值

[31: 0]

RO

获取当前定时器的值

要计算剩余时间,只要读取当前值即可。

要计算已经过去的时间,只要把寄 存器 WD_LD 的值减去寄存器 WD_VAL 的值即可

32’hffff_fff

WDG控制寄存器

表 181 WDG控制寄存器

访问

操作说明

复位值

[31: 2]

保留

30’h0

[1]

RW

复位使能位

1’b0:WDG复位条件产生时,不产生复位信号

1’b1:WDG复位条件产生时,产生复位信号

1’b

[0]

RW

定时使能位

1’b0:定时器不工作

1’b1:定时器工作,产生周期性中断

1’b0

WDG中断清除寄存器

表 182 WDG中断清除寄存器

访问

操作说明

复位值

[31: 1]

保留

31’h0

[0]

WO

中断状态清除位,写任意值清除当前中断状态

1’b0

WDG中断源寄存器

表 183 WDG中断源寄存器

访问

操作说明

复位值

[31: 1]

保留

31’h0

[0]

RO

中断源寄存器,定时器功能打开,会同时产生该中断

1’b0

WDG中断状态寄存器

表 184 WDG中断状态寄存器

访问

操作说明

复位值

[31: 1]

保留

31’h0

[0]

RO

中断输出状态寄存器。该中断在定 时器关闭后不产生,WD_SRC 可能为1

1’b0

PWM控制器

功能概述

PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

主要特性

  • 支持2通道输入信号捕获功能(PWM0 和PWM4 两个通道)

  • 输入信号捕获功能支持中断交互模式和DMA传输模式;DMA模式支持按字操作

  • 支持5通道PWM信号生成功能

  • 5通道PWM信号生成支持单次生成模式和自动装载模式

  • 支持5通道制动功能

  • PWM输出频率范围:3Hz~160kHz

  • 占空比最大精度:1/256,插入死区的计数器宽度:8bit

  • 支持通道0 通道1同步功能,支持通道2 通道3同步功能

  • 支持通道0 通道1的互补与非互补模式,支持通道2 通道3的互补与非互补模式

  • 支持5通道同步功能

功能描述

输入信号捕获

PWM控制器支持两个通道的信号捕获功能,通过设置PWM_CTL寄存器的Bit24可以激活通道0的捕获功能,通过设置PWM_CAP2CTL寄存器的Bit1可以激活通道4的捕获功能。对捕获的信号的电平还可以设置是否翻转功能。通道捕获到相应的信号后,捕获数在更新到相应的捕获寄存器PWM_CAPDAT(通道0捕获数)和PWM_CAP2DAT(通道4捕获数)。

DMA传输捕获数

通道0或者通道4开启捕获功能后,捕获寄存器的计数可以通过DMA通道快速传输至内存,加速用户处理进程。

支持单次和自动装载模式

PWM控制器的五路输出通道均支持单次输出模式和自动装载模式。单次装载模式下,通道输出指定周期个波形后,就不再输出PWM波了;自动装载模式下,通道输出指定周期个波形后,会自动重新装载周期数,从而继续产生PWM波。

多种输出模式

PWM控制器支持独立输出模式,即每个通道独立输出,互不干预;支持双通道同步模式,即一个通道的输出完全与另一个通道输出一致;支持五通道同步模式,通道1至通道4的输出完全与通道0的输出一致;支持双通道互补输出,即一个通道输出的波形与另一个通道输出的波形完全相反;支持互补模式下常会用到的死区设置,死区长度最多可设置256个时钟周期;支持制动模式,当制动端口检测到指定电平后,输出通道会输出已经设置好的制动电平。

多种输出模式灵活可配,满足了使用者对PWM相关的各种应用场景。

寄存器描述

PWM寄存器列表

表 185 PWM寄存器列表

偏移地址

名称

缩写

访问

描述

复位值

0X0000

时钟分频寄存器_01

PWM_CLKD IV01

RW

对通道0 和通道1 的时钟进行分频

0X0000_0000

0X0004

时钟分频寄存器_23

PWM_CLKD IV23

RW

对通道 2 和通道 3 的时钟进行分频

0X0000_0000

0X0008

控制寄存器

PWM_CTL

RW

用以配置或者控制一些可配置项

0X0000_0000

0X000C

周期寄存器

PWM_PERIOD

RW

用以设置通道 0 至通道 4 的周期

0X0000_0000

0X0010

周期数寄存器

PWM_PNUM

RW

用以设置通道 0 至通道 4 的信号生 成周期数

0X0000_0000

0X0014

比较寄存器

PWM_CMPDAT

RW

用以存放通道 0 至通道 4 的比较值 以产生不同的占空比

0X0000_0000

0X0018

死区控制寄存器

PWM_DTCTL

RW

用以配置或者控制死区相关的可配 置项

0X0000_0000

0X001C

中断控制寄存器

PWM_INTEN

RW

用以对相关中断进行使能控制

0X0000_0000

0X0020

中断状态寄存器

PWM_INTSTS

RW

用以查询相关中断的状态

0X0000_0000

0X0024

通道0捕获寄存器

PWM_CAPDAT

RO

用以捕获并计数来到通道 0 的上升 沿和下降沿

0X0000_0000

0X0028

制动控制寄存器

PWM_BRKCTL

RW

用以对制动模式进行控制

0X0000_0000

0X002C

时钟分频寄存器_4

PWM_CH4_reg1

RW

对通道 4 的时钟进行分频

0X0000_0000

0X0030

通道4控制寄存器_1

PWM_CH4_reg2

RW

对通道 4 的相关配置项进行设置

00X0000_0000

0X0034

通道4捕获寄存器

PWM_CAP2DAT

RO

用以捕获并计数来到通道 4 的上升 沿和下降沿

0X0000_0000

0X0038

通道4控制寄存器_2

PWM_CAP2CTL

RW

通道 4 的相关配置项进行设置

0X0000_0000

时钟分频寄存器_01

表 186 PWM时钟分频寄存器_01

访问

操作说明

复位值

[31:16]

RW

CLKDIV1

CH1分频计数器

由计数器值决定分频数

注意:分频范围为(0~6553 5),如不需要分频,输入0或1 。

16’h0

[15:0]

RW

CLKDIV0

CH0分频计数器

同CH1

16’h0

时钟分频寄存器_23

表 187 PWM时钟分频寄存器_23

访问

操作说明

复位值

[31:16]

RW

CLKDIV3

CH3分频计数器

同CH1

16’h0

[15:0]

RW

CLKDIV2

CH2分频计数器

同CH1

16’h0

控制寄存器

表 188 PWM控制寄存器

访问

操作说明

复位值

[31:27]

RW

CNTEN

计数器计数使能

1’b0:停止计数

1’b1:开始计数

注意:每位分别控制每个通道,从 高到低依次控制 CH4、CH3、 CH2、CH1 和 CH0

5’b0

[26]

保留

1’b0

[25]

RW

CAPINV

捕获反向使能标识位

1’b0:捕获模式输入信号反向 无效

1’b1:捕获模式输入信号反向 有效,对输入信号取反

1’b0

[24]

RW

CPEN

捕获功能使能标识位

1’b0:CH0捕获功能无效, RCAPDAT 和 FCAPDAT 值不会被更新;

1’b1:CH0捕获功能有效, 捕获并锁存PWM计数器,分别存 储在 RCAPDAT(上升沿锁存 )和 FCAPDAT(下降沿锁存 )

1’b0

[23:22]

RW

CNTTYPE3

CH3计数器计数方式

2’b00:边缘对齐模式(计数 器计数方式为递增,仅针对捕获模 式)

2’b01:边缘对齐模式(计数 器计数方式为递减,仅针对 PWM 模式)

2’b10:中央对齐模式(仅针 对 PWM 模式)

注意:在 PWM 模式下,当计数器 被设置为沿对齐模式时,需要设置 计数方式为递减方式。

2’b0

[21:20]

RW

CNTTYPE2

CH2计数器计数方式

同CH3

2’b0

[19:18]

RW

CNTTYPE1

CH1计数器计数方式

同CH3

2’b0

[17:16]

RW

CNTTYPE0

CH0计数器计数方式

同CH3

2’b0

[15:14]

RW

TWOSYNCEN

2通道同步模式使能信号

1’b0:不允许2通道同步

1’b1:允许2通道同步,

PWM_CH0 和 PWM_CH1 具有相同的相位,且相位由PWM _CH0决定;PWM_CH2 和 PWM_CH3 具有相同的相位, 且相位由 PWM_CH2 决定

15bit控制CH3和CH2

14bit控制CH1和CH0

2’b0

[13]

保留

1’b0

[12]

RW

POEN

PWM管脚输出使能位

1’b0:PWM管脚置为输出状态

1’b1:PWM管脚置为三态状态

注意:只是针对 CH0

1’b0

[11:8]

RW

CNTMODE

PWM生成循环方式

1’b0:单次模式

1’b1:自动装载模式

注意:CNTMODE 变化过程中 ,PWM_CMPDAT 归零;每 位分别控制每个通道,从高到低依 次控制 PW3、PW2、PW1 和 PW0

4’h0

[7]

保留

1’b0

[6]

RW

ALLSYNCEN

全通道同步模式使能信号

1’b0:不允许全部通道同步

1’b1:允许全部通道同步,PWM_CH0、PWM_CH1、 PWM_CH2 和 PWM_CH3 具有相同的相位,且相位由 PWM _CH0 决定

1’b0

[5:2]

RW

PINV

PWM输出信号极性使能

1’b0:PWM输出极性翻转不使能

1’b1:PWM输出极性翻转使能

注意:每位分别控制每个通道,从高到低依次控制PW3、PW2、 PW1 和 PW0

4’h0

[1:0]

RW

OUTMODE

输出模式

1’b0:每两个通道非互补模式

1’b1:每两个通道组成互补模 式

BIT1 控制 CH2 和 CH3

BIT0 控制 CH0 和 CH1

2’b0

周期寄存器

周期寄存器

表 189 PWM周期寄存器

访问

操作说明

复位值

[31:24]

RW

PERIOD3

CH3周期寄存器值(注意:period 不可以大于255)

“沿对齐模式(计数器计数方式为 递减)”:

  • PERIOD 寄存器值,周 期值为(PERIOD + 1)

  • 占空比=(CMP+1)/ (PERIOD + 1)

  • CMP >= PERIOD: PWM输出固定为高

  • CMP < PERIOD:PWM 低电平宽度为(PERIOD-CMP),高电平宽度为(CMP+1)

  • CMP=0:PWM 低电平 宽度为 PERIOD,高电平宽度 为1;

“中间对齐模式”:

  • PERIOD 寄存器值:周 期为2*(PERIOD+1)

  • 占空比=(2*CMP+1 )/(2*(PERIOD+1) )

  • CMP>PERIOD:PWM 持续为高

  • CMP<=PERIOD: PWM 低电平=2*(PERIOD-CMP)+1,

    高电平=(2*CMP) +1

  • CMP=0:PWM低电平 宽度为2*PERIOD+1,高 电平宽度为1。

    注意:“中间对齐模式” 中,周期数不应为255。

无论选择哪种对齐模式,通道周期 均由分频数(N)和周期数(P) 共同决定,即:输入时钟为40M Hz,经分频后时钟频率f_div为:f_div = 40MHz/N,N为分频数(1 6bit)。输出频率f_output为:f_output = f_div / P,P为周期数。

注意:在PWM模式下,当计数器 被设置为沿对齐模式时,需要设置 计数方式为递减方式。

8’h0

[23:16]

RW

PERIOD2

CH2周期寄存器值(注意:period 不可以大于255)

同PERIOD3

8’h0

[15:8]

RW

PERIOD1

CH1周期寄存器值(注意:period 不可以大于255)

同PERIOD3

8’h0

[7:0]

RW

PERIOD0

CH0周期寄存器值(注意:period 不可以大于255)

同PERIOD3

8’h0

周期数寄存器

表 190 PWM周期数寄存器

访问

操作说明

复位值

[31:24]

RW

PNUM3

PWM3生成周期数

设置 PWM3 周期数 PNUM3, 当 PWM 产生 PNUM 3个 PWM 信号后,停止生成信号,同时触发 中断和置位中断状态字

8’h0

[23:16]

RW

PNUM2

PWM2 生成周期数

同PNUM3

8’h0

[15:8]

RW

PNUM1

PWM1 生成周期数

同PNUM3

8’h0

[7:0]

RW

PNUM0

PWM0 生成周期数

同PNUM3

8’h0

比较寄存器

表 191 PWM比较寄存器

访问

操作说明

复位值

[31:24]

RW

CMP3

PWM3比较寄存器值

“沿对齐模式(计数器计数方式为 递减)”:

  • PERIOD 寄存器值,周 期值为(PERIOD + 1)

  • 占空比=(CMP+1)/ (PERIOD + 1)

  • CMP >= PERIOD: PWM 输出固定位高

  • CMP < PERIOD:PWM 低电平宽度为(PERIOD-CMP),高电平宽度为(CMP+1)

  • CMP = 0:PWM 低电平 宽度为 PERIOD,高电平宽度 为1;

“中间对齐模式”:

  • PERIOD 寄存器值:周 期为2*(PERIOD+1)

  • 占空比=(2*CMP+1 )/2*(PERIOD+1)

  • CMP > PERIOD:PWM 持续为高

  • CMP <= PERIOD: PWM 低电平=2 *(PERIOD-CMP)+1,高电平=(2 * CMP)+1

  • CMP = 0:PWM 低电平 宽度为2*PERIOD+1,高电平宽度为1。

无论选择哪种对齐模式,通道周期 均由分频数(N)和周期数(P) 共同决定,即:输入时钟为40M Hz,经分频后时钟频率f_div为:f_div = 40MHz/N,N为分频数(1 6bit)。输出频率f_output为:f_output = f_div / P,P为周期数。

注意:在PWM模式下,当计数器 被设置为沿对齐模式时,需要设置 计数方式为递减方式。

8’h0

[23:16]

RW

CMP2

PWM2 比较寄存器值

同 CMP3

8’h0

[15:8]

RW

CMP1

PWM1 比较寄存器值

同 CMP3

8’h0

[7:0]

RW

CMP0

PWM0 比较寄存器值

同 CMP3

8’h0

死区控制寄存器

表 192 PWM死区控制寄存器

访问

操作说明

复位值

[31:22]

保留

0’h0

[21]

RW

DTEN23

通道2和通道3是否可以插入死区 有效标识

插入死区有效信号只有在通道的互 补模式打开后,才有效。并且,如 果插入有效信号为0,则两个通道 输出的互补信号没有死区的插入

1’b0:插入死区无效

1’b1:插入死区有效

1’b0

[20]

RW

DTEN01

通道0和通道1是否可以插入死区 有效标识

同DTEN23

1’b0

[19:18]

保留

2’b0

[17:16]

RW

DTDIV

死区时钟分频控制

2’b00:死区时钟等于基准时 钟(40MHz)

2’b01:死区时钟等于基准时 钟(40MHz)二分频

2’b10:死区时钟等于基准时 钟(40MHz)四分频

2’b11:死区时钟等于基准时 钟(40MHz)八分频

2’b0

[15:8]

RW

DTCNT23

通道3和通道2的死区间隔

8bit决定死区间隔值,死区时 钟由 DTDIV 决定

8’h0

[7:0]

RW

DTCNT01

通道1和通道0的死区间隔

8bit决定死区间隔值,死区时 钟由 DTDIV 决定

8’h0

中断控制寄存器

表 193 PWM中断控制寄存器

访问

操作说明

复位值

[31:8]

保留

4’h0

[7]

RW

DMA_request_EN

DMA_request 使能

1’b0:DMA_request 无效

1’b1:DMA_request 有效

1’b0

[6]

RW

FLIEN

下降沿缓存中断使能位

1’b0:下降沿缓存中断无效

1’b1:下降沿缓存中断有效

注意:针对 CH0 而言

1’b0

[5]

RW

RLIEN

上升沿缓存中断使能位

1’b0:上升缓存中断无效

1’b1:上升沿缓存中断有效

注意:针对 CH0 而言

1’b0

[4:0]

RW

PIEN

PWM 周期中断使能位

1’b0:周期中断无效

1’b1:周期中断有效

注意:当计数器计数到0,且PW M周期个数满足PWM_PNUM 后,触发中断。

5’b0

中断状态寄存器

表 194 PWM中断状态寄存器

访问

操作说明

复位值

[31:10]

保留

24’h0

[9]

RW

OVERFL

计数器溢出标志

1’b0:捕获模式,计数器计数 过程中,计数器未溢出

1’b1:捕获模式,计数器计数 过程中,计数器溢出

注意:当用户清除 CFLIF 或 CRLIF 时,本 bit 也同时被清除

1’b0

[8]

RW

FLIFOV

下降沿延迟中断标识过跑状态

1’b0:当 CFILF 为1时, 无下降沿延迟中断产生

1’b1:当 CFILF 为1时, 又一次发生下降沿延迟中断

注意:当用户清除 CFILF 时, 本 bit 也同时被清除

1’b0

[7]

RW

RLIFOV

上升沿延迟中断标识过跑状态

1’b0:当 CRILF 为1时, 无上升沿延迟中断产生

1’b1:当 RILF 为1时, 又一次发生上升沿延迟中断

注意:当用户清除 CRILF 时, 本 bit 也同时被清除

1’b0

[6]

RW

CFLIF

捕获下降沿中断标识

1’b0:没有捕获到下降沿

1’b1:当捕获到下降沿,本位 被设置为1

注意:通过写入1,清除该标识位

注意:针对 CH0 而言

1’b0

[5]

RW

CRLIF

捕获上升沿中断标识

1’b0:没有捕获到上升沿

1’b1:当捕获到上升沿,本位 被设置为1

注意:通过写入1,清除该标识位

注意:针对 CH0 而言

1’b0

[4:0]

RW

PIF

PWM 周期中断标识

当 PWM 产生指定周期 PWM 信号 后,该标识位置1;通过软件写入 1,清除该标识

注意:每位分别标识每个通道,从 高到低依次控制 PW4、PW3、 PW2、PW1 和 PW0

5’b0

通道0捕获寄存器

表 195 PWM通道0捕获寄存器

访问

操作说明

复位值

[31:16]

RO

PWM_FCAPDAT

捕获下降沿寄存器

当输入信号存在下降沿时,存储当前计数器值

16’h0

[15:0]

RO

PWM_RCAPDAT

捕获上升沿寄存器

当输入信号存在上升沿时,存储当前计数器值

16’h0

制动控制寄存器

表 196 PWM制动控制寄存器

访问

操作说明

复位值

[31:16]

保留

16’h0

[15:11]

RW

BRKCTL

制动模式使能

1’b0:制动模式禁止

1’b1:制动模式启动

[7:3]分别对应 CH4、CH3、CH2、CH1 和 CH0

5’b0

[10:8]

保留

3’b0

[7:3]

RW

BKOD

制动输出控制寄存器

1’b0:当制动模式有效时,PWM输出低电平

1’b1:当制动模式有效时,PWM输出高电平

[7:3]分别对应CH4、CH3、CH2、CH1 和 CH0

5’b0

[2:0]

保留

3’b0

时钟分频寄存器_4

表 197 PWM时钟分频寄存器_4

访问

操作说明

复位值

[31:16]

RW

CLKDIV4

CH4分频计数器

由计数器值决定分频数

注意:分频范围为(0~65535),如不需要分频,输入0或1 。

16’h0

[15:8]

RW

PERIOD4

CH4 周期寄存器值(注意:period不可以大于255)

“沿对齐模式(计数器计数方式为 递减)”

  • PERIOD寄存器值,周 期值为(PERIOD + 1)

  • 占空比=(CMP+1)/ (PERIOD + 1)

  • CMP >= PERIOD: PWM 输出固定位高

  • CMP < PERIOD:PWM 低电平宽度为(PERIOD-CMP),高电平宽度为(CMP+1)

  • CMP = 0:PWM 低电平宽度为 PERIOD ,高电平宽度 为1;

“中间对齐模式”:

  • PERIOD寄存器值:周 期为2*(PERIOD + 1)

  • 占空比=( 2*CMP+1 )/(2*(PERIOD + 1) )

  • CMP > PERIOD:PWM 持续为高

  • CMP <= PERIOD: PWM 低电平=2 *(PERIOD-CMP)+1,高电平=(2 *CMP)+1

  • CMP = 0:PWM 低电平 宽度为2*PERIOD+1,高 电平宽度为1。

    注意:“中间对齐模式” 中,周期数不应为255。

无论选择哪种对齐模式,通道周期 均由分频数(N)和周期数(P) 共同决定,即:输入时钟为 40MHz,经分频后时钟频率 f_div 为:f_div = 40MHz/N,N为分频数(1 6bit)。输出频率f_output为:f_output = f_div / P,P为周期数。

注意: 在 PWM 模式 下,当计数器被设置为沿对齐模式 时,需要设置计数方式为递减方式 。

8’h0

[7:0]

RW

CH4生成周期数

设置PWM4周期数为PNUM4 ,当PWM产生PNUM4个PW M信号后

停止生成信号,同时触发中断和置 位中断状态字

8’h0

通道4控制寄存器_1

表 198 PWM通道4控制寄存器_1

访问

操作说明

复位值

[31:16]

保留

16’h0

[15:8]

RW

CMP4

CH4周期寄存器值

“沿对齐模式(计数器计数方式为 递减)”:

  • PERIOD 寄存器值,周期值为(PERIOD + 1)

  • 占空比=(CMP+1)/ (PERIOD + 1)

  • CMP >= PERIOD: PWM 输出固定位高

  • CMP < PERIOD:PWM 低电平宽度为(PERIOD-CMP),高电平宽度为(CMP+1)

  • CMP = 0:PWM低电平 宽度为PERIOD,高电平宽度 为1;

“中间对齐模式”:

  • PERIOD寄存器值:周 期为2*(PERIOD+1)

  • 占空比=(2*CMP+1 )/2*(PERIOD+1)

  • CMP > PERIOD:PWM持续为高

  • CMP <= PERIOD: PWM 低电平=2 *(PERIO D-CMP)+1,高电平=(2 *CMP)+1

  • CMP = 0:PWM 低电平 宽度为2 * PERIOD+1,高电平宽度为1。

无论选择哪种对齐模式,通道周期 均由分频数(N)和周期数(P) 共同决定,即:输入时钟为40M Hz,经分频后时钟频率f_div为:f_div = 40MHz/N,N为分频数(1 6bit)。输出频率f_output为:f_output = f_div / P,P为周期数。

注意: 在 PWM 模式 下,当计数器被设置为沿对齐模式 时,需要设置计数方式为递减方式 。

8’h0

[7:5]

保留

3’b0

[4:3]

RW

CNTTYPE4

CH4计数器计数方式

2’b00:边缘对齐模式(计数 器计数方式为递增,仅针对捕获模 式)

2’b01:边缘对齐模式(计数 器计数方式为递减,仅针对PWM 模式)

2’b10:中央对齐模式(仅针 对PWM模式)

注意: 在 PWM 模式 下,当计数器被设置为沿对齐模式 时,需要设置计数方式为递减方式 。

2’b0

[2]

保留

1’b0

[1]

RW

CNTMODE4

CH4生成循环方式

1’b0:单次模式

1’b1:自动装载模式

注意:CNTMODE 变化过程中 ,PWM_CMPDAT 归零

1’b0

[0]

RW

PINV4

CH4输出信号极性使能

1’b0:PWM 输出极性翻转不使能

1’b1:PWM 输出极性翻转使能

1’b0

通道4捕获寄存器

表 199 PWM道4捕获寄存器

访问

操作说明

复位值

[31:16]

RO

PWM_FCAP2DAT

捕获下降沿寄存器

当输入信号存在下降沿时,存储当前计数器值

16’h0

[15:0]

RO

PWM_RCAP2DAT

捕获上升沿寄存器

当输入信号存在上升沿时,存储当前计数器值

16’h0

通道4控制寄存器_2

表 200 PWM通道4控制寄存器_2

访问

操作说明

复位值

[31:11]

保留

21’h0

[10]

RW

DMA_request2_ma sk

DMA_request2使能

1’b0:DMA_request2无效

1’b1:DMA_request2有效

注意:只是针对 CH4

1’b0

[9]

RW

FLIEN2

下降沿缓存中断使能位

1’b0:下降沿缓存中断无效

1’b1:下降沿缓存中断有效

注意:只是针对 CH4

1’b0

[8]

RW

RLIEN2

上升沿缓存中断使能位

1’b0:上升缓存中断无效

1’b1:上升沿缓存中断有效

注意:只是针对 CH4

1’b0

[7]

RW

OVERFL2

计数器溢出标志

1’b0:捕获模式,计数器计数 过程中,计数器未溢出

1’b1:捕获模式,计数器计数 过程中,计数器溢出

注意:当用户清除 CFLIF 或 CRLIF 时,本 bit 也同时被清 除

注意:只是针对 CH4

1’b0

[6]

RW

FLIFOV2

下降沿延迟中断标识过跑状态

1’b0:当 CFILF 为1时, 无下降沿延迟中断产生

1’b1:当 CFILF 为1时, 又一次发生下降沿延迟中断

注意:当用户清除 CFILF 时, 本 bit 也同时被清除

注意:只是针对 CH4

1’b0

[5]

RW

RLIFOV2

上升沿延迟中断标识过跑状态

1’b0:当 CRILF 为1时, 无上升沿延迟中断产生

1’b1:当 CRILF 为1时, 又一次发生上升沿延迟中断

注意:当用户清除 CRILF 时, 本 bit 也同时被清除

注意:只是针对 CH4

1’b0

[4]

RW

CFLIF2

捕获下降沿中断标识

1’b0:没有捕获到下降沿

1’b1:当捕获到下降沿,本位被设置为1

注意:通过写入1,清除该标识位

注意:只是针对 CH4

1’b0

[3]

RW

CRLIF2

捕获上升沿中断标识

1’b0:没有捕获到上升沿

1’b1:当捕获到上升沿,本位被设置为1

注意:通过写入1,清除该标识位

注意:只是针对 CH4

1’b0

[2]

RW

POEN2

PWM 管脚输出使能位

1’b0:PWM 管脚置为输出状态

1’b1:PWM 管脚置为三态状态

注意:只是针对CH4

1’b0

[1]

RW

CPEN2

捕获功能使能标识位

1’b0:CH4 捕获功能无效, RCAPDAT 和 FCAPDAT 值不会被更新;

1’b1:CH4 捕获功能有效, 捕获并锁存 PWM 计数器,分别存储在 RCAPDAT(上升沿锁存 )和 FCAPDAT(下降沿锁存 )

注意:只是针对CH4

1’b0

[0]

RW

CAPINV2

捕获反向使能标识位

1’b0:捕获模式输入信号反向无效

1’b1:捕获模式输入信号反向有效,对输入信号取反

注意:只是针对 CH4

1’b0

QFLASH控制器

功能概述

W800内置QFLASH的控制器,提供总线方式的QFLASH读写擦操作,提供系统总线和数据总线的访问仲裁,实现CACHE方式的QFLASH读操作。

主要特性

  • 提供总线访问FLASH接口

  • 支持通过寄存器配置的方式对FLASH直接发送SPI命令进行访问

  • 支持对FLASH进行24位或32位地址访问

  • 支持对存储在FLASH中的代码和数据自动解密后读取

功能描述

总线访问

FLASH在系统中地址从0x08000000开始,可以直接对该地址空间进行读操作。

寄存器访问

通过对寄存器的配置可以直接向FLASH发送SPI命令,以实现对FLASH更灵活的访问,支持大部分FLASH的控制命令。

命令的配置和启动

Flash的控制命令码写入寄存器FLASH_CMD的command位,同时根据命令格式配置该寄存器的其它位,例如,如果命令中有地址位,要将address位置1。如果命令中有数据,要将DAT位置1,具体参考寄存器说明。

命令配置完成后,将CMD_START寄存器的command_b位置1,则控制器开始向FLASH发送该命令。

通信模式的及配置

首先向FLASH发送命令将FLASH配置为QIO或QPI模式,然后将FLASH控制器的QIOM或QPIM位置为1,即可使用QIO模式或QPI模式与FLASH进行通信。

数据缓存

通过寄存器对FLASH进行数据读写时,使用0x4000 0000 ~ 0x4000 03ff地址的存储空间作为数据缓存,该段地址空间同时也作为RSA加解密模块使用的数据缓存。即读数据时,控制器将从FLASH读出的数据顺序存储在从0x4000 0000开始的地址空间进行缓存。向FLASH写数据时也是从0x4000 0000开始读取数据后发送给flash。

读操作

每次读操作最多可读取256字节数据,可读取QFlash任意位置的数据。

读操作命令启动后,数据就存放在缓存中了,无需等待或查询。

操作流程如图所示。

写操作

以下命令均为写操作:

WRSR:写状态寄存器

PP:页编程

SE:sector擦除

BE:32K block擦除

HBE:64K block 擦除

CE:全芯片擦除

擦除命令不需要数据,直接将命令寄存器配置为相应命令,然后启动就可以了。

编程命令过程如下

寄存器描述

寄存器列表

表 201 QFLASH控制器寄存器列表

偏移地址

名称

缩写

描述

默认值

0X0000_0000

命令信息寄存器

CMD_INFO

QFLASH 操作所需命令及数据字节

0X0000_0000

0X0000_0004

命令启动寄存器

CMD_START

命令启动

0X0000_0000

0X0000_0008

Flash控制寄存器

Flash_CR

QFLASH 操作模式控制

0X0000_0000

0X0000_000C

Remap寄存器

Remap

Remap 选项控制

0X0000_0000

0X0000_0010

ADDR寄存器

Flash_ADDR

操作地址

0X0000_0000

0X0000_0014

解密控制寄存器

DECRYPT_CR

固件机密模式控制

0X0000_0000

0X0000_0018

解密状态寄存器

DECRYPT_STA

固件解密状态

0X0000_0000

0X0000_0200 … 0X0000_0600

读写数据缓存区

RSA_BUF

用于缓存 QFLASH 读写的数据或者 RSA 的加解密数据。 此内存为 QFLASH 控制器和 RSA模块共用,因此 ,QFLASH 读写与 RSA操作不能同时使用, 需要在驱动实现时增加互斥操作保护

0X0000_0000

命令信息寄存器

表 202 QFLASH命令信息存器

访问

操作说明

复位值

[31]

RW

1:指示 CMD_START 携带 Address,CMD_START 寄存器中存有该Address的低20位,该 Address 的高4为固定为0,共计24位

1’b0

[30]

RW

1:指示 CMD_START 寄存 器中 CRM 携带有内容

1’b0

[29]

RW

1:指示 CMD_INFO 携带 Dummy 周期

1’b0

[28:26]

RW

其内容+1后指示 CMD_INFO 携带多少 Dummy 周期

3’b0

[25:16]

RW

其内容+1后指示 CMD_INFO 携带多少字节的数据

10’b0

[15]

RW

1:表示 CMD_INFO 携带数据

1’b0

[14]

RW

1:表示当前 CMD_INFO 命令域填写的命令为读命令,命令包含 RDSR、FR、QIOFR、 RDPDRID、RSR 等

1’b0

[13]

RW

1:表示当前 CMD_INFO 命令域填写的命令为 WRSR 命令

1’b0

[12]

RW

1:表示当前 CMD_INFO 命令域填写的命令为 PP 命令

1’b0

[11]

RW

1:表示当前 CMD_INFO命令域填写的命令为 SE 命令

1’b0

[10]

RW

1:表示当前 CMD_INFO 命令域填写的命令为 BE 命令

1’b0

[9]

RW

1:表示当前 CMD_INFO 命令域填写的命令为 HBE 命令

1’b0

[8]

RW

1:表示当前 CMD_INFO 命令域填写的命令为 CE 命令

1’b0

[7 : 0]

RW

CMD_INFO 命令域,填写 QFlash 的命令,可参考 QFlash 芯片手册。

8’b0

命令启动寄存器

表 203 QFLASH命令启动寄存器

访问

操作说明

复位值

[31:29]

RO

Reserved

3’b0

[28]

RW

置1表示启动命令,命令操作完成后,由硬件清零。

1’b0

[27: 8]

RW

Address[19:0]:若命令寄存器中的 A 标记为为1,则此处存储 Address 低20位内容。

20’b0

[7 : 0]

RW

CRM[7:0]:若命令寄存器中的 CRM 标记为为1,则此处存储 CRM 内容。

8’b0

QFLASH的常用指令

表 204 QFALSH常用命令

命令名称

令字

命令缩

Write Enable

06H

WREN

Write Disable

04H

WRDI

Read Status

05H

RDSR

Write Status

01H

WRSR

Fast Read

0BH

FR

Quad IO Fast Read

EBH

QIOFR

Page Program

02H

PP

Sector Erase

20H

SE

其它命令参见QFLASH的相关手册。

PSRAM接口控制器

功能概述

W800内置SPI/QSPI接口的PSRAM控制器,支持外置PSRAM设备访问,提供总线方式的PSRAM读写擦操作。最高读写速度80MHz。

主要特性

  • 支持对外置PSRAM的读写访问

  • 可配置为SPI和QSPI

  • SPI/QSPI时钟频率可配置

  • 支持BURST INC模式访问

  • 支持PSRAM的半休眠模式

功能描述

PSRAM 全称为Pseudo static random access memory,指的是伪静态随机存储器。与传统SRAM相比,具备封装小,容量大,成本低等优势,在物联网应用中主要用于数据缓存方向。接口多为SPI,QSPI等。接口引脚主要有时钟信号SCK,片选信号CS及4根双向数据IO。W800提供的PSRAM控制器可以支持SPI/QSPI接口的PSRAM的总线方式访问,工作时钟最高速率80MHz,最大容量支持64Mb。

引脚说明

SCLK:SPI接口时钟,SCLK周期由PSRAM_CTRL[7:4]设置,可设置的分频值最小为3,默认为AHB时钟的4分频。

CS:SPI接口片选信号

SIO0:SPI模式数据输入,QSPI模式SD[0]

SIO1:SPI模式数据输出,QSPI模式SD[1]

SIO2:QSPI模式SD[2]

SIO3:QSPI模式SD[3]

访问模式设置

PSRAM控制器支持对外置PSRAM的SPI和四线的QSPI两种访问模式,默认为SPI。通过设置PSRAM_CTRL[1]配置SPI的模式。

PSRAM_CTRL[1]默认为0,即SPI模式,此时完成一次写操作需要64个SCLK周期,完成一次读操作需要72个SCLK周期。

如果PSRAM工作在SPI模式下,此时向PSRAM_CTRL[1]写入1时,控制器会向PSRAM发送命令35H,当读取PSRAM_CTRL[1]为1时,表示命令发送完成,PSRAM进入QPI模式,此时完成一次写操作需要16个SCLK周期,完成一次读操作需要22个SCLK周期。

如果PSRAM工作在QPI模式下,此时向PSRAM_CTRL[1]写入0时,控制器会向PSRAM发送命令F5H,当读取PSRAM_CTRL[1]为0时,表示命令发送完成,PSRAM进入SPI模式。

设置PSRAM工作模式必须在初始化操作完成后,不能同时设置。

PSRAM初始化

第一次使用前需要在PSRAM上电稳定后,向寄存器PSRAM_CTRL[0]写入1,启动PSRAM复位初始化操作,即向PSRAM发送66H和99H命令。默认使用 SPI模式发送,即需要8个SCLK + tCPH + 8个SCLK的时间。初始化完成后,硬件自动将PSRAM_CTRL[0]清零。

初始化操作会将PSRAM恢复成SPI模式。

推荐的初始化流程为:

⑴ 将PSRAM_CTRL[0]写入1

⑵ 等待,直到PSRAM_CTRL[0]自动清零

⑶ 通过软复位使PSRAM控制器复位

⑷ 重新设置PSRAM_CTRL的其它需要参数

PSRAM的访问方法

对PSRAM进行读写的方式与普通SRAM相同,即向相应的总线地址写入/读出数据。

BURST功能

通过设置PSRAM_CTRL[2]可以使控制器支持AHB总线发起的BURST,即当AHB总线上HBURST为1/3/5/7时,表示AHB总线启动一次地址递增的连续读/写,此时为了提高PSRAM的访问速度,控制器在完成一个word的读/写后并不会将CS拉高,而是直接读/写下一个word的数据。

OVERTIMER寄存器用于设置CS为低的最大时间,单位为HCLK的周期数,每开始一次BURST操作,内部计数器从0开始计数,当计数器值大于设定数值时,完成当前word的读/写后,控制器就自动停止BURST操作,直接将CS变为高电平,如果此时AHB总线上还有数据需要读/写则会当成单独的WORD进行。

PSRAM控制器不支持WRAP形式的BURST,如果访问PSRAM会用到WRAP BURST,请将PSRAM_CTRL[2]设为0。

寄存器描述

寄存器列表

表 205 PSRAM控制器寄存器列表

偏移地址

名称

缩写

描述

默认值

0X0000_0000

控制寄存器

PSRAM_CTRL

PSRAM 控制器设置

0X0000_0000

0X0000_0004

超时控制寄存器

OVERTIMER

CS 超时控制

0X0000_0000

命令信息寄存器

表 206 PSRAM 控制设置寄存器

访问

操作说明

复位值

[31:12]

RO

RSV

1’b0

[11]

RW

HSM,Halfsleep mode 使能

1:使能 PSRAM 半休眠模式

0:清除半休眠模式

1’b0

[10:8]

RW

tCPH,CS 高电平最短时间设置,单位为 AHB 时钟周期数,必须大于1,具体时间根据不同的 psram 手册中说明进行设置,不清楚可以不修改默认值

3’d6

[7:4]

RW

SPI分频设置

只能配置为2以上数值,写入的数 值就是分频的倍数

4’d4

[3]

RO

RSV

[2]

RW

INC_EN BURST功能使能

1:支持 AHB 总线上的 BURST 功能

0:不支持 BURST 功能

1’b0

[1]

RW

QUAD

写1使能 PSRAM 的 QPI 模式 ,写0使能 SPI 模式

读该标志位可知道当前 PSRAM 为哪种模式。

1’b0

[0]

RW

PSRAM复位

写1启动对 PSRAM 的复位操作,复位完成自动清零。

’b0

超时控制寄存器

表 207 CS超时控制寄存器

访问

操作说明

复位值

[11:0]

RW

超时寄存器设置,设置 CS 为低的最大时间,用于 BURST 模式

12’d0

ADC

ADC功能概述

基于 Sigma-Delta ADC的采集模块,完成最多4路模拟信号的采集,采样率通过外部输入时钟控制,可采集输入电压,也可采集芯片温度,支持输入校准和温度补偿校准。

ADC主要特性

  • 支持最多4路数据采集

  • 支持DMA模块用于数据缓冲;

  • 支持中断交互模式;

  • 支持采集数据与输入数据比较功能

  • 最高采样频率1KHz;

  • 支持单端输入模式和差分输入模式;

ADC功能描述

模块基本结构

ADC模块为PGA+SDADC结构,输入信号经过PGA进行预放大后,输入到SDADC处理,SDADC设计为16bit ADC。需要注意的是,芯片内ADC采用2.5V LDO供电,为保护内部电路,输入信号必须要满足Vinmax<2.5V,其他限制条件,详见26.3.8节。

通道选择

寄存器0x04[11:8] 提供通道选择功能。W800的ADC提供4通道信号的采集功能。通过设置寄存器0x04[11:8]可以选择4个通道中任一通道进行单端信号数据采集,或者选择4通道中预先配对的2对差分通道进行差分信号数据采集。具体通道选择可以参见寄存器描述。

除了4个通道以外,ADC模块还提供了温度检测,电压检测以及offset校准功能。分别对应通道选择的4’b1100,4’b1101,4’b1110.

如果需要使用对应功能,将通道选择配置为对应的通道,然后按照以上使用说明的流程操作即可。

数据比较

ADC模块提供数据比较功能,可通过配置寄存器0x10的BIIT[5] 设置此功能的开关。

用户可通过结果寄存器0x18的BIT[17:0] 配置希望比较的数值。此数值需要转换为18bit有符号数,最高位为符号位。ADC配置寄存器0x10的BIT[6] 可以设置数据比较的方向,当此位为0时,如果ADC采集的值大于或者等于Comp_data,则INT_CMP会被置1,并且会产生一个中断;当此位为1时,只有当ADC采集的值的小于Comp_data,则INT_CMP 会被置1,并且产生一个中断。

PGA增益调整说明

寄存器地址0X08的BIT[8:4],5位增益控制信号,其中

0X08[8:7]=GAIN_CTRL_PGA<4:3>(对应GAIN2)

0X08[6:4]=GAIN_CTRL_PGA<2:0>(对应GAIN1,110和111不使用)

PGA整体增益GAIN_PGA=GAN1*GAIN2

PGA增益配置表(用放大倍数表示)

[8:7][6:4]

00

01

10

11

000

1

2

3

4

001

16

32

48

64

010

32

64

96

128

011

64

128

192

256

100

128

256

384

512

101

256

512

768

1024

根据仿真结果,同样的放大倍数,建议优先采用其中GAIN2放大倍数较大的配置。

单端模式VCMIN调整说明

PGA内部VCMIN电压,在单端模式下,作为运放输入负端。

调整VCMIN的目的是适应各种不同偏置点的信号源,防止在某些过高或者过低的偏置点下PGA输出饱和。

寄存器地址0X40000D20的BIT[16:11],默认100000,即VCMIN default=1.311V, step≈39.1mV

图 37 单端工作模式原理

图 37 单端工作模式原理

Bypass模式

Bypass_pga寄存器地址0X08的BIT[3],默认0,不旁路,PGA正常工作;若为1,此时PGA被旁路,外部信号源直接连接到SDADC输入端,主要用于内部模块测试,正常使用时不需要bypass。

Bypass_ref寄存器地址0X08的BIT[2],默认0,不旁路,SDADC正常工作;若为1,此时SDADC内部ref被旁路,需要通过测试脚添加外部基准电压,主要用于内部模块测试,正常使用时不需要bypass。

SDADC输出码补充说明

SDADC输出结果保存在ADC_RESULT寄存器中,寄存器地址0X00 BIT[17:0]。

SDADC本身输出码为无符号数,由于数字对SDADC的输出码进行了处理(最高位取反),变为有符号数,而SDADC输出码的0码并不固定(且不是正好为10 0000 0000 0000 0000),所以直接采用寄存器的数值进行后续计算,是错误的。

对SDADC的输出结果进行计算时,寄存器ADC_RESULT[17:0]的值(读取值是16进制数),需要软件先转换回无符号数(2进制数最高位ADC_RESULT[17]取反),再进行后续计算。

此次设计的SDADC为12bit ADC,设计中对ADC转换数据做了处理,实际有效寄存器位数为16bit,而寄存器数据为18bit,通过数字滤波器增加了最低两位,16bit数转为18bit数(18bit数≈16bit数*4),所以有效位数为高16bit(即ADC_RESULT[17:2])。

在将读取值转回无符号数之后,涉及LSB的计算,还需要软件将18bit数据转为16bit数据,即舍去最低两位数据(ADC_RESULT[1:0]),只保留高16bit(转回无符号数的ADC_RESULT[17:2]),然后用16bit数据进行后续计算,此时LSB的仿真结果约等于68.5uV(还需测试确定芯片实际LSB)。

输入信号电压范围

因为NTO版本PGA和SDADC采用2.5V LDO供电,为防止内部电路饱和,对输入信号电压范围有限制。

假定输入差分信号为Vinp和Vinn(单端模式时,信号Vinn为VCMIN),则输入差分电压Vdiff=Vinp-Vinn,输入共模电压Vcm=(Vinp+Vinn)/2。PGA第一级增益GAIN1,第二级增益GAIN2,PGA整体增益GAIN_PGA=GAN1*GAIN2(详见2.2.2节)。

输入信号需同时满足下列限制条件:

0V < Vinp < 2.5V,0V < Vinn < 2.5V;

0V < Vcm - (Vdiff*GAIN1)/2;

Vcm + (Vdiff*GAIN1)/2 < 2.5V;

0V < 1.2V- (Vdiff*GAIN_PGA)/2;

1.2V + (Vdiff*GAIN_PGA)/2 < 2.5V;

对于已知输入信号大致范围的,可以直接代入上面的式子计算,选取可用增益设置。

对于未知输入信号,可先用x1增益设置,判断出大致范围,再代入上面的式子计算,选取可用增益设置。

典型使用情况的寄存器配置

以下配置字都为16进制数,高位的0已省略。

Offset测量

1. 设置模块工作状态,将寄存器0X04设置为0xE03,打开信道选择(offset检测)/SDADC_CHOP 使能/SDADC使能/LDO使能

2. 设置模块寄存器0X08=0x3,PGA为x1增益配置/PGA_CHOP使能/PGA使能。其中,增益配置0X08 BIT[8:4]要根据所进行测试的要求,进行相应的修改(即后面测试用的什么增益配置,offset测量时也要采用相同的增益配置)

1. 设置时钟状态0X40000E14 BIT[15:8]=0x28,确认SDADC时钟配置为1MHz。芯片上电后默认值即为0x28,若无改动,此步骤可省略

4. 等待2ms,读出ADC_RESULT寄存器的输出结果,参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),再舍去最低两位,只保留高16bit数据。重复读取共10次,读数间隔2ms,算出码数平均值记为code_offset

差分输入模式

  1. 先按照26.4.1节进行offset测量,得出code_offset

2. 设置模块寄存器0X04=0x803,信道选择(正channel 0,负channel 1)/SDADC_CHOP 使能/SDADC使能/LDO使能。其中信道选择0X04[11:8],可配置成其他channel的差分输入,参考26.3.2节;

3. 设置模块寄存器0X08=0x3,PGA为x1增益配置/PGA_CHOP使能/PGA使能。其中,增益配置0X08[8:4]根据输入信号电压范围,选取合适的配置,参考26.3.4和26.3.8节

4. 设置时钟状态0X40000E14[15:8]=0x28,确认SDADC时钟配置为1MHz。芯片上电后默认值即为28,若无改动,此步骤可省略

5. 等待2ms,读出ADC_RESULT寄存器的输出结果,寄存器地址0X00[17:0]。参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),再舍去最低两位,只保留高16bit数据。6. 重复读取共10次,读数间隔2ms,算出码数平均值记为code_out

7. 差分输入信号Vindiff=(code_out-code_offset)*LSB/GAIN_PGA,其中LSB根据仿真结果约等于68.5uV

单端输入模式

  1. 先按照26.4.1节进行offset测量,得出code_offset;

2. 设置模块寄存器0X04=0x3,信道选择(正channel 0,负VCMIN)/SDADC_CHOP 使能/SDADC使能/LDO使能。其中信道选择0X04[11:8],可配置成其他channel的单端输入,参考26.3.2节

设置模块寄存器0X408=0x3,PGA为x1增益配置/PGA_CHOP使能/PGA使能。其中,VCMIN配置0X40000D20[16:11]和增益配置0X08[8:4],根据输入信号电压范围,选取合适的配置,参考26.3.4、26.3.5和26.3.8节

3. 设置时钟状态0X40000E14[15:8]=0x28,确认SDADC时钟配置为1MHz。芯片上电后默认值即为28,若无改动,此步骤可省略;

4. 等待2ms,读出ADC_RESULT寄存器的输出结果,寄存器地址0X00[17:0]。参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),再舍去最低两位,只保留高16bit数据。重复读取共10次,读数间隔2ms,算出码数平均值记为code_out;

5. 单端模式输入信号vin_single=(code_out-code_offset)*LSB/ GAIN_PGA+VCMIN,其中LSB根据仿真结果约等于68.5uV,VCMIN 默认值1.311V;

温度检测模式

1. 设置模块寄存器0X04=0xC03,信道选择(温度检测)/SDADC_CHOP 使能/SDADC使能/LDO使能;

  1. 设置模块寄存器0X08=0x183,PGA为x4增益配置/PGA_CHOP使能/PGA使能;

3. 设置时钟状态0X40000E14[15:8]=0x28,确认SDADC时钟配置为1MHz。芯片上电后默认值即为28,若无改动,此步骤可省略;

4. 设置tempsensor模块工作状态0X0C=0x1,TempSensor使能/cal_offset_temp12=0,TempSensor为x2增益配置;

5. 等待2ms,读取ADC_RESULT寄存器的输出结果,参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),记为输出码code_out1;

6. 设置tempsensor模块工作状态0X0C=0x3,TempSensor使能/cal_offset_temp12=1,TempSensor为x2增益配置;

7. 等待2ms,读取ADC_RESULT寄存器的输出结果,参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),记为输出码code_out2;

8. 重复步骤4到步骤7,共10次,分别算出code_out1和code_out2的平均值code_out1avg和code_out2avg;

9. 由上面步骤算出Vtemp=(code_out1avg-code_out2avg)/16,而TempSensor输出电压=Vtemp码数*(LSB/4),其中LSB根据仿真结果约等于68.5uV(此LSB是按16bit的仿真结果,温度检测上面的步骤5和7里,读取都是18bit数据,18bit数≈16bit数*4,则18bit对应的最低有效位≈LSB/4)

  1. 根据测试结果,目前整理出了拟合公式,可直接估算芯片温度

Vtemp码=(15.548*芯片温度)+4444.1

将步骤9算出的Vtemp代入上面的公式,得出芯片温度。(注意,拟合公式采用的是十进制)

另外,补充一个提高精度的可选措施:

对不同芯片,假定拟合公式y=kx+b中的系数k不变(都为15.548),不同芯片的系数b有一定差别。可按照上面的使用说明,先在已知环境温度下(例如室温25℃),算出Vtemp码数,代入Vtemp码=(15.548*(已知环境温度+11.8))+b,得出不同芯片的系数b,保存在rom或flash中,替换上面公式的4444.1。然后,按照新公式的系数计算温度,可在一定程度上提高不同芯片的温度检测精度。

电压检测模式

  1. 先按照26.4.1节进行offset测量,得出code_offset;

2. 设置模块寄存器0X04=0xD03,信道选择(电压检测)/SDADC_CHOP 使能/SDADC使能/LDO使能

  1. 设置模块寄存器0X08=0x83,PGA为x2增益配置/PGA_CHOP使能/PGA使能。

4. 设置时钟状态0X40000E14[15:8]=28,确认SDADC时钟配置为1MHz。芯片上电后默认值即为28,若无改动,此步骤可省略

5. 等待2ms,读出ADC_RESULT寄存器的输出结果,参照26.3.7节,需要软件先转换回无符号数(最高位ADC_RESULT[17]取反),再舍去最低两位,只保留高16bit数据。重复读取共10次,读数间隔2ms,算出码数平均值记为code_out;

6. 芯片电源电压Vpower=(code_out-code_offset)*LSB/2+1.2V,其中LSB根据仿真结果约等于68.5uV

ADC寄存器描述

寄存器列表

表 208 ADC寄存器列表

偏移地址

名称

缩写

描述

复位值

0X0000

ADC 结果寄存器

ADC_RESUL

存放 ADC 采集值及数据比较值

0X0000_0000

0X0004

ADC 模拟寄存器

ADC_ANA_CTRL

配置 ADC 相关功能

0X0000_0004

0X0008

PGA 配置寄存器

PGA_CTRL

配置 PGA 相关功能

0x0000_0000

0X000c

TempSensor 配置寄存器

TEMP_CTRL

配置温度传感器相关功能

0x0000_0000

0x0010

ADC 配置寄存器

ADC_CTRL

配置 ADC 模块功能

0x0050_0500

0x0014

ADC 中断寄存器

ADC_INT _STATUS

ADC 模块中断状态寄存器

0x0000_0000

0x0018

比较值寄存器

CMP_VALUE

比较阈值设置

0x0000_0000

ADC结果寄存器

表 209 ADC结果寄存器

访问

操作说明

复位值

[17:0]

RW

ADC 转换结果值,有效 bit 位宽18bits。有符号数,最高位为符号位。

1’b0

ADC模拟配置寄存器

表 210 ADC配置寄存器

访问

操作说明

复位值

[11 : 8]

RW

ADC工作通道选择信号:

4’b0000:AIN0 通道工 作。DMA 模式下,对应 DMA 通道0工作

4’b0001:AIN1 通道工 作。DMA 模式下,对应 DMA 通道1工作

4’b0010:AIN2 通道工 作。DMA 模式下,对应 DMA 通道2工作

4’b0011:AIN3 通道工 作。DMA 模式下,对应 DMA 通道3工作

4’b0100:RSV

4’b0101:RSV

4’b0110:RSV

4’b0111:RSV

4’b1000:AIN0/AIN1 差分信号输入。DMA 模式下,对应 DMA 通道0工作

4’b1001:AIN2/AIN3 差分信号输入。DMA 模式下,对应 DMA 通道2工作

4’b1010:RSV

4’b1011:RSV

4’b1100:温度传感器输入,对应 DMA 通道2

4’b1101:电压检测模块输入,对应 DMA 通道3

4’b1110:offset 检测输入

4’b1111:RSV

4’b1000

[7]

RO

RSV

1’b0

[6:5]

RW

chop_enr

LDO 斩波信号 PD 信号

2’b00

[4]

RW

Chop_ens

sdadc 斩波信号 PD 信号

0:使能

1:不使能

1’b0

[3]

RO

RSV

1’b0

[2]

RW

Pd_sdadc

sdadc 模拟模块掉电使能

1:掉电

0:工作

1’b1

[1]

RW

Rstn_sdadc

模拟模块数字逻辑部分复位信号

0:复位

1:正常工作

1’b0

[0]

RW

en_ldo_sdadc

ADC LDO 使能

0:掉电1:工作

1’b0

PGA配置寄存器

表 211 PGA配置寄存器

访问

操作说明

复位值

[8:4]

RW

Gain_ctrl_pga

PGA 增益配置;

BIT[8:7] 配置 GAIN2,BIT[6:4 ] 配置 GAIN1,具体增益表参考 Section26.3.4

5’d0

[3]

RW

Bypass_pga

pga旁路信号

1:旁路pga

0:不旁路

1’b0

[2]

RW

Bypass_ref

内部参考电压旁路信号

1:旁路内部参考电压

0:不旁路

1’b0

[1]

RW

Chop_enp

PGA斩波使能信号

1:使能

0:不使能

1’b0

[0]

RW

En_pga

Pga使能信号

1:使能

0:不使能

1’b0

TEMP配置寄存器

表 212 温度传感器配置寄存器

访问

操作说明

复位值

[5:4]

RW

Gain_temp

temp 增益控制

编码 Gain

00 – 2

01 – 4

10 – 6

11 – 8

2’d0

[3:2]

RO

RSV

2’b0

[1]

RW

Cal_offset_temp12

TEMPSEN offset 校准功能

1’b0

[0]

RW

ON_TEMP

1:temp 使能

0:temp 不使能

1’b0

ADC功能配置寄存器

表 213 温度传感器配置寄存器

访问

操作说明

复位值

[29:20]

RW

ana_swth_time

软件切换数据通道之后,模拟电路保持稳定需要的时间,默认为80个 pclk,即2us

10’h050

[19:18]

RO

RSV

2’b0

[17:8]

RW

ana_init_time

软件启动 adc_start 后,模拟电路保持稳定需要的时间,默认为80个 pclk,即2us

10’h050

[7]

RO

RSV

1’b0

[6]

RW

Cmp_pol

0: adc_result >= cmp_value 时产生中断

1:adc_result < cm p_value 时产生中断

1’b0

[5]

RW

Cmp_int_ena

1:比较中断使能

0:比较中断不使能

1’b0

[4]

RW

Adc_cmp_enable

1:adc 比较功能使能

0:adc 比较功能不使能

1’b0

[3:2]

RO

Reserved

2‘b0

[1]

RW

Adc_int_ena

1:ADC 数据转换中断使能

0:ADC 数据转换中断不使能

1’b0

[0]

RW

Adc_dma_enable

1:dma使能

0:dma不使能

1’b0

ADC中断状态寄存器

表 214 ADC中断状态寄存器

访问

操作说明

复位值

[1]

RW

Cmp_int

比较中断标志位,硬件置位,软件写1清零

1’b0

[0]

RW

Adc_int

数据转换完成中断,硬件置位,软件写1清零

1’b0

比较阈值寄存器

访问

操作说明

复位值

[17:0]

R/W

Cmp_value

要比较的数值

18‘h00000

Touch Sensor

模块功能概述

模块基本功能如下:

  • 支持最多16路Touch Sensor扫描;

  • 记录每路Touch Sensor 扫描结果;

  • 通过中断上报扫描结果;

功能使用说明

W800系统中集成触摸按键模块,基本原理是当按键被触摸时,按键上电路的电容值会发生变化,从而影响模块中输出时钟频率。通过检测模块的输出时钟的频率,可以判断电容值是否发生变化,从而判断按键的状态。

此数字模块的基本功能为每隔一定时间逐次扫描每个触摸按键的状态,在设定的时间窗口内计数并记录下每个按键的状态。如果超过设定的阈值,则判断该按键被触摸,通过中断上报给MCU系统。

基本工作流程

1. 设置Touch_CR 寄存器,配置扫描周期,扫描窗口,以及选择需要扫描的IO。Touch_CR中scan_period为每次扫描的间隔周期,单位为16ms。即如果寄存器设置为10,则每160ms将会逐次扫描16个触摸按键。CAPDET_CNT 为扫描每个IO状态时计数的窗口,即上图的N。需要注意的是,为避免切换通道导致的抖动,每次切换扫描IO后在第三个脉冲开始才会开始计数,因此如过该寄存器设置为N,则实际计数窗口为N-2。

2. 设置每个Touch IO 对应的计数阈值。如果扫描的结果超过基数+阈值,则可认为该按键被触摸;

  1. 使能Touch_CR[0], 模块开始工作。

4. 在使能触摸按键模块后,硬件会先逐次扫描选中的IO,并将各个IO的计数值存储下来,作为基数。然后每隔一个scan_period 逐次扫描选中的IO,将当前扫描的值存储下来。所有IO扫描完毕以后会将每个IO的计数值与基数做比较,如果当前值>基数+阈值,则认为此按键被触摸,寄存器0x44中PAD_STATUS中对应位会被置位为1,并通过中断上报给系统。PAD_STAUS写1 清0。

寄存器列表:

表 216 Touch Sensor控制器寄存器列表

偏移地址

名称

缩写

描述

默认值

0X0000_0000

控制寄存器

Touch_CR

Touch Sensor 控制器设置

0X0000_0000

0X0000_0004 ~ 0X0000_0040

触控按键单路控制

Touch_Sensor x

每路触控按键阈值控制与计数值

0X0000_0000

0x0000_0044

中断控制器

Int_Source

中断控制

0X0000_0000

Touch Sensor控制寄存器

表 217 Touch Sensor 控制设置寄存器

访问

操作说明

复位值

[31:26]

RW

Scan_period

扫描周期,单位为16ms;例如 scan_period 设置为6’d10, 则每160ms扫描一次按键状态

6’d10

[25:20]

RW

CAPDET_CNT

选择CAPDET 输出脉冲数作为计数窗口。

注: 为避免切换通道导致的抖动,在第三个脉冲开始才会开始计数,因此如此寄存器设置为N,则实际计数 窗口为N-2。例如设置为6’d20 ,则以18个 CAPDET

脉冲的周期为计数窗口。

6’d20

[19:4]

RW

Touch Sensor 按键选择;扫描对应 bit 的触摸按键状态。

0x0000:不扫描

0x0001:扫描第一个按键

0x0002:扫描第二个按键

0x0003: 扫描第一个和第二个按键

0xFFFF: 扫描所有16个按键

16’d0

[3:1]

RW

RSV

3’d0

[0]

RW

触摸按键控制器使能 1’b0

1:使能触摸按键扫描

0:关闭触摸按键扫描

1’b0

触摸按键单路控制寄存器

表 218 触摸按键单路设置寄存器

访问

操作说明

复位值

[22:8]

RO

Touch Senor 1 计数值

16’d0

[7]

RO

RSV

1’b0

[6:0]

RW

Touch Senor 1 阈值

7’d50

中断控制寄存器

表 219 触摸按键中断控制寄存器

访问

操作说明

复位值

[31:16]

RW

INT_EN

对应 bit 为1时表示对应 IO 被触发会产生中断

对应 bit 为1时表示对应 IO 被触发不会产生中断

16’d0

[15:0]

RW

PAD_STATUS / INT_SOURCE

bit 为1时表示对应 PAD 被触发

bit 为0时表示对应 PAD 未触发

写1清0

16‘d0

W800安全架构设计

功能概述

XT804通过HPROT信号表示总线访问的安全特性

0

1

HPROT[3]

uncacheable

cacheable

HPROT[2]

un-security

security

HPROT[1]

User

super

HPROT[0]

Code

data

W800对安全架构的支持分为对sram的安全访问控制和对外设的访问控制。

SRAM安全访问控制器(SASC)

一级总线SRAM,二级总线SRAM和FLASH各有一个安全访问控制器,每个SASC控制的存储空间都有如下的安全特性

  • 8个可配置的安全区域

  • 每个安全区域最小可配置为4个字节

  • Security-super可以对所有区域进行没有限制的访问

  • 如果CPU通过AHB总线上的访问被拒绝会产生错误的应答信号(HRESP=1),从而引发访问异常。

  • 如果是总线上其它主设备比如DMA等访问被拒绝不会产生异常。

可信IP控制器(TIPC)

挂在APB总线上,用于配置包括一级总线,二级总线和APB总线上所有外设的信任权限。如果外设被配置为可信设备(ip_trust_vld=1),则只有总线上的访问是security(HPROT[2]=1 或PPROT[2]=1)时,才能正常访问外设,否则读写都会被拒绝。

安全架构框图

寄存器说明

SASC寄存器列表

名称

移地址

位阈

说明

复位值

CAR

0x0

[31:16]

保留未用

[15:14]

sram region7 配置属性,同 region0

2’b00

[13:12]

sram region6 配置属性,同 region0

2’b00

[11:10]

sram region5 配置属性,同 region0

2’b00

[9:8]

sram region4 配置属性,同 region0

2’b00

[7:6]

sram region3 配置属性,同 region0

2’b00

[5:4]

sram region2 配置属性,同 region0

2’b00

[3:2]

sram region1 配置属性,同 region0

2’b00

[1:0]

sram region0 配置属性

00: un-security - user

01: un-security - super

10: security-user

11: security-super

2’b00

CR

0x4

31:8

未用保留

7

region7属性控制寄存器,同 region0

6

region6属性控制寄存器,同 region0

5

region5属性控制寄存器,同 region0

4

region4属性控制寄存器,同 region0

3

region3属性控制寄存器,同 region0

2

region2属性控制寄存器,同 region0

1

region1属性控制寄存器,同 region0

0

region0属性控制寄存器

0:属性无效 1:属性有效

AP0

0x8

[31:16]

保留未用

[15:14]

region7 AP配置,适用于 un-security - user

[13:12]

region6 AP配置,适用于 un-security - user

[11:10]

region5 AP配置,适用于 un-security - user

[9:8]

region4 AP配置,适用于 un-security - user

[7:6]

region3 AP配置,适用于 un-security - user

[5:4]

region2 AP配置,适用于 un-security - user

[3:2]

region1 AP配置,适用于 un-security - user

[1:0]

region0 AP配置,适用于 un-security - user

00:R/W 01:RO 10:WO 11: No Access

CD0

0xC

[31:16]

保留未用

[15:14]

region7 CD配置,适用于 un-security - user

[13:12]

region6 CD配置,适用于 un-security - user

[11:10]

region5 CD配置,适用于 un-security - user

[9:8]

region4 CD配置,适用于 un-security - user

[7:6]

region3 CD配置,适用于 un-security - user

[5:4]

region2 CD配置,适用于 un-security - user

[3:2]

region1 CD配置,适用于 un-security - user

[1:0]

region0 CD配置,适用于 un-security - user

00: Date Access , Opcode Feche

01: Data Access

10: Opcode Feche

11: Data, Opcode all deny

AP1

0x10

[31:16]

保留未用

[15:14]

region7 AP配置,适用于un-security -super

[13:12]

region6 AP配置,适用于un-security -super

[11:10]

region5 AP配置,适用于un-security -super

[9:8]

region4 AP配置,适用于un-security -super

[7:6]

region3 AP配置,适用于un-security -super

[5:4]

region2 AP配置,适用于un-security -super

[3:2]

region1 AP配置,适用于un-security -super

[1:0]

region0 AP配置,适用于un-security -super

00:R/W 01:RO 10:WO 11: No Access

CD1

0x14

[31:16]

保留未用

[15:14]

region7 CD配置,适用于un-security -super

[13:12]

region6 CD配置,适用于un-security -super

[11:10]

region5 CD配置,适用于un-security -super

[9:8]

region4 CD配置,适用于un-security -super

[7:6]

region3 CD配置,适用于un-security -super

[5:4]

region2 CD配置,适用于un-security -super

[3:2]

region1 CD配置,适用于un-security -super

[1:0]

region0 CD配置,适用于un-security -super

00: Date Access , Opcode Feche

01: Data Access

10: Opcode Feche

11: Data, Opcode all deny

AP2

0x18

[31:16]

保留未用

[15:14]

region7 AP配置,适用于 security-user

[13:12]

region6 AP配置,适用于 security-user

[11:10]

region5 AP配置,适用于 security-user

[9:8]

region4 AP配置,适用于 security-user

[7:6]

region3 AP配置,适用于 security-user

[5:4]

region2 AP配置,适用于 security-user

[3:2]

region1 AP配置,适用于 security-user

[1:0]

region0 AP配置,适用于 security-user

00:R/W 01:RO 10:WO 11: No Access

CD2

0x1C

[31:16]

保留未用

[15:14]

region7 CD配置,适用于 security-user

[13:12]

region6 CD配置,适用于 security-user

[11:10]

region5 CD配置,适用于 security-user

[9:8]

region4 CD配置,适用于 security-user

[7:6]

region3 CD配置,适用于 security-user

[5:4]

region2 CD配置,适用于 security-user

[3:2]

region1 CD配置,适用于 security-user

[1:0]

region0 CD配置,适用于 security-user

00: Date Access , Opcode Feche

01: Data Access

10: Opcode Feche

11: Data, Opcode all deny

REGION0

0x20

31:n+1

保留

0

n:8

BAddr0,region0基地址,n与sram大小相关,

sram=32kB,n=20

sram=64kB, n=21

7:5

保留

3’b000

4:0

RSize,region0 size

00101: 4B

00110: 8B

……

10001: 16KB

10010: 32KB

……

REGION1

0x24

31:n+1

保留

0

n:8

Baddr1,region1基地址

7:5

保留

3’b000

4:0

region1 size

REGION2

0x28

31:n+1

保留

0

n:8

region2基地址

7:5

保留

3’b000

4:0

region2 size

REGION3

0x2C

31:n+1

保留

0

n:8

region3基地址

7:5

保留

3’b000

4:0

region3 size

REGION4

0x30

31:n+1

保留

0

n:8

region4基地址

7:5

保留

3’b000

4:0

region4 size

REGION5

0x34

31:n+1

保留

0

n:8

region5基地址

7:5

保留

3’b000

4:0

region5 size

REGION6

0x38

31:n+1

保留

0

n:8

region6基地址

7:5

保留

3’b000

4:0

region6 size

REGION7

0x3C

31:n+1

保留

0

n:8

region7基地址

7:5

保留

3’b000

4:0

region7 size

TIPC寄存器

名称

移地址

位阈

说明

复位值

ip_trust_vld0

0x0

31:18

未用

0

17

BT modem可信属性

1:可信 0:不可信

0

16

I2S可信属性

0

15

PWM可信属性

0

14

LCD driver可信属性

0

13

RF controller可信属性

0

12

timer可信属性

0

11

watch dog可信属性

0

10

PORTB可信属性

0

9

PORTA可信属性

0

8

UART5可信属性

0

7

UART4可信属性

0

6

UART3可信属性

0

5

UART2可信属性

0

4

UART1可信属性

0

3

UART0可信属性

0

2

SPI MASTER可信属性

0

1

SAR ADC可信属性

0

0

I2C可信属性

0

ip_trust_vld1

0x4

31:18

未用

0

17

RF BIST可信属性配置

1:可信 0:不可信

0

16

SDIO Wrapper可信属性

15

SPI_HS可信属性

0

14

SDIO可信属性

0

13

未用

0

12

SEC可信属性

0

11

MAC可信属性

0

10

BBP可信属性

0

9

MMU可信属性

0

8

时钟复位控制模块可信属性

0

7

PMU可信属性

0

6

BT可信属性

0

5

GPSEC可信属性

0

4

DMA可信属性

0

3

RSA可信属性

0

2

PSRAM控制器可信属性

0

1

FLASH控制器可信属性

0

0

SDIO HOST 可信属性

0

使用说明

内存安全访问(SASC)

寄存器的访问权限

SASC 寄存器的访问按照以下原则:

  • CAR 寄存器只能在 cpu 为 security-super 时进行读写。

  • 当 cpu 处于 un-security -super 时,可以访问被配置为 un-security - user 的 region 相关寄存器位。

  • 当 cpu 为 security-super 时,可以读写所有寄存器。

  • 其它情况下寄存器都不可访问

例如当CAR设为16’he4e4时,表示 region0 和 region4 被设为 un-security - user,此时如果 cpu 处于 un-security -super,则 cpu 可以读写寄存器 REGION0 和 REGION4,以及CR[0], CR[4], APx[1:0], APx[9:8], CDx[1:0], CDx[9:8]。

保护区间地址的设置

每个 ASC 都支持8个可配置的存储器保护区间 region,REGIONx[31:8]中的基地址为想要配置的存储区间实际物理地址的25到2位,同时,Size 的大小和基地址需要满足下面的要求:

SIZE

00101: 4B;

00110: 8B; Baddrx[0] = 0

00111: 16B; Baddrx[1:0] = 0

01000: 32B; Baddrx[2:0] = 0

01001: 64B; Baddrx[3:0] = 0

01010: 128B; Baddrx[4:0] = 0

01011: 256B; Baddrx[5:0] = 0

01100: 512B; Baddrx[6:0] = 0

01101:1KB; Baddrx[7:0] = 0

01110: 2KB; Baddrx[8:0] = 0

01111:4KB; Baddrx[9:0] = 0

10000: 8KB; Baddrx[10:0] = 0

10001: 16KB; Baddrx[11:0] = 0

例如,如果将20000100作为region0的基地址,那么region0最大可以设为256B,如果想将region0设为128B,REGION0寄存器应填入0x0000400a。如果将20040000作为基地址,则该region最大可设为64KB,如果就要定义一个64KB的region,则该寄存器应填入0x01000013。

存储器的访问权限

根据上图

  • security-super 的总线访问可以随意访问 sram

  • un-security -super 的总线访问可以随意访问被配置为 un-security - user 的 region

  • security-user 的总线访问只能按当前 AP 和 CD 属性访问 security-user 的 region

  • un-security -super 的总线访问可以按当前 AP 和 CD 属性访问 un-security -super 的 region

  • un-security - user 的总线访问只能按当前 AP 和 CD 属性访问 un-security - user 的 region

APx 和 CDx 寄存器用于设置每个 region 对应于不同权限时的访问属性,其中 CDx 寄存器只在总线访问时读操作时有效,也就是设置是否允许读数据和读指令。APx寄存器用于设置是否允许读/写操作。

例如如果 CAR[1:0]设为00,并且 CR[0]为1,表示 REGION 0 为 un-security - user,并且使能权限保护,此时如果总线访问为 security-super 或 un-security -super,则可以随意访问 REGION 0;如果总线访问为 Security- user,则任何访问都会被拒绝;如果总线访问为 un-security - user,AP0[1:0]为01,表示只读,CD0[1:0]为01,表示数据访问,则 REGION 0允许总线读数据,其它操作均被拒绝。

如果AHB总线的访问了不能访问的区域或权限不对,则sasc模块会给出read deny或write deny信号,从而返回错误的HRESP应答信号,如果发起总线访问的是CPU,则会产生硬件异常中断,如果是其它设备,则只会拒绝访问。

外设的可信访问

TIPC模块只有PROT[2]信号为1时才能写入,即只有在可信世界才能写入各个IP的可信属性配置寄存器。Ip_trust_vld寄存器默认都为0,即所有外设都是不可信的,此时外设可以随意访问,如果外设对应的ip_trust_vld被置位,也就是把外设设为可信设备,则只有可信世界的命令可以访问该外设。

附录1. 芯片引脚定义

芯片引脚分布

图 38 W800芯片引脚分布

图 38 W800芯片引脚分布

芯片引脚复用关系

表 220 芯片引脚复用关系

编号

名称

类型

复位后管脚功能

复用功能

最高频率

上下拉能力

驱动能力

1

PB_20

I/O

UART_RX

UART0_RX / PWM 1 / UART1 _CTS / I²C_SCL

10MHz

UP/DOWN

12mA

2

PB_19

I/O

UART_TX

UART0_TX / PWM 0 / UART1 _RTS / I²C_SDA

10MHz

UP/DOWN

12mA

3

WAKEUP

I

WAKEUP 唤醒功能

DOWN

4

RESET

I

RESET 复位

UP

5

XTAL_OUT

O

外部晶振输出

6

XTAL_IN

I

外部晶振输入

7

AVDD33

P

芯片电源,3.3V

8

ANT

I/O

射频天线

9

AVDD33

P

芯片电源,3.3V

10

AVDD33

P

芯片电源,3.3V

11

AVDD33 _AUX

P

芯片电源,3.3V

12

TEST

I

测试功能配置管脚

13

BOOTMO DE

I/O

BOOTMO DE

I²S_MCLK / LSPI_CS / PWM2 / I²S_DO

20MHz

UP/DOWN

12mA

14

PA_1

I/O

JTAG_CK

JTAG_CK / I²C_SCL / PWM3 / I²S _LRCK / ADC0

20MHz

UP/DOWN

12mA

15

PA_4

I/O

JTAG_SWO

JTAG_SWO / I²C_SDA / PWM4 / I²S_BCK / ADC1

20MHz

UP/DOWN

12mA

16

PA_7

I/O

GPIO,输 入,高阻

PWM4 / LI_MO SI / I²S_MCK / I²S_DI / Touch0

20MHz

UP/DOWN

12mA

17

VDD33IO

P

IO电源,3.3V

18

PB_0

I/O

GPIO,输 入,高阻

PWM0 / LI_MISO / UART3 _TX / PSRAM_CK / Touch3

80MHz

UP/DOWN

12mA

19

PB_1

I/O

GPIO,输 入,高阻

PWM1 / LI_CK / UART3 _RX / PSRAM_CS / Touch4

80MHz

UP/DOWN

12mA

20

PB_2

I/O

GPIO,输 入,高阻

PWM2 / LI_CK / UART2 _TX / PSRAM_D0 / Touch5

80MHz

UP/DOWN

12mA

21

PB_3

I/O

GPIO,输 入,高阻

PWM3 / LI_MISO / UART2 _RX / PSRAM_D1 / Touch6

80MHz

UP/DOWN

12mA

22

PB_4

I/O

GPIO,输 入,高阻

LSPI _CUART2 _RTS / UART4_TX / PSRAM_D2 / Touch7

80MHz

UP/DOWN

12mA

23

PB_5

I/O

GPIO,输 入,高阻

LSPI_MI / UART2 _CTS / UART4_RX / PSARM_D3 / TouCh8

80MHz

UP/DOWN

12mA

24

VDD33IO

P

IO电源,3.3V

25

CAP

I

外接电容,1µF

26

PB_6

I/O

GPIO,输 入,高阻

UART1_TX / MMC_CLK / hSPI_CK / SDIO_CK / Touch9

50MHz

UP/DOW

12mA

27

PB_7

I/O

GPIO,输 入,高阻

UART1_TX / MMC_CMD / hSPI_INT / SDIO _CMD / Touch10

50MHz

UP/DOW

12mA

28

PB_8

I/O

GPIO,输 入,高阻

I²S _BCMMC _D0 / PWM _BREAK /SDIO_D0 / Touch11

50MHz

UP/DOWN

12mA

29

PB_9

I/O

GPIO,输入,高阻

I²S_LR / MMC_D1 / HSPI _CS / SDIO_D1 / Touch12

50MHz

UP/DOWN

12mA

30

PB_10

I/O

GPIO,输 入,高阻

I²S _DIMC _D2 / HSPI_DI / SDIO_D2

50MHz

UP/DOWN

12mA

31

VDD33IO

P

IO电源,3.3V

32

PB_11

I/O

GPIO,输 入,高阻

I²S _DOMC _D3 / HSPI_DO / SDIO_D3

50MHz

UP/DOWN

12mA

33

GND

P

接地

声明

北京联盛德微电子有限责任公司保留随时修改、更新联盛德微电子产品或者各种文档、资料的权利。所有更新会通过联盛德微电子官方渠道进行发布。使用者必须确保通过官方渠道获取正确的信息。联盛德微电子不承诺将更新信息对所有人进行通知。