Files
2025-11-08 13:26:19 +08:00

150 lines
6.2 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 简介
本demo介绍如何以xip方式运行eth tcp的收发, 特点为:
1)sf core的程序xip运行在flash上;
2)xip程序启动前需先在iram中运行sf core的bootloader程序对xspi以及flash进行初始化然后启动sf的XIP程序;
3)bootloader程序作为sf core的boot package由ROM启动或由IAR IDE环境调试启动,
sf的XIP程序以固定地址的形式下载到所指定的绝对地址, 下载方法见调试流程;
4)storage layout:
hyperflash:
0x100c0000 boot package (sf bootloader程序 + BPT)
0x10140000 sf XIP程序
Norflash:
0x10008000 boot package (sf bootloader程序 + BPT)
0x10140000 sf XIP程序
## 硬件连接
- e3_176_ref参考板
- Jlink debugger
- 连接UART用于log输出
- SSCOM工具
##配置说明
-控制器配置使能了两路ETH控制器默认使用ETH2通信。
-ip设置ETH2的ip必须和PC以太网的ip在同一个网段假设PC的ip为10.18.252.79ETH2的ip设置为10.18.252.70。
## 测试方法
使用以下工具编译本demo并生成可执行文件
- IAR for ARM
可以完成demo Debug模式的调试与FlashDebug模式的下载
- SEGGER Embedded Studio for ARM
可以完成demo Debug模式的调试与FlashDebug模式的下载
## Demo IAR工程调试流程说明
1. 使用JLINK连接到开发板拨码到0b1110调试模式启动开发板
(或者0b0000保证此时Jlink可以连接即可);
2. 打开sfXIP工程并编译
3. 打开bootloader工程并切换到FlashDebug配置;
0)点击编译此时IAR会把SFS + bootloader程序 + sfXIP程序整体编译为一个elf文件;
1)点击Erase memory 先擦除flash推荐但非必须);
2)点击Download active application按钮IAR flashloader下载上述elf到flash中;
3)以0b0000模式启动开发板本Demo执行完成后打开SSCOM软件端口号选择为TCPServer
本地地址和函数netdemo_connect_server参数一致。
使用JLINK下载镜像到e3_176_ref开发板并启动调试。
使用SSCOM软件给开发板发送数据开发板通过uart打印接收到的数据。
该demo会发送tcp报文SSCOM软件窗口可以查看接收到的数据。
4. 将bootloader工程切换到Debug配置点击Download and Debug按钮,即可对bootloader工程进行调试;
(此时由于没有配置flashloader, download and Debug仅下载bootloader程序至iram)
5. 在bootloader程序启动sf之后, 打开sf的XIP程序
选择Attach to Running Target, attach到sf的XIP程序进行调试;
6. 如果需要修改sf的XIP程序可以直接使用debug and download 进行下载调试。
## Demo SES工程调试流程说明
1. 使用JLINK连接到开发板拨码到0b1110调试模式启动开发板
(或者0b0000保证此时Jlink可以连接即可);
2. 打开bootloader XIP工程并编译
3. 打开sf XIP工程并切换到FlashDebug配置;
0)点击编译;
1)点击Target菜单中的Download sfSES会把SFS、bootloader程序、sf XIP程序分别到flash中;
2)以0b0000模式启动开发板本Demo执行完成后打开SSCOM软件端口号选择为TCPServer
本地地址和函数netdemo_connect_server参数一致。
使用JLINK下载镜像到e3_176_ref开发板并启动调试。
使用SSCOM软件给开发板发送数据开发板通过uart打印接收到的数据。
该demo会发送tcp报文SSCOM软件窗口可以查看接收到的数据。
4. 在bootloader工程对Project窗口中的Project 'sf'点击右键在弹出的Debug菜单中选择
Start Debugging即可对bootloader工程进行调试;
(此时由于没有配置flashloader, Start Debugging仅下载bootloader程序至iram)
5. sf工程切换到Debug配置对Project窗口中的Project 'sf'点击右键在弹出的Debug菜单中选择
Start Debugging即可对sf工程进行调试;
(flashloader先把程序下载到flash再以XIP的方式进行调试)
注意:
如果需要修改Flash的类型需根据使用的Flash是否为HyperFlash在bootloader工程配置中增加或者删除
"CONFIG_HYPERBUS_MODE=1"的宏定义。
## bootloader程序的执行步骤
int main(void)
{
//xspi reset
board_reset_init();
//sf core的时钟初始化reset
sdrv_ckgen_init(&g_clock_config);
//sf core的管脚初始化
sdrv_pinctrl_init(NUM_OF_CONFIGURED_PINS, g_pin_init_config);
//sf core的打印串口
board_debug_console_init();
//xspi以及flash初始化
board_norflash_init();
//bootloader初始化完成打印
ssdk_printf(SSDK_CRIT, "SSDK E3 Bootloader Success!\r\n");
udelay(1000*100);
//启动sf eth XIP程序
sdrv_core_force_remap(SDRV_REMAP_SF, SF_MEM_BASE);
for (;;);
}
## 如何为USB下载形成pac文件
在ssdk的根目录下打开cmd执行环境执行如下命令json默认为IAR工程文件SES工程使用xxx_ses.json文件
Hyperflash:
prebuilts\windows\python-3.7.0\python.exe tools\genpac.py -f [路径]\boards\e3_176_ref\app_demo\eth-xip\pac_config(_ses).json
Norflash:
prebuilts\windows\python-3.7.0\python.exe tools\genpac.py -f [路径]\boards\e3_176_ref\app_demo\eth-xip\pac_config_ospi(_ses).json
注意:
部分part需要根据实际情况修改json文件中downloader_path和dloader_entry默认按照part 3110配置。
以part 3210flash类型hyperflash为例downloader_path修改为"downloader_path": "devices\E3210\dloader\e3_176_ref_hyperflash.bin"
当part为3104、3106、3206时dloader_entry需修改为"dloader_entry": "0x504000"sf_entry需修改为"sf_entry": "0x504000",
## 如何将整个文件的函数放在ram上
IAR工程
在icf文件中将section .text object file_exe_in_ram.o 放在 block RAM_TEXT 和 initialize by copy 中
例:
define block RAM_TEXT with alignment = 4 { section .ram.text, section .textrw, section .text object file_exe_in_ram.o};
initialize by copy { section .tcmcode, section .tcmdata, section .ram.text, section .textrw, section .text object file_exe_in_ram.o};
SES工程
在ld文件中将file_exe_in_ram.o的.text段排除在rom之外并放入ram中
例:
.text : {
KEEP(*(.intvec))
*(.sram.text.glue_7* .gnu.linkonce.t.*)
*(EXCLUDE_FILE(*file_exe_in_ram.o) .text*)
} > ROM
.ram.text : AT (__ram_text_load_start) ALIGN(4) {
KEEP (*(.ram.text*))
*file_exe_in_ram.o(.text*)
} > RAM