《電子技術應用》
您所在的位置:首頁 > 模擬設計 > 業(yè)界動態(tài) > 廣芯微電子UM3506 基于FreeRTOS & RISC-V的USB PD協(xié)議實現(xiàn)

廣芯微電子UM3506 基于FreeRTOS & RISC-V的USB PD協(xié)議實現(xiàn)

2023-03-01
來源:廣芯微電子

貞光科技是廣芯微電子代理商和解決方案供應商,,負責廣芯微電子的低功耗MCU芯片,,8位/32位微控制器芯片,、無線射頻收發(fā)器芯片,,數(shù)字電源管理芯片和傳感與信號調理專用芯片等產(chǎn)品的銷售和技術服務,。

1  FreeRTOS簡介

FreeRTOS 是市場領先的面向微控制器和小型微處理器的實時操作系統(tǒng) (RTOS),,與世界領先的芯片公司合作開發(fā),。FreeRTOS 通過 MIT 開源許可免費分發(fā),,包括一個內核和一組不斷豐富的庫,,適用于所有行業(yè)領域。FreeRTOS 的構建強調可靠性和易用性,。FreeRTOS 的主要功能可以歸結為以下幾點:

優(yōu)先級調度,、相同優(yōu)先級任務的輪轉調度,同時可設成可剝奪內核或不可剝奪內核

任務可選擇是否共享堆棧(co-routines & tasks),,并且沒有任務數(shù)限制

消息隊列,,二值信號量,計數(shù)信號量,,遞歸互斥體

時間管理

內存管理

1.1  FreeRTOS特點:

FreeRTOS的特點:

小型節(jié)能內核 大小可擴展,,可用程序內存占用低至 6KB。一些架構包括無滴答的節(jié)能模式,;

支持 40 多種架構 代碼庫支持 40 多種 MCU 架構和15 多種工具鏈,,包括最新的 RISC-V 和 ARMv8-M (Arm Cortex-M33) 微控制器;

模塊化庫 越來越多的加載項庫,,適用于所有行業(yè)領域,,包括安全的本地或云連接;

AWS參考集成 利用經(jīng)過測試的示例,,其中包括安全連接到云所必需的所有庫,;

MIT許可,有選項 FreeRTOS 可根據(jù) MIT 許可用于任何目的,。提供 商業(yè)許可,,以及 安全認證。

2  RISC V簡介

RISC-V是加州大學伯克利分校(University of California at Berkeley)設計并發(fā)布的一種開源指令集架構,,其目標是成為指令集架構領域的Linux,,應用覆蓋IoT(Internet of Things)設備、桌面計算機,、高性能計算機等眾多領域,。

RISC-V讀作RISC Five,,意思是第五代精簡指令處理器。取這個名字只是因為美國伯克利研究團隊的David Patterson教授在此之前已經(jīng)研制了四代精簡指令處理器芯片,。

RISC-V是由UC-Berkeley團隊在歷代RISC架構基礎上,,總結多個ISA 優(yōu)缺點而重新創(chuàng)建的一種新式ISA, 它采取“開源”的模式對全世界開放,,希望成為一切計算設備都可以采用的指令集架構,。它的開放性允許它可以自由地被用于任何目的,允許任何人設計,、制造和銷售基于RISC-V的芯片或軟件,,這種徹底的開放性在處理器領域還是第一次。

2.1  RISC-V的特點

首先是開源的優(yōu)勢:

任何公司和個人不需任何費用就可以自由使用RISC-V,,不像ARM指令集需要支付高昂授權費,,也不像英特爾不開放內核,只允許用戶基于微處理器進行應用開發(fā),。

RISC-V的開源會大大降低指令集修改和定制的門檻,,在實現(xiàn)芯片差異化設計的同時降低成本,對發(fā)展自主可控處理器,、擺脫壟斷有著十分重要的意義,。

其次是功能優(yōu)勢:

RISC-V架構的篇幅很短,不用背負向后兼容的歷史包袱,;

模塊化的靈活設計,,RISC-V可根據(jù)特定應用場景對指令集進行裁剪或修改;

RISC-V支持可擴展定制指令,;

RISC-V硬件設計與編譯器實現(xiàn)起來非常簡單,。

3    基于FreeRTOS & RISC V內核的PD協(xié)議的應用

3.1  UM3506 PD SoC

廣芯微旗下雙向PD快充控制器芯片 UM3506 (TID: 2465), 采用軟硬結合的靈活可編程架構,全面支持PD3.1 SRC, SNK, 雙向DRP和 EMARK功能,,其中包括SPR下的PPS和ERP下的AVS動態(tài)電壓模式,,同時還可支持EPR線纜中PD 3.1 EMARK模式,。

UM3506芯片采用TCPM/TCPC分層架構,,集成原生的TCPC-like前端模塊,包括用于Type-C接口檢測與控制的數(shù)字邏輯和模擬電路,,PD PHY層的分組BMC編解碼以及PD協(xié)議層中對時序有嚴格要求的關鍵功能,,同時創(chuàng)新地集成了基于RISC-V 指令集的32位微處理器內核,大容量FLASH閃存/SRAM存儲器,、增強的外設接口和豐富的系統(tǒng)資源,。

3.2    應用案例

USB PD EMARK數(shù)顯線,自帶0.96寸液晶屏幕,,在內置EMARK功能從而支持100W功率傳輸?shù)耐瑫r,,還可通過屏幕顯示電壓電流等參數(shù),,實時了解設備用電信息。通過內置16通道12位ADC配合采樣電阻采集電流信息,,并采集母線電壓信息,。

項目使用FreeRTOS, FreeRTOS 的實現(xiàn)主要由 list.c、queue.c,、croutine.c 和 tasks.c 4 個文件組成,。list.c 是一個鏈表的實現(xiàn),主要供給內核調度器使用,;queue.c 是一個隊列的實現(xiàn),,支持中斷環(huán)境和信號量控制;croutine.c 和 task.c 是兩種任務的組織實現(xiàn),。協(xié)程(英文為 croutine)是采用各任務共享同一個堆棧,, 使 RAM 的需求進一步縮小,但也正因如此,,他的使用受到相對嚴格的限制,。而 task 則是傳統(tǒng)的實 現(xiàn),各任務使用各自的堆棧,,支持完全的搶占式調度,。

3.2.1    FreeRTOS移植

3.2.1.1    portmacro.h 頭文件

portmacro.h頭文件主要包括兩部分內容。第一部分定義了一系列內核代碼中用到的數(shù)據(jù)類型,,第二部分包含了實現(xiàn) FreeRTOS 移植所需要定義的函數(shù),。包括與架構相關的定義、內核調度,、臨界區(qū)管理,、任務優(yōu)化等。

1.數(shù)據(jù)類型定義

定義編譯器相關的各種數(shù)據(jù)類型,。

#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的字節(jié)對齊

#define portBYTE_ALIGNMENT 8

3.內核調度函數(shù)

/* 聲明該函數(shù)定義在其它文件中,,實現(xiàn)強制上下文切換,,用在任務環(huán)境中調用 */

extern void vPortYieldFromISR( void );

#define portYIELD() vPortYieldFromISR()

/* 強制上下文切換,在中斷處理環(huán)境中調用 */

#define portEND_SWITCHING_ISR(xSwitchRequired)if(xSwitchRequired)\

vPortYieldFromISR()

3.2.1.2   port.c 源文件

1.堆棧初始化

進行堆棧的初始化,,使堆棧處于預知的確定狀態(tài),。下面是堆棧初始化的代碼實現(xiàn)。

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

{

/* 計算存儲程序狀態(tài)寄存器xPSR的堆址,,用于MCU在進入或退出中斷時恢復現(xiàn)場*/            register int *tp asm("x4");

pxTopOfStack--;

/* 程序狀態(tài)寄存器的值保存于堆棧中 */

*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 )

{

/* 讓任務切換中斷和心跳中斷位于最低的優(yōu)先級,,使更高優(yōu)先級可以搶占MCU */

*(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI;

*(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI;

/* 啟動定時器,開始產(chǎn)生系統(tǒng)的心跳時鐘,此處中斷已被關閉 */

prvSetupTimerInterrupt();

/* 初始化臨界區(qū)的嵌套的個數(shù),,準備啟動第一個任務 */

uxCriticalNesting = 0;

/* 啟動第一個任務 */

vPortStartFirstTask();

/* 執(zhí)行到vPortStartFirstTask函數(shù),,內核已經(jīng)開始正常的調度 */

return 0;

}

FreeRTOS首先為剛創(chuàng)建的任務分配所需內存,若分配成功,,則初始化任務名稱,、堆棧深度和任務優(yōu)先級,然后根據(jù)堆棧的增長方向初始化任務控制塊的堆棧,。接著,,F(xiàn)reeRTOS把當前創(chuàng)建的任務加入到就緒任務鏈表。當進行任務調度時,,調度算法首先實現(xiàn)優(yōu)先級調度,。系統(tǒng)按照優(yōu)先級從高到低的順序從就緒任務鏈數(shù)組中選擇當前最高就緒優(yōu)先級,據(jù)此實現(xiàn)優(yōu)先級調度,。若此優(yōu)先級下只有一個就緒任務,,則該任務進入運行狀態(tài),若此優(yōu)先級下有多個就緒任務 則需采用輪換調度算法實現(xiàn)多任務輪流執(zhí)行,。

3.2.2     項目軟件實現(xiàn)

本項目采用Eclipse IDE,,系統(tǒng)上電之后,系統(tǒng)進行硬件和時鐘初始化,,MCU和操作系統(tǒng)的工作方式和工作狀態(tài)進入準備階段,,除了空閑任務,還創(chuàng)建了三個任務:

(1)vUSBPDTask應用于處理PD協(xié)議,,EMARK信息處理,,充電方向,電壓,、電流數(shù)據(jù)采集并計算功率,,耗電功率等數(shù)據(jù),最高優(yōu)先級,;

(2)vUartRxTask串口數(shù)據(jù)接收任務,,用于系統(tǒng)調試,第二優(yōu)先級,;

(3)vSysLcdHandlerTask顯示任務,,可以通過按鍵切換各個顯示界面,為了在各個狀態(tài)下顯示界面不被打亂,,創(chuàng)建 了g_sys_lcd_info.bus_lock互斥信號量,,顯示電壓、電流,、功率、充電方向、用電功率等信息,,第三優(yōu)先級,;

顯示任務執(zhí)行耗時最長,vUSBPDTask需要快速響應,,可以搶占其他任務從而確保PD信息的及時響應和處理,,又不影響顯示屏幕的顯示效果。

軟件流程圖如下:

產(chǎn)品效果如下圖:

本項目產(chǎn)品已經(jīng)批量生產(chǎn),,實現(xiàn)實時多任務操作的同時縮短開發(fā)周期,,保證了產(chǎn)品實時處理EMARK信號、準確快速采集電壓電流等信息,、顯示流暢,,廣受客戶歡迎。

UM3506的DEMO軟件已經(jīng)做好了FreeRTOS的移植,,客戶可以很方便地根據(jù)需求創(chuàng)建自己的任務,,快速開發(fā)產(chǎn)品。**26667778廣芯微電子UM3506 基于FreeRTOS & RISC-V的USB PD協(xié)議實現(xiàn)




更多信息可以來這里獲取==>>電子技術應用-AET<<

本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉載的所有的文章,、圖片,、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者,。如涉及作品內容,、版權和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:aet@chinaaet.com,。