MPS2+开发板FPGA寄存器地址错误与固件更新问题解析

1. MPS2(+)开发板FPGA寄存器地址错误问题解析

在嵌入式系统开发中,FPGA寄存器是硬件与软件交互的关键桥梁。作为Arm架构下的经典开发平台,MPS2(+)系列开发板广泛应用于嵌入式系统原型验证和外设驱动开发。近期在实际项目中使用MPS2+时,我发现其软件头文件中存在一个关键寄存器地址定义错误,这个问题直接影响FPGA预分频功能的正常使用。

1.1 问题现象与定位

当尝试使用MPS2+的FPGA预分频功能时,发现无论怎样配置PRESCALE寄存器,系统时钟始终无法按预期分频。通过示波器测量时钟信号和查阅Arm官方文档,最终定位到问题根源:在SMM_MPS2.h头文件中,预分频相关寄存器的偏移地址定义存在错误。

这个头文件被广泛应用于MPS2平台的各类测试软件中,包括:

  • 自测试程序(selftest)
  • 屏蔽测试程序(shieldtest)
  • 演示程序(demo)
  • Mbed OS基础代码

1.2 寄存器地址错误详情

原始头文件中错误的寄存器偏移定义如下:

c复制RESERVED; // Offset: 0x01C
PRESCALE; // Offset: 0x020 
PSCNTR;   // Offset: 0x024

而根据MPS2+技术参考手册(TRM)和FPGA数据手册,正确的偏移地址应为:

c复制PRESCALE; // Offset: 0x01C 
PSCNTR;   // Offset: 0x020
RESERVED; // Offset: 0x024

这个错误导致:

  1. 写入PRESCALE寄存器(0x020)实际上操作的是保留区域
  2. 读取PSCNTR寄存器(0x024)获取的是无效数据
  3. 真正的预分频控制寄存器(0x01C)从未被正确访问

1.3 解决方案与验证步骤

要解决此问题,需要按以下步骤操作:

  1. 备份原始头文件

    bash复制cp SMM_MPS2.h SMM_MPS2.h.bak
    
  2. 修改寄存器定义
    使用文本编辑器打开SMM_MPS2.h,找到FPGA寄存器定义部分,将偏移量修改为:

    c复制#define FPGA_PRESCALE    (0x01C)
    

内容推荐

已经到底了哦
已经到底了哦