0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

在IWR1642/AWR1642上修改L3 RAM的分布

星星科技指導員 ? 來源:TI ? 作者:TI ? 2023-04-03 09:24 ? 次閱讀

本文以AWR1642為例,介紹了在AWR1642 ES2.0 EVM上基于mmWave SDK 2.1的mmw demo下如何修改代碼來改變L3 RAM分布的具體流程和步驟。

IWR1642/AWR1642上總共有768KB L3 RAM。這768KB L3內(nèi)存按照128KB一個bank,分成了6個bank(bank6~bank1),其中bank1到bank3是專門給DSS使用的。剩下的3個bank可以配置為DSS,R4F TCMA,R4F TCMB,或者為BSS使用。用戶可以根據(jù)自己軟件的需要,修改各個模塊使用L3 RAM的大小。默認代碼下所有共享的3個L3 bank都是給DSS使用的。本次測試示例修改了其中一個共享的L3 RAM bank(128KB)給MSS的TCMA使用。

poYBAGQqKsKAGq6iAAAeyScpG1o213.png

圖1 IWR1642/AWR1642 L3 RAM

在mmWave SDK 2.1里面提供了一個方便更改L3 RAM map的接口,環(huán)境變量MMWAVE_SDK_SHMEM_ALLOC。但是在某些情況可能僅僅修改這個環(huán)境變量還不充足。下面步驟里有具體說明。

MMWAVE_SDK_SHMEM_ALLOC
Bit 31~24 23~16 15~8 7~0
含義 分配給BSS使用的L3 RAM bank數(shù)量 分配給MSS TCMB使用的L3 RAM bank數(shù)量 分配給MSS TCMA使用的L3 RAM bank數(shù)量 分配給DSS使用的L3 RAM bank數(shù)量(包含DSS專用的bank數(shù))

表1環(huán)境變量MMWAVE_SDK_SHMEM_ALLOC的定義

步驟一:以本次測試示例為例,需要修改C:timmwave_sdk_02_01_00_04packagesticommonmmwave_sdk_xwr16xx.mak里環(huán)境變量MMWAVE_SDK_SHMEM_ALLOC的定義。但是里面并沒有本次測試需要的增加一個bank給MSS TCMA的代碼,所以需要添加相關代碼。因為一個bank給MSS TCMA,所以MMWAVE_SDK_SHMEM_ALLOC 的bit[15:8]=1,bit[15:8]=5。例如下面黃底加粗部分代碼。

MMWAVE_SDK_SHMEM_ALLOC=0x00000105

ifeq ("$(MMWAVE_SDK_SHMEM_ALLOC)", "")

SHMEM_ALLOC = 0x00000006 # default case

MMWAVE_L3RAM_NUM_BANK = 6

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000006) # default case

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 6

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000105) # more MSS TCMA

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 5

MMWAVE_SHMEM_TCMA_NUM_BANK = 1

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00000204) # scenario where more MSS code space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 4

MMWAVE_SHMEM_TCMA_NUM_BANK = 2

MMWAVE_SHMEM_TCMB_NUM_BANK = 0

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00010005) # scenario where more MSS .bss space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 5

MMWAVE_SHMEM_TCMA_NUM_BANK = 0

MMWAVE_SHMEM_TCMB_NUM_BANK = 1

else ifeq ($(MMWAVE_SDK_SHMEM_ALLOC), 0x00010104) # scenario where more MSS code and MSS .bss space is needed

SHMEM_ALLOC = $(MMWAVE_SDK_SHMEM_ALLOC)

MMWAVE_L3RAM_NUM_BANK = 4

MMWAVE_SHMEM_TCMA_NUM_BANK = 1

MMWAVE_SHMEM_TCMB_NUM_BANK = 1

else

$(error Invalid SHMEM_ALLOC setting! Please check the environment variable MMWAVE_SDK_SHMEM_ALLOC.)

endif

修改了MMWAVE_SDK_SHMEM_ALLOC的定義,在代碼里面有三處相關代碼會連動修改。

1. 一個是link文件里對L3段大小的定義,以本例子為例,是C:timmwave_sdk_02_01_00_04packagestiplatformxwr16xx目錄下的cmd文件。

r4f_linker.cmd

PROG_RAM (RX) : origin=0x00000100 length=0x0003FF00+(MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0x0005FF00

DATA_RAM (RW) : origin=0x08000000 length=0x00030000+(MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0x00030000

L3_RAM (RW) : origin=0x51000000 length=MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例修改后length=0xA0000

注意:為了驗證測試,在測試代碼中單獨把擴展出來的一塊分出來,便于測試代碼加入。在實際應用的代碼里面不需要對r4f_linker.cmd文件做修改。

r4f_linker.cmd修改為:

MEMORY{

PROG_RAM (RX) : origin=0x00000100 length=0x0003FF00

PROG_RAM2 (RX): origin=0x00040000 length=0x0001FFFF

}

SECTIONS{

my_section : {} > PROG_RAM2

}

c674x_linker.cmd

#define MMWAVE_L3RAM_SIZE (MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE) –》本例為例MMWAVE_L3RAM_SIZE 值為0xA0000

MEMORY

{

PAGE 0:

L3SRAM: o = 0x20000000, l = MMWAVE_L3RAM_SIZE

PAGE 1:

L3SRAM: o = 0x20000000, l = MMWAVE_L3RAM_SIZE

}

2. 一個是sys_common頭文件里和L3, TCMA and TCMB 大小的相關定義。以本文為例是C:timmwave_sdk_02_01_00_04packagesticommonsys_common_xwr16xx_mss.h文件。相關內(nèi)如如下。

#define SOC_XWR16XX_MSS_SHMEM_TCMA_NUM_BANK MMWAVE_SHMEM_TCMA_NUM_BANK

#define SOC_XWR16XX_MSS_SHMEM_TCMA_SIZE MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE /* Extended on Share Memory */

#define SOC_XWR16XX_MSS_TCMA_SIZE MMWAVE_SHMEM_TCMA_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE+0x40000U

#define SOC_XWR16XX_MSS_SHMEM_TCMB_NUM_BANK MMWAVE_SHMEM_TCMB_NUM_BANK

#define SOC_XWR16XX_MSS_SHMEM_TCMB_SIZE MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE /* Extended on Share Memory */

#define SOC_XWR16XX_MSS_TCMB_SIZE MMWAVE_SHMEM_TCMB_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE+0x30000U /* Extended on Share Memory + Default 192KB */

#define SOC_XWR16XX_MSS_L3RAM_NUM_BANK MMWAVE_L3RAM_NUM_BANK

#define SOC_XWR16XX_MSS_L3RAM_SIZE MMWAVE_L3RAM_NUM_BANK*MMWAVE_SHMEM_BANK_SIZE

3. 第三個是在ccsdebug和mmw demo的makefile文件里的相關定義。

C:timmwave_sdk_02_01_00_04packagestiutilsccsdebugmakefile

all: mssCCSDebug dssCCSDebug

@echo 'Built the CCS Debug MSS & DSS. Preparing the METAIMAGE BIN ...'

@$(GENERATE_METAIMAGE) $(CCS_DEBUG_BIN) $(SHMEM_ALLOC) $(CCS_DEBUG_MSS_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(CCS_DEBUG_DSS_OUT)

@$(GENERATE_HS_METAIMAGE) $(CCS_DEBUG_SECURE_BIN) $(SHMEM_ALLOC) $(CCS_DEBUG_MSS_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(CCS_DEBUG_DSS_OUT) $(MMWAVE_SECDEV_HSIMAGE_CFG)

C:timmwave_sdk_02_01_00_04packagestidemoxwr16xxmmwmakefile mmwDemo: mssDemo dssDemo

@$(GENERATE_METAIMAGE) $(MMW_DEMO_BIN) $(SHMEM_ALLOC) $(MSS_MMW_DEMO_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(DSS_MMW_DEMO_OUT)

@$(GENERATE_HS_METAIMAGE) $(MMW_DEMO_SECURE_BIN) $(SHMEM_ALLOC) $(MSS_MMW_DEMO_OUT) $(XWR16XX_RADARSS_IMAGE_BIN) $(DSS_MMW_DEMO_OUT) $(MMWAVE_SECDEV_HSIMAGE_CFG)

步驟二:特別需要注意的是,SOC驅(qū)動里的SOC_deviceInit代碼使用了sys_common_xwr16xx_mss.h里和L3 RAM大小相關的定義。因為這些定義的值改變了,所以這個SOC驅(qū)動要重新編譯。驅(qū)動路徑是C:timmwave_sdk_02_01_00_04packagestidriverssoc。編譯驅(qū)動的流程,請參考mmwave_sdk_user_guide.pdfd 4. 5. 4. 1. Building drivers/control/alg components章節(jié)。SOC驅(qū)動的重新編譯必須在mmw demo和ccs debug工程編譯之前。

步驟三:在mmw demo里面添加測試代碼并測試運行。

測試代碼添加在mss_main.c里。

#pragma CODE_SECTION (my_delay , "my_section")

void my_delay()

{

int i;

for (i=0;i<0x100;)

{

i++;

}

System_printf ("Debug: delay done! Increase MSS TCMAn");

}

int main (void)

{

Task_create(MmwDemo_mssInitTask, &taskParams, NULL);

//add for test

my_delay();

/* Start BIOS */

BIOS_start();

return 0;

}

在soc驅(qū)動重新編譯后,重新編譯mmw demo(make clean;make all)。在map文件里面可以看到已經(jīng)有代碼分配到了擴展出來的TCMA區(qū)域了。

MEMORY CONFIGURATION

name origin length used unused attr fill

---------------------- -------- --------- -------- -------- ---- --------

VECTORS 00000000 00000100 0000003c 000000c4 X

PROG_RAM 00000100 0003ff00 00016128 00029dd8 R X

PROG_RAM2 00040000 0001ffff 0000004a 0001ffb5 R X

將生成的bin文件燒錄到flash上運行,mmw demo可正常運行。

步驟四:在CCS下查看在擴展的TCMA中添加的代碼輸出的打印信息

在SOC驅(qū)動重新編譯后,重新編譯ccs debug代碼(make clean;make all)。

將重新編譯生成的ccsdebug.bin燒寫到AWR1642BOOST的QSPI flash上。

然后斷電,修改SOP設置,連上仿真器。分別在MSS/DSS下載之前編譯好的mmw demo的可執(zhí)行文件。分別運行MMS/DSS。在CCS的輸出串口可以看到下面的打印信息。標黃部分說明在擴展的TCMA上的代碼正確運行了,也就是一個L3 RAM bank已經(jīng)成功的分配給了MSS TCMA。

[Cortex_R4_0] **********************************************

Debug: Launching the Millimeter Wave Demo

**********************************************

Debug: delay done! Increase MSS TCMA

Debug: MMWDemoMSS Launched the Initialization Task

Debug: MMWDemoMSS mmWave Control Initialization was successful

[C674X_0] Debug: MMWDemoDSS mmWave Control Initialization succeeded

[Cortex_R4_0] Debug: CLI is operational

[C674X_0] Debug: MMWDemoDSS Data Path init succeeded

Debug: MMWDemoDSS initTask exit

之后連上mmwave visualizer,下載chirp配置命令,demo正常運行。

[Cortex_R4_0] Sensor has been stopped

Debug: MMWDemoMSS Received CLI sensorStart Event

[C674X_0] Heap L2_Heap : size 49152 (0xc000), free 47104 (0xb800)

Heap L1 : size 16384 (0x4000), free 4096 (0x1000)

Heap L2 : size 49152 (0xc000), free 35592 (0x8b08)

Heap L3 : size 655360 (0xa0000), free 507904 (0x7c000)

綜合上面步驟三和步驟四的信息,可以證明修改L3 RAM的分布成功!如果用戶還有不同的L3 RAM的分配,參考上的流程修改即可。

后話

實際修改L3 RAM的分布是需要修改SHMEMBANKSEL7TO4寄存器的。該寄存器每8個bit控制一個bank,0x1 : DSS 0x2 : MSS TCMA 0x4 : MSS TCMB 0x10: BSS TCMA。每個bank能夠配置的使用者略有不同,具體信息請參考xWR1642 TRM里該寄存器的解釋。但在上面測試的步驟里面并沒有添加修改SHMEMBANKSEL7TO4

的代碼。原因是在生成xWR1642的image的時候,會有相應L3 RAM分布信息輸入,在image里面就包含了L3 RAM的配置信息。這樣ROM code在啟動時候就會根據(jù)image里L3 RAM的配置信息設置好相關的寄存器,用戶不需要在添加代碼來修改SHMEMBANKSEL7TO4寄存器了。

下面是運行修改后代碼在CCS下讀取到的SHMEMBANKSEL7TO4寄存器的值。可以看到bank 7為BSS所使用。Bank 6為MSS TCMA使用。Bank 5/4為DSS所使用,和測試預想的一致。

poYBAGQqKsOAIHy1AAAGvyVhKDo024.png

圖2 運行測試代碼后SHMEMBANKSEL7TO4寄存器值

補充:

對于修改r4f的memory,還有一點需要考慮的是r4f的mpu配置。SDK代碼里面mpu的配置在C:timmwave_sdk_02_01_00_04packagestidriverssocplatformsoc_xwr16xx_mss.c文件的SOC_mpu_config()函數(shù)里。默認定義DOWNLOAD_FROM_CCS變量時,TCMA配置為可讀寫,可執(zhí)行,不緩存,配置大小為512KB。所以在上面的例子里,TCMA的大小從256KB,加大到256KB+128KB,大小仍然小于512KB。所以mpu的配置不需要做修改。但是如果用戶是增加了TCMB的大小,默認TCMB配置為256KB(實際192KB),但增加128KB后,TCMB的大小就變成了320KB,就大于256KB了,這時候就需要修改相關的mpu配置。另外,TCMB默認的mpu配置為不可執(zhí)行,是不可以放代碼,只能放數(shù)據(jù)。如果用戶需要在TCMB上既放代碼又放數(shù)據(jù),要修改mpu為可執(zhí)行即可。下面是加大TCMB大小并修改為可執(zhí)行的一個例子。

#if ((SOC_XWR16XX_MSS_TCMB_BASE_ADDRESS & (256U * ONE_KB - 1)) != 0)

#error SOC_XWR16XX_MSS_TCMB_BASE_ADDRESS not aligned to 256 KB

#endif

_mpuSetRegion_(mpuREGION3);

_mpuSetRegionBaseAddress_(SOC_XWR16XX_MSS_TCMB_BASE_ADDRESS);

_mpuSetRegionTypeAndPermission_(MPU_NORMAL_OINC_NONSHARED, MPU_PRIV_RW_USER_RW_EXEC);

_mpuSetRegionSizeRegister_(mpuREGION_ENABLE | MPU_512_KB);

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4671

    瀏覽量

    67771
  • DSS
    DSS
    +關注

    關注

    0

    文章

    24

    瀏覽量

    13061
  • SDK
    SDK
    +關注

    關注

    3

    文章

    1006

    瀏覽量

    45422
收藏 人收藏

    評論

    相關推薦

    德州儀器宣布AWR1642IWR1642毫米波傳感器可以批量生產(chǎn)

    繼發(fā)布全球精度最高的CMOS單芯片毫米波雷達傳感器一年后,德州儀器(TI)近日宣布,其高集成度超寬帶AWR1642IWR1642 毫米波傳感器實現(xiàn)批量生產(chǎn)。這兩款傳感器均支持76GHz-81GHz的頻率下,實現(xiàn)高達三倍的
    的頭像 發(fā)表于 06-01 11:06 ?1.2w次閱讀

    請問毫米波雷達AWR1642 CAN功能如何使用?

    按著sdk中的教程使用AWR1642的CAN模塊,但沒有實現(xiàn)CAN數(shù)據(jù)的發(fā)送和接收,求教CAN功能的使用方法
    發(fā)表于 08-19 07:31

    IWR1642/AWR1642毫米波傳感器的GPADC功能介紹與功能實現(xiàn)

    進行監(jiān)控。IWR1642/AWR1642的ADC采樣率為625Ksps,精度為10-bit,提供給用戶6個ADC管腳進行測量。其中5個ADC支持緩沖模式和非緩沖模式,一個ADC僅支持非緩沖模式。
    發(fā)表于 03-04 06:45

    IWR1642/AWR1642修改代碼改變L3 RAM分布

    本文以AWR1642為例,介紹了AWR1642 ES2.0 EVM基于mmWave SDK 2.1的mmw demo下如何修改代碼來改
    發(fā)表于 03-12 06:45

    請問IWR1642能調(diào)制FSK波形嗎?

    IWR1642和1443,手冊及波形產(chǎn)生文檔里只描述了產(chǎn)生鋸齒波的多種組合方法,可以產(chǎn)生常規(guī)的三角波,或者FSK調(diào)頻波嗎?
    發(fā)表于 03-25 08:50

    怎樣去設計一種基于IWR1642芯片的板載天線呢

    IWR1642芯片的內(nèi)部結(jié)構(gòu)是怎樣組成的?怎樣去設計一種基于IWR1642芯片的板載天線呢?
    發(fā)表于 10-22 09:29

    如何在IWR1642/AWR1642修改L3 RAM分布?

    本文以AWR1642為例,介紹了AWR1642 ES2.0 EVM基于mmWave SDK 2.1的mmw demo下如何修改代碼來改變
    發(fā)表于 11-10 08:06

    實現(xiàn)IWR1642/AWR1642 GPADC的功能

    GPADC功能介紹 IWR1642/AWR1642的毫米波傳感器芯片上集成了通用ADC(GPADC)的功能。用戶可以利用GPADC對外部電壓,例如電源電壓進行監(jiān)控。IWR1642/AWR164
    發(fā)表于 11-11 07:30

    德州儀器將開始量產(chǎn)其高度集成的超寬頻AWR1642IWR1642毫米波傳感器

    據(jù)外媒報道,推出世界最精確的毫米波(mmWave)單芯片互補金屬氧化物半導體(CMOS)傳感器一年后,美國德州儀器公司(TI)現(xiàn)在宣布將開始量產(chǎn)其高度集成的超寬頻AWR1642IWR16
    發(fā)表于 06-04 17:30 ?1536次閱讀

    基于IWR1642 IWR樓宇自動化的應用

    毫米波雷達的應用無處不在- 1.2 用 IWR1642 進行人員數(shù)量統(tǒng)計的演示說明
    的頭像 發(fā)表于 05-07 06:40 ?4238次閱讀
    基于<b class='flag-5'>IWR1642</b> <b class='flag-5'>IWR</b><b class='flag-5'>在</b>樓宇自動化的應用

    如何修改代碼來改變L3 RAM分布的具體流程和步驟

    EVM基于mmWave SDK 2.1的mmw demo下如何修改代碼來改變L3 RAM分布的具體流程和步驟。 ????????
    的頭像 發(fā)表于 01-13 15:28 ?1523次閱讀
    如何<b class='flag-5'>修改</b>代碼來改變<b class='flag-5'>L3</b> <b class='flag-5'>RAM</b><b class='flag-5'>分布</b>的具體流程和步驟

    AWR1642: 現(xiàn)有mmWave SDK demo中增加I2C驅(qū)動支持

    AWR1642: 現(xiàn)有mmWave SDK demo中增加I2C驅(qū)動支持
    發(fā)表于 11-01 08:26 ?3次下載
    <b class='flag-5'>AWR1642</b>: <b class='flag-5'>在</b>現(xiàn)有mmWave SDK demo中增加I2C驅(qū)動支持

    IWR1642/AWR1642修改L3 RAM分布

    IWR1642/AWR1642修改L3 RAM
    發(fā)表于 11-01 08:26 ?2次下載
    <b class='flag-5'>在</b><b class='flag-5'>IWR1642</b>/<b class='flag-5'>AWR1642</b><b class='flag-5'>上</b><b class='flag-5'>修改</b><b class='flag-5'>L3</b> <b class='flag-5'>RAM</b>的<b class='flag-5'>分布</b>

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)
    發(fā)表于 11-01 08:26 ?3次下載
    <b class='flag-5'>IWR1642</b>/<b class='flag-5'>AWR1642</b> GPADC功能介紹與實現(xiàn)

    IWR1642/AWR1642 GPADC功能介紹與實現(xiàn)

    ? IWR1642/AWR1642的毫米波傳感器芯片上集成了通用ADC(GPADC)的功能。用戶可以利用GPADC對外部電壓,例如電源電壓進行監(jiān)控。IWR1642/AWR1642
    的頭像 發(fā)表于 04-03 10:13 ?2264次閱讀