开发者分享|HPM6750 从 XPI0 CB 端口启动

2023-10-20
浏览量:
98

1

背 景

在我的某个项目中由于希望把板子做的小一点,所以选择了 BGA196 封装的 HPM6750IAN2 芯片,在画板子的过程中,注意到相比 BGA289 封装的 HPM6750IVM2 芯片,其并没有引出 XPI0 CA 端口的引脚,如下图所示。所以最后选择了 XPI0 的 CB 端口用于连接 NOR Flash。

部分引脚复用功能(来源:HPM6750数据手册)


XPI 部分原理图


2

问 题

在 HPM6750EVKMINI 评估板中使用了 XPI0 CA 端口作为连接串行 NOR Flash 的引脚(芯片的默认配置),在芯片上电启动的过程中,芯片内部的 BootROM 会根据 OTP 配置初始化 XPI 控制器,从 Flash 0x400 的地址读取 XPI NOR 配置选项,并按照读取的配置选项将 XPI 配置为指定的工作模式,然后重新检测 Flash 是否存在,从 Flash 中加载镜像完成剩余启动步骤。

因此为了实现从 XPI0 CB 端口启动,我们需要修改 OTP 中的对应字段和启动镜像中的 XPI NOR 配置选项。


3

OTP 烧写

通过查阅 HPM6750 的参考手册,发现控制 BootROM 启动时指定 Flash 连接方式的为以下几个字段:


因此在本例中,需要仅需修改 XPI_PORT_SEL 字段为 1,让 BootROM 从 CB_CS0 端口启动即可。


将 BOOT 拨码开关调至 BOOT_MODE[1:0]=0b10,以 ISP 模式启动,将 USB0 连接至 PC,然后打开 HPMicro 量产工具,选择对应的 USB 设备点击 连接,连接成功后如下图所示。


注意:
OTP 操作需谨慎!!!
OTP 操作需谨慎!!!
OTP 操作需谨慎!!!

OTP 操作 ⻚⾯中,点击 刷新 读取当前芯⽚中 OTP 的数据,看到 Word 24 的值为 0x00000000 ,也就是从 XPI0 CA 端⼝的第⼀组引脚启动。


切换至 写视图,点击 添加 Words,在弹出的对话框中按照下图输入,即:将 Word 24 的 bit 6 置 1,从 CB_CS0 端口启动。点击确定后,再次确认数据是否有误,确认无误后点击 写入


写入完成后切换回 写视图,点击 刷新,可以看到 Word 24 已经变为期望值。

将拨码开关拨回 XPI NOR 启动后复位芯片,可使用逻辑分析仪观察 XPI0_CB_SCLK 引脚在上电时的电平,如可以观察到对应的时钟信号,证明 OTP 设置已经生效。


4

修改 XPI NOR 配置选项

在 BootROM 检测到 Flash 后,会从 0x400 读取 XPI NOR 配置选项重新配置 XPI,为了确保 XPI 重新配置后仍能检测到 Flash,需要对默认配置进行修改。根据参考手册,配置选项的定义如下:


当我们使用 CMake 配置项目,并设置 CMAKE_BUILD_TYPEflash_xip 时,生成的 SES(Segger Embedded Studio)工程会使用 flash_xip.icf 链接脚本,以将各个 section 链接至 Flash 中。可以在如下菜单中打开链接脚本。


flash_xip.icf中,可以看到在 XPI0 的基地址偏移 0x400 处定义了存放 NOR_CFG_OPTION 的区域,对应的 section 为 .nor_cfg_option


使用快捷键 Ctrl+Shift+F 全局搜索 .nor_cfg_option,可以在 board.c 中找到对应的配置选项。


为了避免修改 SDK 中的文件,我选择在项目文件夹下新建一个 board文件夹,并复制 hpm6750evkmini 的板级文件,重新命名为 myboard,此时项目结构如下:

├── src/

│   ├── board/

│   │   └── myboard/

│   │       ├── CMakeLists.txt

│   │       ├── board.c

│   │       ├── board.h

│   │       ├── myboard.yaml

│   │       ├── pinmux.c

│   │       └── pinmux.h

│   └── app.c

└── CMakeLists.txt


在 CMake 初始化时使用 BOARD_SEARCH_PATH 将 board 文件夹添加至搜索路径中(需使用 SDK 1.2.0): 

cmake -Bbuild -DBOARD=myboard -DBOARD_SEARCH_PATH=./src/board -GNinja -DCMAKE_BUILD_TY
PE=flash_xip


使用 SES 打开工程,可以看到 board.c 被添加到项目中。


同样的,在 XPI 配置选项中也要使用 XPI0 CB_CS0 端口,所以需要将 Header[3:0] 改为 2Option[11:8] 改为 1。即:

__attribute__ ((section(".nor_cfg_option"))) const uint32_t option[4] = {0xfcf90002, 0
x00000007, 0x00000100, 0x0};


修改完成后重新进行编译,得到生成的 .bin文件。


5

烧 录

使用 HPMicro Programmer 进行烧录前,需要将 Connection Selection改为 CB_CS0,同时为了确保后续 Flash 能切换至四线模式(Quad SPI),还需要根据使用的 Flash 设置 Quad Enable Sequence,借助 BootROM 将 Flash 的 QE 标志位置位。这里我使用的是 GD25Q40C 系列 Flash,查阅 datasheet 可知 QE 位于 Status Register 2 的 bit1,因此这里我选择 At bit1 in Status Register2。由于 QE非易失 的,掉电后数据不会丢失,因此我们仅需在烧录时设置一次,在 XPI NOR 配置选项中可以不用设置 Quad Enable Sequence 字段。

Status Register 中的 QE 位



选择编译生成的.bin 文件后,程序会自动设置烧写地址,随后点击烧录。烧录成功后恢复启动模式拨码开关,然后复位芯片,正常情况下程序就会运行了。


 

END



以上内容来自先楫开发者的原创分享。

我们始终相信开发者共创的力量。先楫社区坚持开源共享、互惠互利,贴近每一个开发者,一步一个脚印,一点一滴积累,为成为更好的我们而不断努力。


心之所向,锐意进取,星辰大海,恣意成长。


MCU生态建设需要您的贡献与支持!欢迎广大爱好者和开发者踊跃投稿,供稿请联系sha.li@hpmicro.com。