0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FreeRTOS和RISC-V的USB PD協(xié)議實現(xiàn)

廣芯微電子 ? 來源:廣芯微電子 ? 2023-03-07 10:39 ? 次閱讀

1 FreeRTOS簡介

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

優(yōu)先級調(diào)度、相同優(yōu)先級任務(wù)的輪轉(zhuǎn)調(diào)度,同時可設(shè)成可剝奪內(nèi)核或不可剝奪內(nèi)核

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

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

時間管理

內(nèi)存管理

1.1 FreeRTOS特點:

FreeRTOS的特點:

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

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

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

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

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

2 RISC V簡介

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

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

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

2.1 RISC-V的特點

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

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

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

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

RISC-V架構(gòu)的篇幅很短,不用背負(fù)向后兼容的歷史包袱;

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

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

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

3 基于FreeRTOS & RISC V內(nèi)核的PD協(xié)議的應(yīng)用

3.1 UM3506 PD SoC

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

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

3.2 應(yīng)用案例

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

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

3.2.1 FreeRTOS移植

3.2.1.1 portmacro.h 頭文件

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

1.?dāng)?shù)據(jù)類型定義

定義編譯器相關(guān)的各種數(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.架構(gòu)相關(guān)的定義

定義與處理器或控制器架構(gòu)相關(guān)的宏定義。

#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.內(nèi)核調(diào)度函數(shù)

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

extern void vPortYieldFromISR( void );

#define portYIELD() vPortYieldFromISR()

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

#define portEND_SWITCHING_ISR(xSwitchRequired)if(xSwitchRequired)

vPortYieldFromISR()

3.2.1.2port.c 源文件

1.堆棧初始化

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

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

{

/* 計算存儲程序狀態(tài)寄存器xPSR的堆址,用于MCU在進入或退出中斷時恢復(fù)現(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.啟動任務(wù)調(diào)度

portBASE_TYPE xPortStartScheduler( void )

{

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

*(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI;

*(portNVIC_SYSPRI2) |=portNVIC_SYSTICK_PRI;

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

prvSetupTimerInterrupt();

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

uxCriticalNesting = 0;

/* 啟動第一個任務(wù) */

vPortStartFirstTask();

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

return 0;

}

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

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

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

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

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

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

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

軟件流程圖如下:

b68e21c8-bc25-11ed-bfe3-dac502259ad0.png

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

UM3506的DEMO軟件已經(jīng)做好了FreeRTOS的移植,客戶可以很方便地根據(jù)需求創(chuàng)建自己的任務(wù),快速開發(fā)產(chǎn)品。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7876

    瀏覽量

    263699
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
  • PD
    PD
    +關(guān)注

    關(guān)注

    4

    文章

    458

    瀏覽量

    43886
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61915
  • RISC-V
    +關(guān)注

    關(guān)注

    44

    文章

    2204

    瀏覽量

    45958
  • 廣芯微電子
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    175

原文標(biāo)題:基于FreeRTOS & RISC-V的USB PD協(xié)議實現(xiàn)

文章出處:【微信號:廣芯微電子,微信公眾號:廣芯微電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    青稞RISC-V通用系列MCU一覽

    內(nèi)核技術(shù)的授權(quán)費和提成費,通過內(nèi)置和組合USB、PD、低功耗藍牙、以太網(wǎng)等專業(yè)接口外設(shè),構(gòu)建了既有全球未來生態(tài)又能自主可控、且極具長期競爭力的MCU產(chǎn)品線。 產(chǎn)品陣容產(chǎn)品選型 在線選型 [青稞RISC-V通用系列 -(wch.
    發(fā)表于 10-11 09:56

    RISC-V的MCU關(guān)于USB高速通信設(shè)計的難點

    的MCU在實現(xiàn)高速USB通信時,通常需要外掛專業(yè)的高速USB PHY芯片,這不僅占用了MCU的多個GPIO,還增加了PCB面積。RISC-V MCU在設(shè)計上需要解決內(nèi)置高速
    發(fā)表于 05-27 16:23

    rIsc-v的缺的是什么?

    通過軟件模擬或復(fù)雜的指令序列來實現(xiàn)一些高級功能,這可能會增加執(zhí)行時間和功耗。 2. 生態(tài)系統(tǒng)支持不足 軟件和工具鏈的可用性:盡管RISC-V社區(qū)在快速發(fā)展,但與成熟的ARM等架構(gòu)相比,其生
    發(fā)表于 07-29 17:18

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    RISC-V+USB+Type-C PD Type-C接口特色MCU CH32X035,內(nèi)置PDUSB接口,USB數(shù)據(jù)+PD功率傳輸“雙管齊下”。芯片內(nèi)置多運放/比較器、觸摸按鍵、P
    發(fā)表于 08-30 17:37

    如何在RISC-V處理器上使用FreeRTOS

    RISC-V指令集體系結(jié)構(gòu)(ISA)易于擴展,并且沒有指定關(guān)于特定RISC-V微控制器或片上系統(tǒng)(SoC)實現(xiàn)的所有內(nèi)容。因此,FreeRTOS R
    發(fā)表于 11-29 15:54

    為什么選擇RISC-V?

    。例如,如果工程師在FPGA中實現(xiàn)RISC-V內(nèi)核,則通常可以使用RTL源代碼。由于RISC-V免版稅,這為將基于RISC-V的設(shè)計從FPGA移植到ASIC或另一個FPGA帶來了極大
    發(fā)表于 07-27 17:38

    科普RISC-V生態(tài)架構(gòu)(認(rèn)識RISC-V)

    RISC-V指令集基于這一開源領(lǐng)域非常自由的開源協(xié)議發(fā)布時,我們暫且相信這一指令集如該協(xié)議聲明的那樣開放。在RISC-V發(fā)展進程中,去擁抱它,發(fā)展它,合作構(gòu)建一套自主可控且全球公認(rèn)的指
    發(fā)表于 08-02 11:50

    RISC-V架構(gòu)簡介

    【摘要】 本文首先對RISC-V的架構(gòu)做了簡要的介紹,在此基礎(chǔ)上實現(xiàn)了LiteOS在RISC-V架構(gòu)上的適配過程的具體步驟,希望對你有所幫助。1 RISC-V架構(gòu)簡介
    發(fā)表于 07-28 07:46

    RISC-V MCU開發(fā)相關(guān)資料分享

    RISC-V MCU開發(fā) (二):工程創(chuàng)建與管理MounRiver? Studio(MRS)內(nèi)置了GD、WCH等芯片廠家的RISC-V/ARM以及RISC-V通用指令集系列的芯片工程模板,支持
    發(fā)表于 12-09 08:14

    RISC-V簡介

    RISC-V簡介??RISC-V 是一個自由和開放的 ISA(開源指令集架構(gòu)),通過開放的標(biāo)準(zhǔn)協(xié)作實現(xiàn)處理器創(chuàng)新的新時代。RISC-V ISA在架構(gòu)上提供了一個新的自由、可擴展的軟件和
    發(fā)表于 02-27 19:56

    我了解的RISC-V

    )、RISC-V 統(tǒng)一可擴展固件接口(UEFI)規(guī)格,以及 RISC-V Zmmul 純乘法擴展。完全開源 對指令集使用,RISC-V基金會不收取高額的授權(quán)費。開源采用寬松的BSD協(xié)議
    發(fā)表于 03-19 10:52

    FreeRTOSRISC-V——適用于RISC-VFreeRTOS概述

    1.1簡介FreeRTOS中面向RISC-V的接口是易于拓展的,其提供了一系列基本的接口,用于操作適用于所有RISC-V實現(xiàn)中的通用寄存器,以及一系列的宏來處理特定的硬件
    發(fā)表于 04-09 09:26

    RISC-V規(guī)范的演進 RISC-V何時爆發(fā)?

    RISC-V的關(guān)注度越來越高,開源的理念也正在被越來越多的開發(fā)者和公司接受。對于尚不成熟的RISC-V而言,無論是規(guī)范和技術(shù)的演進還是生態(tài)的建設(shè),還有人才和專利都還有不小挑戰(zhàn)。2021年RISC-V
    的頭像 發(fā)表于 02-11 10:10 ?3121次閱讀

    RISC-VRISC-V AI的未來(特邀講座)

    主題演講:RISC-VRISC-V AI的未來(特邀講座)ppt分享
    發(fā)表于 07-14 17:15 ?15次下載

    RISC-V設(shè)計支持工具,支持RISC-V技術(shù)的基礎(chǔ)

    RISC-V設(shè)計支持工具,支持RISC-V技術(shù)的基礎(chǔ) ppt分享
    發(fā)表于 07-14 17:15 ?12次下載