1. ARM GFC-100寄存器架构解析
在嵌入式系统开发中,寄存器是CPU与硬件外设通信的基础接口。ARM GFC-100作为一款嵌入式Flash控制器,其寄存器设计遵循ARM架构的标准规范,同时又针对Flash控制进行了特殊优化。我们先从最核心的识别寄存器组开始剖析。
1.1 外设识别寄存器组(PIDR)
PIDR(Peripheral Identification Register)是ARM架构中用于设备识别的标准寄存器组,GFC-100实现了从PIDR0到PIDR4共5个寄存器:
1.1.1 PIDR4寄存器详解
偏移地址:0xFD0,只读属性,复位值0x4
markdown复制| 位域 | 名称 | 功能描述 |
|--------|---------|--------------------------------------------------------------------------|
| [7:4] | SIZE | 固定值0x1,表示GFC-100寄存器占用4KB地址空间 |
| [3:0] | DES_2 | 值为0x4,表示需要4个Continuation Codes(0x7F)来完整识别ARM设备 |
这个寄存器有两个关键作用:
- 通过SIZE字段快速确认寄存器映射范围,在系统内存分配时避免地址冲突
- DES_2字段与JEDEC JEP106标准相关,用于设备识别流程
1.1.2 PIDR0-PIDR3联合解析
这组寄存器共同构成完整的设备识别码:
- PIDR0 (0xFE0): 存储部件号低8位(PART_0),GFC-100的部件号为832(0x0340)
- PIDR1 (0xFE4):
- [7:4] DES_0: JEDEC制造商代码的低4位
- [3:0] PART_1: 部件号高4位
- PIDR2 (0xFE8):
- [7:4] REVISION: 修订版本号(r0p0对应0x0)
- [3] JEDEC: 固定为1,表示使用JEDEC标准ID
- [2:0] DES_1: JEDEC制造商代码的高3位
- PIDR3 (0xFEC):
- [7:4] REVAND: 非零值表示芯片应用了金属层修复
- [3:0] CMOD: 客户定制标识
实际开发中,建议通过以下代码片段读取设备信息:
c复制uint32_t part_num = ((PIDR1->PART_1 << 8) | PIDR0->PART_0); uint32_t jep106_id = ((PIDR2->DES_1 << 4) | PIDR1->DES_0);
1.2 组件识别寄存器组(CIDR)
CIDR(Component Identification Register)提供更底层的组件标识信息,包括4个寄存器:
| 寄存器 | 偏移地址 | 关键字段 | 功能描述 |
|---|---|---|---|
| CIDR0 | 0xFF0 | PRMBL_0=0x0D | 组件标识前导码0 |
| CIDR1 | 0xFF4 | CLASS=0xF | 组件类别(0xF表示外设控制器) |
| CIDR2 | 0xFF8 | PRMBL_2=0x05 | 组件标识前导码2 |
| CIDR3 | 0xFFC | PRMBL_3=0xB1 | 组件标识前导码3 |
这套寄存器遵循ARM的CI
