【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906

一、 RCW

复位配置字 RCW ( Reset Configuration Word ) 存储在非易失性存储器中 ( 如:NOR、QSPI、SDHC )。它提供了灵活性来适应大量的配置参数来支持 SoC 的高度可配置性。配置参数一般包括:
① 各个模块的频率,包括磁芯、DDR 等
② I/O 引脚 pin-muxing 配置
③ 其他 SoC 配置

RCW 提供以下功能:
① 引导位置为 NOR flash
② 使能 4 个 UART,无需流控制
③ 使能 I2C1, I2C2, I2C3, I2C4, SDHC, IFC, PCIe, SATA
在一些实验中我们需要通过修改 RCW 配置来达到目的,这里就说明一下怎样来修改 RCW 配置并使其编译成功生效

二、组建局域网

1.给虚拟机分配 IP 地址
先对虚拟机网络进行设置选择桥接有线网卡方式,设置完后分配并查看 Ubuntu 的 IP 地址。

sudo ifconfig enp0s3 192.168.1.1
ifconfig

【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906_第1张图片
2.设置开发板 tftp 网络环境
① 设置开发板硬件开关从 SD 卡启动
从启动的 log 中可以看到

Board: LS1043ARDB, boot from SD

② 设置服务器 IP 地址

=> setenv serverip <ipaddress1>
For example:
=> setenv serverip 192.168.1.1

③ 将 ethact 和 ethprime 设置为连接到 TFTP 服务器的以太网接口

=> setenv ethprime <name of interface connected to TFTP server>
For example:
=> setenv ethprime FM1@DTSEC1
=> setenv ethact <name of interface connected to TFTP server>
For example:
=> setenv ethact FM1@DTSEC1

端口名地址映射
【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906_第2张图片
④ 给开发板分配 IP 地址

=> setenv ipaddr 192.168.1.2
=> setenv netmask 255.255.255.0

⑤ 保存设置

=> saveenv

⑥ ping 服务器

=> ping $serverip
For example:
=> ping 192.168.1.1

可以看到

Using FM1@DTSEC1 device
host 192.168.1.1 is alive

则 tftp 网络环境搭建完成,可以使用 tftp 传输文件

三、修改并编译 RCW 文件

1.RCW 源文件位置: /dana/flexbuild_lsdk1906_update_290719/packages/firmware/rcw/ls1043ardb/RR_FQPP_1455
【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906_第3张图片
2.文件命名约定

rcw_x.rcw
rcw_x_bootmode.rcw
rcw_x_specialsetting.rcw
x = Core frequency
bootmode = bootmode:SD/NAND/NOR and so on.
specialsetting = special setting:
                  lpuart:used for lpuart
                  sben:Secure boot
For example,
      rcw_1600.rcw means rcw for core frequency of 1600MHz with nor boot.

      rcw_1600_sd.rcw means rcw for core frequency of 1600MHz with sd boot.

      rcw_1600_lpuart.rcw means rcw for core frequency of 1600MHz with nor boot special for lpuart.

For more information please refer to the comments in rcw file.

3.修改 RCW 文件

vim rcw_1600_sdboot.rcw

可以看到相关 RCW 配置

#include <../ls1043aqds/ls1043a.rcwi>      //定义了 512 位的字段和字段名

SYS_PLL_RAT=4
MEM_PLL_RAT=16
CGA_PLL1_RAT=16
CGA_PLL2_RAT=10
SRDS_PRTCL_S1=5205
FM1_MAC_RAT=1
SRDS_PLL_REF_CLK_SEL_S1=2
SRDS_DIV_PEX=1
DDR_FDBK_MULT=2
DDR_REFCLK_SEL=1
PBI_SRC=6
IFC_MODE=64
HWA_CGA_M1_CLK_SEL=6
DRAM_LAT=1
SYS_PLL_SPD=1
UART_BASE=7
IRQ_OUT=1
TVDD_VSEL=0
DVDD_VSEL=2
EVDD_VSEL=2
IIC2_EXT=0
SYSCLK_FREQ=600
HWA_CGA_M2_CLK_SEL=1

#include <../ls1043aqds/atf_address.rcw>
#include <../ls1043aqds/cci_barrier_disable.rcw>
#include <../ls1043aqds/usb_phy_freq.rcw>

在 QorIQ LS1043A Reference Manual 第四章中有关于 RCW 字段的描述
例如:
【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906_第4张图片
可以发现,我们需要修改 RCW 的第 439-440 位,字段名称为 EVDD_VSEL,作用为配 置 EVDD IO 域的电压。
在源文件中:EVDD_VSEL=2
可知,我们源码中的 RCW 字段为 EVDD_VSEL 设置的参数为二进制的 10 ,即 EVDD IO 域的电压为 3.3 V
可以通过 u-boot 启动 log 读出 EVDD_VSEL 是否配置为 10

U-Boot 2019.04-dirty (Jan 13 2020 - 16:10:10 +0800)

SoC:  LS1043AE Rev1.1 (0x87920011)
Clock Configuration:
       CPU0(A53):1600 MHz  CPU1(A53):1600 MHz  CPU2(A53):1600 MHz
       CPU3(A53):1600 MHz
       Bus:     400  MHz  DDR:     1600 MT/s  FMAN:     500 MHz
Reset Configuration Word (RCW):
       00000000: 08100010 0a000000 00000000 00000000
       00000010: 14550002 80004012 60040000 c1002000
       00000020: 00000000 00000000 00000000 00038800
       00000030: 00000000 00001100 00000096 00000001
Model: LS1043A RDB Board
Board: LS1043ARDB, boot from SD

首先通过上文我们知道, EVDD_VSEL 字段处于 RCW 的第 439-440 位。而上图中 RCW 每一行前面显示的就是 RCW 的内存地址,每一个内存地址中存储着 8 位数据。所以我们首先计算第 439-440 位处于 RCW 内存地址中的位置:439/8=54
那么好了,我们取出地址 54,55 的数据:
00000030: 20044500 00001100 00000096 00000001
因为 RCW 是 16 进制显示,则将 1100 化成二进制为:
0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
接下来我们就需要知道 439-440 处于上面的哪两位。首先确认上面数据的第一位处于
RCW 的第几位:54*8=432
则我们可以知道上面数据的对应关系为:在这里插入图片描述可见,439-440 的值为 10,与代码中设置相符。接下来我们在源码中修改 LS1043A 的 RCW 文件并修改 EVDD_VSEL=0
4.编译 RCW 文件

flex-builder -c rcw -m ls1043ardb     //编译 RCW 文件生成 rcw_*_sdboot.bin 固件
flex-builder -i mkfw -m ls1043ardb -b sd  //打包固件

编译后可以使用十六进制文本打开编译生成的二进制文件包对比,看是否修改编译成功
【NXP DN 系列】修改并编译生效 RCW 配置 For ND LS1043ARDB LSDK1906_第5张图片

四、 更新 SD 卡固件

我们需要把修改编译好的固件更新到 SD 卡中,使用 tftp 方式更新
1.下载固件并写入到 SD 卡中

=> tftp a0000000 firmware_ls1043ardb_uboot_sdboot.img
=> mmc write a0000000 8 1fff8

过程 log

=> tftp a0000000 firmware_ls1043ardb_uboot_sdboot.img
Using FM1@DTSEC1 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.3
Filename 'firmware_ls1043ardb_uboot_sdboot.img'.
Load address: 0xa0000000
Loading:
#################################################################               #################################################################
         /*    省略 …… */        
###############################################
         3.4 MiB/s
done
Bytes transferred = 45532708 (2b6c624 hex)
=> mmc write a0000000 8 1fff8
MMC write: dev # 0, block # 8, count 131064 ... 131064 blocks written: OK

2.重启从 SD 卡引导启动

=> cpld reset sd

3.对比 log 是否修改编译引导生效

U-Boot2019.04-dirty (Jan 14 2020 - 09:30:07 +0800)

SoC:  LS1043AE Rev1.1 (0x87920011)
Clock Configuration:
       CPU0(A53):1600 MHz  CPU1(A53):1600 MHz  CPU2(A53):1600 MHz
       CPU3(A53):1600 MHz
       Bus:     400  MHz  DDR:     1600 MT/s  FMAN:     500 MHz

Reset Configuration Word (RCW):
       00000000: 08100010 0a000000 00000000 00000000
       00000010: 14550002 80004012 60040000 c1002000
       00000020: 00000000 00000000 00000000 00038800
       00000030: 00000000 00001000 00000096 00000001
Model: LS1043A RDB Board
Board: LS1043ARDB, boot from SD

使用之前的方法计算可以得出 EVDD_VSEL 字段配置为 00 也就是 1.8v

五、补充

在 RCW 源文件中虽然有定义 512 位的字段和字段名但是并没有将所有的字段定义列举 出来,有些字段是保留项省略了,如果需要更改这些字段可以根据 QorIQ LS1043A Reference Manual 中第四章节中的 RCW 字段表格中描述的进行修改,按照前面的格式添加到源文件中。
QorIQ LS1043A Reference Manual 下载地址:
QorIQ LS1043A Reference Manual

注:

未经本人允许,不得转载!谢谢!

你可能感兴趣的:(LS1043ARDB,Digital,Network,NXP,linux,嵌入式,nxp,网关)