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

转载地址:https://blog.csdn.net/dana_xiong/article/details/113592121

一、 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
 
 
  • 1

在这里插入图片描述
2.设置开发板 tftp 网络环境
① 设置开发板硬件开关从 SD 卡启动
从启动的 log 中可以看到

Board: LS1043ARDB, boot from SD
 
 

    ② 设置服务器 IP 地址

    => setenv serverip <ipaddress1>
    For example:
    => setenv serverip 192.168.1.1
     
     
    • 1
    • 2

    ③ 将 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
     
     
    • 1
    • 2
    • 3
    • 4
    • 5

    端口名地址映射
    在这里插入图片描述
    ④ 给开发板分配 IP 地址

    => setenv ipaddr 192.168.1.2
    => setenv netmask 255.255.255.0
     
     
    • 1

    ⑤ 保存设置

    => saveenv
     
     

      ⑥ ping 服务器

      => ping $serverip
      For example:
      => ping 192.168.1.1
       
       
      • 1
      • 2

      可以看到

      Using FM1@DTSEC1 device
      host 192.168.1.1 is alive
       
       
      • 1

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

      三、修改并编译 RCW 文件

      1.RCW 源文件位置: /dana/flexbuild_lsdk1906_update_290719/packages/firmware/rcw/ls1043ardb/RR_FQPP_1455
      在这里插入图片描述
      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 字段的描述
        例如:
        在这里插入图片描述
        可以发现,我们需要修改 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  //打包固件
         
         
        • 1

        编译后可以使用十六进制文本打开编译生成的二进制文件包对比,看是否修改编译成功
        在这里插入图片描述

        四、 更新 SD 卡固件

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

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

        过程 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

          注:

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

          • 2
            点赞
          • 6
            收藏
            觉得还不错? 一键收藏
          • 1
            评论
          21043779_csharp_opcclient_rcw_code.zip_opc是一个C#语言编写的OPC客户端的代码包。OPC(OLE for Process Control,过程控制的OLE)是一种标准化的通信协议,用于在工业自动化系统中实现设备之间的数据交换和通信。 这个代码包包含了一个C#语言编写的OPC客户端的实现代码。在这个代码包中,我们可以看到一些主要的功能和类,用于与OPC服务器进行连接、读取数据、写入数据等操作。这些代码可以帮助开发人员快速实现自己的OPC客户端应用。 在使用这个代码包时,我们可以根据自己的需要进行一些配置修改。首先,我们需要配置OPC服务器的相关信息,如服务器IP地址、端口号、用户名和密码等。然后,我们可以根据需要进行数据的读取和写入操作,并对读取到的数据进行相应的处理和展示。 这个代码包使用了C#语言来实现,所以在使用之前,我们需要先安装相应的开发环境和依赖库。同时,我们还需要了解一些OPC的基本概念和原理,以便更好地理解和使用这个代码包。 总而言之,21043779_csharp_opcclient_rcw_code.zip_opc是一个用于实现OPC客户端的C#代码包,可以帮助开发人员快速构建自己的OPC客户端应用。通过这个代码包,我们可以连接OPC服务器,读取和写入数据,并对数据进行相应的处理和展示。在使用之前,我们还需要进行一些配置和准备工作。

          “相关推荐”对你有帮助么?

          • 非常没帮助
          • 没帮助
          • 一般
          • 有帮助
          • 非常有帮助
          提交
          评论 1
          添加红包

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

          当前余额3.43前往充值 >
          需支付:10.00
          成就一亿技术人!
          领取后你会自动成为博主和红包主的粉丝 规则
          hope_wisdom
          发出的红包
          实付
          使用余额支付
          点击重新获取
          扫码支付
          钱包余额 0

          抵扣说明:

          1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
          2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

          余额充值