0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

广芯微电子UM3506 低功耗MCU芯片 基于FreeRTOS & RISC-V的USB PD协议实现

贞光科技 2023-02-28 10:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

贞光科技是广芯微电子代理商和解决方案供应商,负责广芯微电子的低功耗MCU芯片,8位/32位微控制器芯片、无线射频收发器芯片,数字电源管理芯片和传感与信号调理专用芯片等产品的销售和技术服务。样品申请和订购联系我们。

1 FreeRTOS简介

FreeRTOS是市场领先的面向微控制器和小型微处理器的实时操作系统(RTOS),与世界领先的芯片公司合作开发。FreeRTOS通过 MIT开源许可免费分发,包括一个内核和一组不断丰富的库,适用于所有行业领域。FreeRTOS 的构建强调可靠性和易用性。FreeRTOS的主要功能可以归结为以下几点:

  • 优先级调度、相同优先级任务的轮转调度,同时可设成可剥夺内核或不可剥夺内核
  • 任务可选择是否共享堆栈(co-routines & tasks),并且没有任务数限制
  • 消息队列,二值信号量,计数信号量,递归互斥体
  • 时间管理
  • 内存管理

1.1 FreeRTOS特点:

FreeRTOS的特点:

  • 小型节能内核 大小可扩展,可用程序内存占用低至 6KB。一些架构包括无滴答的节能模式;
  • 支持 40多种架构 代码库支持 40多种 MCU架构和15多种工具链,包括最新的 RISC-VARMv8-M (Arm Cortex-M33)微控制器;
  • 模块化库 越来越多的加载项库,适用于所有行业领域,包括安全的本地或云连接;
  • AWS参考集成 利用经过测试的示例,其中包括安全连接到云所必需的所有库;
  • MIT许可,有选项 FreeRTOS可根据MIT许可用于任何目的。提供商业许可,以及安全认证

2 RISC V简介

RISC-V是加州大学伯克利分校(University of California at Berkeley)设计并发布的一种开源指令集架构,其目标是成为指令集架构领域的Linux,应用覆盖IoT(Internet of Things)设备、桌面计算机、高性能计算机等众多领域。

RISC-V读作RISC Five,意思是第五代精简指令处理器。取这个名字只是因为美国伯克利研究团队的David Patterson教授在此之前已经研制了四代精简指令处理器芯片。

RISC-V是由UC-Berkeley团队在历代RISC架构基础上,总结多个ISA优缺点而重新创建的一种新式ISA, 它采取“开源”的模式对全世界开放,希望成为一切计算设备都可以采用的指令集架构。它的开放性允许它可以自由地被用于任何目的,允许任何人设计、制造和销售基于RISC-V的芯片或软件,这种彻底的开放性在处理器领域还是第一次。

2.1 RISC-V的特点

首先是开源的优势:

  • 任何公司和个人不需任何费用就可以自由使用RISC-V,不像ARM指令集需要支付高昂授权费,也不像英特尔不开放内核,只允许用户基于微处理器进行应用开发。
  • RISC-V的开源会大大降低指令集修改和定制的门槛,在实现芯片差异化设计的同时降低成本,对发展自主可控处理器、摆脱垄断有着十分重要的意义。

其次是功能优势:

  • RISC-V架构的篇幅很短,不用背负向后兼容的历史包袱;
  • 模块化的灵活设计,RISC-V可根据特定应用场景对指令集进行裁剪或修改;
  • RISC-V支持可扩展定制指令;
  • RISC-V硬件设计与编译器实现起来非常简单。

3 基于FreeRTOS & RISC V内核的PD协议的应用

3.1 UM3506 PD SoC

广芯微旗下双向PD快充控制器芯片UM3506 (TID: 2465),采用软硬结合的灵活可编程架构,全面支持PD3.1 SRC, SNK,双向DRP和 EMARK功能,其中包括SPR下的PPS和ERP下的AVS动态电压模式,同时还可支持EPR线缆中PD 3.1 EMARK模式。

UM3506芯片采用TCPM/TCPC分层架构,集成原生的TCPC-like前端模块,包括用于Type-C接口检测与控制的数字逻辑和模拟电路,PD PHY层的分组BMC编解码以及PD协议层中对时序有严格要求的关键功能,同时创新地集成了基于RISC-V指令集的32位微处理器内核,大容量FLASH闪存/SRAM存储器、增强的外设接口和丰富的系统资源。

图片

3.2 应用案例

USB PD EMARK数显线,自带0.96寸液晶屏幕,在内置EMARK功能从而支持100W功率传输的同时,还可通过屏幕显示电压电流等参数,实时了解设备用电信息。通过内置16通道12位ADC配合采样电阻采集电流信息,并采集母线电压信息。

项目使用FreeRTOS, FreeRTOS的实现主要由 list.c、queue.c、croutine.c 和 tasks.c 4个文件组成。list.c是一个链表的实现,主要供给内核调度器使用;queue.c是一个队列的实现,支持中断环境和信号量控制;croutine.c和 task.c是两种任务的组织实现。协程(英文为 croutine)是采用各任务共享同一个堆栈, 使 RAM的需求进一步缩小,但也正因如此,他的使用受到相对严格的限制。而 task则是传统的实 现,各任务使用各自的堆栈,支持完全的抢占式调度。



3.2.1 FreeRTOS移植

3.2.1.1 portmacro.h头文件

portmacro.h头文件主要包括两部分内容。第一部分定义了一系列内核代码中用到的数据类型,第二部分包含了实现 FreeRTOS移植所需要定义的函数。包括与架构相关的定义、内核调度、临界区管理、任务优化等。



1.数据类型定义

定义编译器相关的各种数据类型。

#define portCHAR char

#define portFLOAT float

#define portDOUBLE double

#define portLONG long

#define portSHORT short

#define portSTACK_TYPE unsigned portLONG

#define portBASE_TYPE long

2.架构相关的定义

定义与处理器或控制器架构相关的宏定义。

#define configUSE_16_BIT_TICKS 0 //处理器字长为32位

#define portSTACK_GROWTH -1 //定义堆栈的生长方向逆向生长

//定义心跳时钟周期,表示的是相邻Tick间间隔多少ms

#define portTICK_RATE_MS((portTickType)1000/configTICK_RATE_HZ)

//访问SRAM的字节对齐

#define portBYTE_ALIGNMENT 8

3.内核调度函数

/*声明该函数定义在其它文件中,实现强制上下文切换,用在任务环境中调用 */

extern void vPortYieldFromISR( void );

#define portYIELD() vPortYieldFromISR()

/*强制上下文切换,在中断处理环境中调用 */

#define portEND_SWITCHING_ISR(xSwitchRequired)if(xSwitchRequired)\

vPortYieldFromISR()

3.2.1.2port.c源文件

1.堆栈初始化

进行堆栈的初始化,使堆栈处于预知的确定状态。下面是堆栈初始化的代码实现。

StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParameters )

{

/*计算存储程序状态寄存器xPSR的堆址,用于MCU在进入或退出中断时恢复现场*/ register int *tp asm("x4");

pxTopOfStack--;

/*程序状态寄存器的值保存于堆栈中 */

*pxTopOfStack = (portSTACK_TYPE)pxCode;

pxTopOfStack -= 22;

*pxTopOfStack = (portSTACK_TYPE)pvParameters;

pxTopOfStack -= 6;

*pxTopOfStack = (portSTACK_TYPE)tp;

pxTopOfStack -= 3;

*pxTopOfStack = (portSTACK_TYPE)prvTaskExitError;

return pxTopOfStack;

}

2.启动任务调度

portBASE_TYPE xPortStartScheduler( void )

{

/*让任务切换中断和心跳中断位于最低的优先级,使更高优先级可以抢占MCU */

*(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI;

*(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI;

/*启动定时器,开始产生系统的心跳时钟,此处中断已被关闭 */

prvSetupTimerInterrupt();

/*初始化临界区的嵌套的个数,准备启动第一个任务 */

uxCriticalNesting = 0;

/*启动第一个任务 */

vPortStartFirstTask();

/*执行到vPortStartFirstTask函数,内核已经开始正常的调度 */

return 0;

}

FreeRTOS首先为刚创建的任务分配所需内存,若分配成功,则初始化任务名称、堆栈深度和任务优先级,然后根据堆栈的增长方向初始化任务控制块的堆栈。接着,FreeRTOS把当前创建的任务加入到就绪任务链表。当进行任务调度时,调度算法首先实现优先级调度。系统按照优先级从高到低的顺序从就绪任务链数组中选择当前最高就绪优先级,据此实现优先级调度。若此优先级下只有一个就绪任务,则该任务进入运行状态,若此优先级下有多个就绪任务 则需采用轮换调度算法实现多任务轮流执行。

3.2.2 项目软件实现

本项目采用Eclipse IDE,系统上电之后,系统进行硬件和时钟初始化,MCU和操作系统的工作方式和工作状态进入准备阶段,除了空闲任务,还创建了三个任务:

(1)vUSBPDTask应用于处理PD协议,EMARK信息处理,充电方向,电压、电流数据采集并计算功率,耗电功率等数据,最高优先级;

(2)vUartRxTask串口数据接收任务,用于系统调试,第二优先级;

(3)vSysLcdHandlerTask显示任务,可以通过按键切换各个显示界面,为了在各个状态下显示界面不被打乱,创建 了g_sys_lcd_info.bus_lock互斥信号量,显示电压、电流、功率、充电方向、用电功率等信息,第三优先级;

显示任务执行耗时最长,vUSBPDTask需要快速响应,可以抢占其他任务从而确保PD信息的及时响应和处理,又不影响显示屏幕的显示效果。

软件流程图如下:

图片

产品效果如下图:

图片

本项目产品已经批量生产,实现实时多任务操作的同时缩短开发周期,保证了产品实时处理EMARK信号、准确快速采集电压电流等信息、显示流畅,广受客户欢迎。

UM3506的DEMO软件已经做好了FreeRTOS的移植,客户可以很方便地根据需求创建自己的任务,快速开发产品。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19129

    浏览量

    403990
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    青稞RISC-V MCU芯片助力互联应用高效落地

    青稞RISC-V互联型MCU芯片CH32V407和CH32V467支持200MHz主频零等待运行,双高速
    的头像 发表于 03-11 16:11 771次阅读
    青稞<b class='flag-5'>RISC-V</b> <b class='flag-5'>MCU</b><b class='flag-5'>芯片</b>助力互联应用高效落地

    PT32L005&amp;amp;F005系列32位微控制器

    Cortex-M0 内核,定位低功耗高性能 MCU,适用于工业控制和消费电子领域。技术参数特性PT32L005PT32F005 核心定位超低功耗系列
    发表于 03-05 08:51

    CH32V203系列RISC-V增强低功耗MCU单片机

    在当今智能设备与物联网应用迅速发展的背景下,对微控制器的性能、功耗与外设集成提出了更高要求。CH32V203系列作为一款基于32位RISC-V内核设计的工业级增强型低功耗通用
    的头像 发表于 01-30 16:16 533次阅读
    CH32<b class='flag-5'>V</b>203系列<b class='flag-5'>RISC-V</b>增强<b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>单片机

    Renesas R9A02G021:32位RISC-V MCU的全方位解析

    R9A02G021这款基于RISC-V架构的32位超低功耗MCU,看看它在实际应用中能为我们带来哪些优势。 文件下载: Renesas Electronics R9A02G021低功耗
    的头像 发表于 12-29 09:50 533次阅读

    源CW32 MCURISC-V架构的MCU嘛?性能如何?

    源CW32 MCURISC-V架构的MCU嘛?性能如何?
    发表于 12-10 06:16

    喜讯|昊RISC-V DSP荣获“中国RISC-V生态推广奖

    成果,成功斩获"RISC-V生态推广示范案例"奖项!这是对中科昊坚持自主创新、推动RISC-V产业化、构建开放共赢生态体系的权威认可。技术突破:RISC-V落地
    的头像 发表于 11-18 09:01 2500次阅读
    喜讯|昊<b class='flag-5'>芯</b><b class='flag-5'>RISC-V</b> DSP荣获“中国<b class='flag-5'>芯</b>”<b class='flag-5'>RISC-V</b>生态推广奖

    FreeRTOS 在 AS32系列RISC-V 架构MCU电机驱动中的应用实践与优化

    一、AS32系列 RISC-V MCUFreeRTOS 融合的电机驱动架构解析 1.1 硬件层: AS32系列 架构的优势 在电机驱动系统中,硬件层的性能是决定整体控制精度与响应速度的核心
    的头像 发表于 11-13 23:33 1022次阅读

    RISC-V芯片已量产,性能、功耗平衡更佳

    电子发烧友网综合报道 瑞微日前在互动平台公开表示,公司已基于RISC-V架构推出并量产新产品,后续将继续研发基于RISC-V架构的产品。   瑞
    的头像 发表于 10-23 09:13 1.2w次阅读
    瑞<b class='flag-5'>芯</b>微<b class='flag-5'>RISC-V</b><b class='flag-5'>芯片</b>已量产,性能、<b class='flag-5'>功耗</b>平衡更佳

    成都华微32位RISC-V低功耗MCU新品发布

    自8月12日成都华微公告发布全新32位RISC-V低功耗MCU 后,现首次在elexcon深圳国际电子展上亮相该产品。 产品核心特点   超低功耗
    的头像 发表于 08-26 09:28 1720次阅读
    成都华微32位<b class='flag-5'>RISC-V</b>超<b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>新品发布

    米尔基于RK3562与RK3506开发板有什么区别?

    积存储的512MB DDR3L,裕太微的百兆以太网PHY芯片,龙讯的MIPI DSI/CSI转HDMI1.4的收发器芯片,沁恒微电子USB转串口
    发表于 07-11 09:32

    沁恒微电子:从互连互通应用推动RISC-V落地发展

    沁恒微电子邀您共襄盛举沁恒微电子专注于连接技术和微处理器内核研究,基于多层次青稞RISC-V微处理器、多类型物理层收发器构建USB/蓝牙/以太网接口
    的头像 发表于 06-26 09:52 1757次阅读
    沁恒<b class='flag-5'>微电子</b>:从互连互通应用推动<b class='flag-5'>RISC-V</b>落地发展

    公司RISC-V高性能CPU芯片获得权威认可

    近日,智公司自主研发的RISC-V高性能CPU芯片通过工信部直属中国电子技术标准化研究院赛西实验室检测,标志着智公司在
    的头像 发表于 06-16 17:32 1768次阅读

    米尔瑞微多核异构低功耗RK3506核心板重磅发布

    近日,米尔电子发布MYC-YR3506核心板和开发板,基于国产新一代入门级工业处理器瑞微RK3506,这款芯片采用三核Cortex-A7+
    发表于 05-16 17:20

    RISC-V JTAG:开启MCU 芯片调试之旅

    基于 RISC-V 架构的 MCU 芯片JTAG 调试过程及操作,为后续类似调试工作提供详实参考的依据,助力研发团队高效推进芯片研发进程。 RISC
    的头像 发表于 05-07 17:57 2999次阅读
    <b class='flag-5'>RISC-V</b> JTAG:开启<b class='flag-5'>MCU</b> <b class='flag-5'>芯片</b>调试之旅

    RISC-V低功耗MCU多电压域设计

    RISC-V低功耗MCU的多电压域设计是一种通过优化电源管理来降低功耗的技术,RISC-V低功耗
    的头像 发表于 04-27 16:06 1226次阅读