当前位置: 首页 > news >正文

RSICV国产芯片之CHV208

1. 芯片选型分析的对比维度

分析或者对标应用的芯片替代思路 

1.1 内核/主频/存储空间支持

内核能力/指令集支持(考虑工具链兼容性); 

主频:对比计算能力是否满足基本要求

存储:内存--数据搬移空间决定数据运算的复杂度, FLASH--程序空间决定程序的复杂度

1.2 外设接口: (传感器接入,信号获取)

UART/I2C/SPI--数字外设接口能力,路数,最高主频(刷新率),接口协议是否通用

ADC/运放--模拟信号接口能力, 位数,信噪比,信号处理范围

SDIO 

1.3 驱动能力

PWM--路数,分辨率,最高频率

DAC--位数,精度

1.4音视频

I2S--音频接口(比如数字功放,数字硅麦)

DVP--视频接口,SPI摄像头接入

MIPI--屏或者摄像头接口

1.5 连接能力: 

无线: 蓝牙、wifi、SUB-G

以太网/CAN/USB

1.6 其他资源(软件开发的便利性): 

DMA--高速数据交换必备

TIMER定时器--灵活处理任务调度

CRC--外设通信

CHIPID--加密及身份互认

电源管理(待机模式/功耗)--是否足够灵活,能够满足不同工况低功耗要求和宽电压适应能力。 

1.7 开发环境: 

IDE支持

烧录调试模式

HAL库/RTOS支持

样例工程可用性,代码是否友好等; 

2. CH32V208系列应用选型

参考沁恒官网: 

产品中心 - 南京沁恒微电子股份有限公司

V208资源也很丰富,主频够高,FLASH 稍小128K, RAM64K

 

资源差不多,只是引脚数不同,估计是一个die; 

支持OPA和12bit的ADC, 其实可以用来做测温应用; 

3. 开发环境上手

参考贴: 

沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置-CSDN博客

3.1 代码编译环境IDE--MRS(MounRiverStudio)

  第一次用MRS打开CH208的项目,会安装环境: 

 代码架构: 

GPIO_TOGGLE例程: 

int main(void)
{u8 i = 0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200);printf("SystemClk:%d\r\n", SystemCoreClock);printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );printf("GPIO Toggle TEST\r\n");GPIO_Toggle_INIT();while(1){Delay_Ms(250);GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));}
}

3.2  调试环境建立: 

评估板资源分布: 

烧录/调试的选项, 有三种方式 

3.2.1 2线SWD模式, 配合WCH-LINKE

优点: 可以在MRS里debug,可以动态调试,更符合从STLINK+KEIL迁移过来的开发者; 

缺点:需要配WCH-LINKE设备; 

硬件连接

引脚P6-DEBUG

WCH-LINKE连接SWD接口, 在MRS里可以直接下载调试。

如果用WCH-LINKE的话,也可以用 WCH-LinkUtility.exe 下载。 

专用烧录工具比IDE里的功能要更齐备。  

3.2.2 (USB/串口)WCHISPTool.exe 下载升级

稍稍麻烦一点, BOOT0接地(0)重启动烧录, 接高电平(1)重启动运行程序。 

优点:不需要专用工具,USB/串口都可以烧录;

缺点:需要准备一根飞线,在烧录和运行状态下配置切换接线; 

 强调: 串口烧录,必须BOOT0-VDD, BOOT1-GND连接好复位才行!

             然后烧录后, 重新BOOT0-GND即可以进入程序运行状态; 

实测,USB口和UART口都可以通过isptool正常烧录。 

GPIO-TOGGLE例程串口连接正常情况下,上电有打印消息; 

注意,要点灯的话,需要将排针的LED1连接到PA0, 即可实现blink点灯......

 

3.2.3 通过bootloader, 串口在线烧录程序(推荐)

 利用IAP例程的架构实现串口直接烧录(在线升级)。 --生产环境更实用。 

注意: app一定要配置Link.ld文件,指定FLASH/RAM大小: 

	FLASH (rx) : ORIGIN = 0x00005000 , LENGTH = 128K RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K 

 

这样就提高调试效率了,可以USB插着用于IAP更新下载固件APP, 串口插着打印调试; 

入口在xxx_it.c程序中的软中断入口: 

void SW_Handler(void) {__asm("li  a6, 0x5000");__asm("jr  a6");while(1);

tips:  IAP里加入简单的固件校验,还可以用于固件加密等扩展应用。 

注意,此处有坑! 

如果用IAP升级,USB可以直接用工具选择bin文件升级; 

!!!但是如果是串口升级,注意IAP给的bootloader例子里是用的串口3作为升级串口,串口1依然是printf调试打印串口,且波特率是57600(当然,可以修改)。 代码,查看IAP例子的main.c: 

int main(void) {SystemCoreClockUpdate();Delay_Init();USART_Printf_Init(115200);printf("SystemClk:%d\r\n", SystemCoreClock);printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );Set_USBConfig();USB_Init();USB_Port_Set(DISABLE, DISABLE);Delay_Ms(700);USB_Port_Set(ENABLE, ENABLE);USB_Interrupts_Config();USBFS_Init();USART3_CFG(57600);while(1){EP2_RecData_Deal();if( USART_GetFlagStatus(USART3, USART_FLAG_RXNE) != RESET) {UART_Rx_Deal();}if (End_Flag){Delay_Ms(10);IAP_2_APP();while(1);}}
}

所以升级用的USB-TTL模块要接在PB10-RX, PB11-TX: 

几种方式比较, 应该通过加载BOOTLOADER后用USB升级是最方便的操作,无需借助其他工具,直接插USB就可以了。  

4. 拿到SDK的入门路径 

4.1 外设:

BLINK-->外部中断/KEY-->UART-->SPI/I2C/FLASH

-->TIMER/PWM-->ADC/DAC/RTC

-->DMA/WDT/SDIO

***射频

4.2 RTOS操作系统

FREERTOS内核-->任务-->任务间通信-->任务和中断协同


http://www.mrgr.cn/news/81429.html

相关文章:

  • Ruby+Selenium教程
  • Erlang语言的数据结构
  • CSS(二):美化网页元素
  • 低代码开源项目Joget的研究——基本概念和应用
  • 面向未来的教育技术:智能成绩管理系统的开发
  • android 登录界面编写
  • Datawhale-AI活动2024.12.24
  • Linux大数据方向shell
  • 增强路由器
  • 【RAG实战】语言模型基础
  • 微信小程序性能优化
  • 【Linux】数据呈现
  • Redis 介绍和安装
  • 小白考研历程:跌跌撞撞,起起伏伏,五个月备战历程!!!
  • 服务端高并发分布式结构演进之路
  • 使用 acme.sh 申请域名 SSL/TLS 证书完整指南
  • 【Java基础-27】Java中的访问修饰符:分类、作用及应用场景
  • 2.利用docker进行gitlab服务器迁移
  • 面试记录24年新
  • Javaweb (二) | Cookie、Session
  • clickhouse解决suspiciously many的异常
  • Debian12 安装配置 ODBC for GaussDB
  • 攻防世界 PHP2
  • Python8-写一些小作业
  • AI科研助手开发总结:向量与数据权限的应用(一)
  • 【ROS2】坐标TF发布(静态)