ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RISC-V MCU 开发教程之CH32V307配置Flash和RAM

2022-02-24 10:33:09  阅读:356  来源: 互联网

标签:KB RAM FLASH 配置 SRAM Flash RISC UserByte


赤菟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 + 54 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

 

标签:KB,RAM,FLASH,配置,SRAM,Flash,RISC,UserByte
来源: https://blog.csdn.net/Zhu_zzzzzz/article/details/123105732

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有