新增所有文件

This commit is contained in:
2025-10-25 21:11:06 +08:00
parent 8cc4755d15
commit 3134504178
8414 changed files with 2995287 additions and 5 deletions

View File

@@ -0,0 +1,149 @@
## 简介
本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