赤菟V307彩蛋之可配置Flash和SRAM


赤菟V307彩蛋之可配置Flash和SRAM

赤菟V307(CH32V307)是一款RISC-V內核的MCU,搭載的是沁恆自研RISC-V內核青稞V4F,最高主頻144MHz,支持單精度浮點運算(FPU)。通常官網介紹Flash大小為256 KB,SRAM大小為64 KB
image
仔細閱讀應用手冊發現,其Flash和SRAM的大小支持配置,具體配置項如下:

  • 192 KB Flash + 128 KB SRAM
  • 224 KB Flash + 96 KB SRAM
  • 256 KB Flash + 64 KB SRAM
  • 288 KB Flash + 32 KB SRAM

彩蛋1

RAM最高可配置到128 KB,直接翻倍,可以擼起袖子敲代碼啦,再也不用擔心RAM不夠啦~

其實赤菟V307內部有一塊320 KB SRAM,分為A、B兩塊,A、B塊的大小由用戶選擇字的user的SRAM_CODE_MODE 位決定,A塊負責存放用戶代碼,B塊留作單片機真正的SRAM,每次上電運行時,內部自動從Code Flash中加載A塊大小的用戶代碼運行。
當然用戶代碼的實際Flash和SRAM大小不要超出配置的范圍,否則會導致程序無法運行等問題。

image
實際在操作Flash時,也不會有Flash等待的問題。

彩蛋2

細心的小伙伴或許會發現,V307 Flash最大配置為288 KB,而Code Flash的大小為488 KB,這也是隱藏的彩蛋哦,剩下的200 KB Flash可以當作存儲用,不過需要注意該處Flash等待的問題

配置方法

既然赤菟V307的Flash和SRAM是可配置的,那么聊聊配置的方法吧!

(1)WCHISBTool配置

  • step 1:切換啟動模式,BOOT0 = 1,BOOT1 = 0
  • step 2:通過WCHISPTool工具配置用戶選擇字,具體步驟見下圖
    image
  • step 3:切換啟動模式,BOOT0 = 0,BOOT1 = 0

(2)用戶代碼配置

typedef enum
{
	FlASH_192_SRAM_128 = 0,
	FLASH_224_SRAM_96,
	FLASH_256_SRAM_64,
	FLASH_288_RAM_32
} FLASH_SRAM_DEFIN;

//note: this operation will take effect after reset
void Config_Flash_SRAM(FLASH_SRAM_DEFIN SetFlashSRAM)
{
	uint8_t UserByte = FLASH_GetUserOptionByte() & 0xff; //get user option byte

	switch(SetFlashSRAM)
	{
	case 0:
		UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00
		break;
	case 1:
		UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00
		UserByte |= 0x7f;    // SRAM_CODE_MODE = 01
		break;
	case 2:
		UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00
		UserByte |= 0xbf;    // SRAM_CODE_MODE = 10
		break;
	case 3:
		UserByte |= 0xff;    // SRAM_CODE_MODE = 11
		break;
	default:
		break;
	}

	FLASH_Unlock();
	FLASH_ProgramOptionByteData(0x1ffff802, UserByte);
	FLASH_Lock();
}

/*********************************************************************
 * @fn      main
 *
 * @brief   Main program.
 *
 * @return  none
 */
int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);


    Config_Flash_SRAM(FLASH_288_RAM_32); //配置Flash為288 KB,SRAM為32KB ,復位后生效
    
    printf("userByte = %02x \r\n",FLASH_GetUserOptionByte() & 0xff);  

    while(1)
    {
    	;
    }
}

注意以上兩種配置方式完成后,還需要同步用戶工程代碼的ld鏈接文件中Flash 和 SRAM的大寫,與用戶選擇字配置的大小保持一致。需要了解RISC-V MCU ld鏈接文件的可以查看該貼:RISC-V MCU ld鏈接腳本說明

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM