-
Notifications
You must be signed in to change notification settings - Fork 3
rwip构建
O2C14 edited this page Jul 22, 2025
·
1 revision
看完还是不懂的就去参考仓库里面文件.
首先是制作一个寄存器列表, 这个可以参考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是输出头文件的目录.
从这里开始就是正常的编译步骤了.
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
文件路径分为四类: 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与指令集有关.