150 lines
6.2 KiB
Plaintext
150 lines
6.2 KiB
Plaintext
## 简介
|
||
|
||
本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.79,ETH2的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 sf,SES会把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 3210,flash类型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
|