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

廣芯微電子UM3506 基于FreeRTOS & RISC-V的USB PD協議實現

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

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

1  FreeRTOS簡介

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

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

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

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

時間管理

內存管理

1.1  FreeRTOS特點:

FreeRTOS的特點:

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

支持 40 多種架構 代碼庫支持 40 多種 MCU 架構和15 多種工具鏈,包括最新的 RISC-V 和 ARMv8-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.2   port.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的移植,客戶可以很方便地根據需求創建自己的任務,快速開發產品。**26667778廣芯微電子UM3506 基于FreeRTOS & RISC-V的USB PD協議實現




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

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩精品国产| 亚洲国产日韩欧美在线图片 | 亚洲电影中文字幕| 亚洲欧美一区二区激情| 激情综合网激情| 一区二区三区高清| 影音先锋久久久| 欧美一级夜夜爽| 日韩视频一区二区三区| 久久久久久高潮国产精品视| 亚洲区国产区| 久久久久久网站| 亚洲专区一区| 欧美日韩精品欧美日韩精品| 午夜精品福利一区二区蜜股av| 欧美专区在线观看一区| 欧美日韩亚洲网| 99精品国产福利在线观看免费| 激情婷婷亚洲| 狼狼综合久久久久综合网| 午夜精品久久久久久久久久久久久 | 免费成人高清| 亚洲国产精品福利| 在线日韩中文| 欧美国产先锋| 一个色综合av| 中文欧美字幕免费| 国产精品美女999| 欧美综合第一页| 久久国产乱子精品免费女| 国产亚洲欧美日韩精品| 久久精品在线| 亚洲电影免费观看高清完整版在线观看 | 久久一区二区三区国产精品| 久久成人免费视频| 在线播放日韩专区| 欧美精品一区二区三区很污很色的| 亚洲三级影院| 这里只有视频精品| 国产精品日韩在线| 久久九九久久九九| 亚洲美女精品久久| 一区二区三区视频在线观看| 国产精品资源| 久久综合九色欧美综合狠狠| 亚洲欧洲日本一区二区三区| 亚洲国产日韩欧美在线99| 欧美日韩国产成人高清视频| 亚洲自拍啪啪| 久久大逼视频| 亚洲四色影视在线观看| 国产一区二区三区四区五区美女 | 91久久精品国产91久久性色| 一本色道久久综合亚洲精品高清| 国产精品视频一区二区三区| 老司机免费视频久久| 亚洲一区国产| 99精品久久| 性欧美1819sex性高清| 亚洲精品色婷婷福利天堂| 国产啪精品视频| 欧美日韩一区二区三区| 久久久亚洲国产天美传媒修理工| 亚洲视频第一页| 亚洲精品社区| 亚洲欧洲日产国产网站| 午夜欧美精品久久久久久久| 日韩视频免费在线观看| 影音欧美亚洲| 激情文学一区| 国产在线观看一区| 国产精品三级久久久久久电影| 亚洲欧美综合国产精品一区| 在线成人激情黄色| 久久精品国产亚洲高清剧情介绍| 一区二区三区高清不卡| 最新国产成人在线观看| 久久精品国产在热久久| 西西人体一区二区| 亚洲免费在线视频一区 二区| 日韩午夜中文字幕| 日韩视频永久免费观看| 亚洲美女视频在线免费观看| 亚洲三级免费| 99国内精品久久| 一本色道久久加勒比精品| 亚洲欧洲一区| 一本久道久久综合婷婷鲸鱼| 日韩一区二区福利| 99精品国产在热久久婷婷| 一本色道久久加勒比88综合| 99精品99| 亚洲欧美日韩另类| 久久精品国产综合精品| 亚洲欧洲一区二区在线播放 | 国内精品国语自产拍在线观看| 经典三级久久| 亚洲国产精品一区制服丝袜| 亚洲精品久久久久久一区二区| 亚洲三级视频在线观看| 99re6热只有精品免费观看| 亚洲午夜激情免费视频| 亚洲欧美国产毛片在线| 久久精品国产第一区二区三区最新章节| 久久爱www| 亚洲作爱视频| 久久久久国内| 欧美日韩国产在线看| 国产精品午夜在线观看| 黑人极品videos精品欧美裸| 亚洲激情一区二区| 亚洲欧美视频在线| 9色精品在线| 久久精品国内一区二区三区| 欧美精品v国产精品v日韩精品| 欧美日一区二区在线观看 | 中文在线不卡视频| 久久精品五月婷婷| 欧美日韩18| 一区二区三区在线高清| 亚洲少妇自拍| 日韩午夜在线播放| 久久九九精品99国产精品| 欧美日韩国产美| 国内精品模特av私拍在线观看| 亚洲精品自在久久| 亚洲韩国精品一区| 久久精品视频免费播放| 国产精品vvv| 亚洲精品偷拍| 亚洲欧洲日本专区| 老司机一区二区三区| 国产日韩欧美亚洲一区| 一本一本久久a久久精品牛牛影视| 亚洲大胆女人| 中文一区二区| 欧美剧在线观看| 亚洲国产视频直播| 亚洲国产精品va| 久久蜜桃香蕉精品一区二区三区| 国产精品一二三四区| 亚洲视频999| 亚洲网站在线看| 欧美午夜无遮挡| 亚洲视频免费在线| 亚洲欧美大片| 国产精品日韩久久久| 亚洲一区视频在线| 欧美亚洲一级片| 国产精品一区毛片| 久久精品30| 免费一级欧美片在线观看| 精品999在线观看| 亚洲国产欧美日韩| 欧美精品一区二区三区蜜臀| 日韩一区二区精品视频| 亚洲欧美精品在线观看| 国产精品视频久久| 欧美综合激情网| 欧美96在线丨欧| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美一区=区| 伊人久久婷婷| 亚洲一区二区在线| 国产一区香蕉久久| 亚洲一区二区不卡免费| 亚洲特黄一级片| 亚洲人人精品| 国产精品久久久久国产精品日日| 亚洲一区视频在线观看视频| 久久高清国产| 亚洲精品久久久久中文字幕欢迎你| 亚洲色诱最新| 国产一区二区黄色| 一本色道久久综合亚洲精品不卡| 国产精品区一区二区三| 亚洲高清成人| 国产精品综合| 正在播放日韩| 在线成人av| 久久狠狠婷婷| 亚洲视频欧美视频| 欧美韩国日本综合| 欧美在线日韩| 国产精品视频yy9099| 亚洲人成在线播放| 国产欧美欧美| 欧美一区二区三区视频免费| 最新日韩在线| 农村妇女精品| 亚洲国产成人精品女人久久久| 国产精品人人爽人人做我的可爱 | 一区二区日韩欧美| 在线视频观看日韩| 久久久成人精品| 亚洲欧美中文日韩在线| 国产精品视频免费一区| 亚洲欧美不卡| 亚洲综合电影| 国产日韩欧美二区|