Skip to content

rwip构建

O2C14 edited this page Jul 22, 2025 · 1 revision

构建RWIP固件的步骤

看完还是不懂的就去参考仓库里面文件.

1. 生成缺失的头文件

首先是制作一个寄存器列表, 这个可以参考reglist_btdm.txt. 例如:

# Common
    ../../ip/sch/import/RW-EM-ET.xls                 EM       0x40040000 EM EM long ET trace
    ../../modules/rwip/import/reg/RW-DM-CORE-REG.xls IPCORE   0x40020000 REG_IP IP long
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-REG.xls   IPCORE   0x40000000 REG_IP IP long BTS

# BLE
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-REG.xls   BLECORE  0x40000000 REG_BLE BLE long
    
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long CS trace
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long TX_DESC
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long RX_DESC trace
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long RX_CTE_DESC trace
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long WPAL
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long RAL

    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long RX_ISO_DESC 
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long TX_ISO_DESC
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long RX_ISO_BUF 
    ../../ip/ble/ll/import/reg/RW-BLE-CORE-EM.xls    EM_BLE   0x40040000 EM_BLE EM_BLE long TX_ISO_BUF

# BT
    ../../ip/bt/import/reg/RW-BT-CORE-REG.xls   BTCORE   0x40010000 REG_BT BT long
    ../../ip/bt/import/reg/RW-BT-CORE-REG.xls   BTCORE   0x40010000 REG_BT BT long  ESCO
    ../../ip/bt/import/reg/RW-BT-CORE-REG.xls   BTCORE   0x40010000 REG_BT BT long  AUDIO
    ../../ip/bt/import/reg/RW-BT-CORE-EM.xls    EM_BT    0x40040000 EM_BT EM_BT long CS
    ../../ip/bt/import/reg/RW-BT-CORE-EM.xls    EM_BT    0x40040000 EM_BT EM_BT long TXDESC
    ../../ip/bt/import/reg/RW-BT-CORE-EM.xls    EM_BT    0x40040000 EM_BT EM_BT long RXDESC

然后需要调用reg_xls2h, 可以使用如下脚本(需要放在reg_xls2h目录中).

import subprocess,re,os
import reg_xls2h


reg_list = []
reg_build_dir = os.path.abspath("reg_h")

with open("reglist_btdm.txt") as f:
    reg_list = f.readlines()

ip_addr = 0x28000000
bt_addr = 0x28000400
ble_addr = 0x28000800
em_addr = 0x28010000


xls_path = "" #需要补齐
for line in reg_list:
    # check that the format is met : .* blockname 0xXXXXXX (short|long) (sheetname)
    match = re.match("(.+)\s+([^ ]+)\s+(0x[0-9a-fA-F]+)\s+(.+)\s+(.+)\s+(short|long)\s*(\w+)?\s*(trace)?$", line)
    if match == None:
        continue
    xlsname = match.group(1).strip().replace("../../",xls_path)
    blockname = match.group(2)
    regaddr = match.group(3)

    #自动替换地址
    if regaddr == "0x40040000":
        regaddr = hex(em_addr)
    elif regaddr == "0x40020000":
        regaddr = hex(ip_addr)
    elif regaddr == "0x40000000":
        regaddr = hex(ble_addr)
    elif regaddr == "0x40010000":
        regaddr = hex(bt_addr)

    regaccess = match.group(4)
    regprefix = match.group(5)
    regformat = match.group(6)
    sheetname = "Registers"
    hname = os.path.join(reg_build_dir, "reg_" + blockname.lower())
    _hname = os.path.join(reg_build_dir, "_reg_" + blockname.lower())
    if match.group(7) != None:
        sheetname = match.group(7).strip()
        if sheetname != 'RF':
            hname += '_' + sheetname.lower()
            _hname += '_' + sheetname.lower()
    
    hname += ".h"
    _hname += ".h"

    regs = reg_xls2h.reg_xls2h(xlsname, sheetname, regaccess, regprefix, verbose=False)
    regs.read_xls()
    regs.gen_header("", regaddr, hname, False,
                        regformat == "long")

其中ip_addr bt_addr ble_addr em_addr需要通过逆向获得. 这个不属于构建步骤所以这里不展开讲.

xls_path是ip文件夹所在路径.

reg_build_dir是输出头文件的目录.

2. 配置

从这里开始就是正常的编译步骤了.

rwip_config.h, rwbt_config.h, rwble_config.h, 包含了所有的配置和注释,这些配置都可以通过add_definitions更改.

只有下面的配置需要手动修改

BLE_PHY_1MBPS_SUPPORT
BLE_PHY_2MBPS_SUPPORT
BLE_PHY_CODED_SUPPORT
BLE_STABLE_MOD_IDX_TX_SUPPORT
BLE_STABLE_MOD_IDX_RX_SUPPORT
BLE_PWR_CLASS_1_SUPPORT

3. 构建

文件路径分为四类: ip, modules, reg_h, ext.

ip中的文件需要全部构建.

modules中 aes,ke,rwip,ecc_p256,h4tl,common 都是必要的,剩下的都不推荐.但是nvds的头文件是必要的.

reg_h用于存放寄存器头文件

ext存放以下文件

arch.h
compiler.h
dma.h
led.h
ll.h
plf.h
plf_data_path.h
reg_access.h

这些文件只需要从其他地方复制. 其中ll.h与指令集有关.

Clone this wiki locally