例程編寫(xiě)
編寫(xiě)的例程是使用FSP提供的usb hcdc中間件,實(shí)現(xiàn)了一個(gè)可使用usb串口設(shè)備的usb主機(jī)。
首先在RT-Thread Studio上新建一個(gè)基于開(kāi)發(fā)板的項(xiàng)目,選擇CPK-RA6M4開(kāi)發(fā)板,建立一個(gè)模板工程。編譯下載后,可以看到LED燈在閃爍,同時(shí)可以在串口終端上使用rtt的FinSH控制臺(tái)。
下一步,打開(kāi)RASC,在stacks頁(yè)面,添加一個(gè)usb hcdc的驅(qū)動(dòng)棧。
這時(shí)候會(huì)提示有錯(cuò)誤,usb模塊使用的UCLK時(shí)鐘頻率不是48MHz的,需要在Clocks頁(yè)面進(jìn)行配置。將PLL2時(shí)鐘源選擇為HOCO,分頻系數(shù)調(diào)到2,倍頻系數(shù)調(diào)到24,即可得到240Mhz的輸出時(shí)鐘。將UCLK的時(shí)鐘源選擇為PLL2,再進(jìn)行5倍分頻,即可得到usb模塊需要的48MHz時(shí)鐘了。
然后我們可以在Pins的頁(yè)面中查看USB_FS0組件的引腳相關(guān)設(shè)置。根據(jù)原理圖,需要將USB_VBUSEN設(shè)置為P500引腳,USB_OVRCURA設(shè)置為P501引腳,USB_VBUS是usbd使用的,用于檢測(cè)usb是否有供電接入,這里不設(shè)置應(yīng)該也是沒(méi)關(guān)系的。
保存點(diǎn)擊Generate Project Content按鈕,RASC會(huì)幫我們更新工程中的FSP代碼,ra 、ra_cfg、ra_gen三個(gè)文件夾的內(nèi)容會(huì)有所改變。下一步是將更新后的FSP代碼加入到工程編譯。如果項(xiàng)目資源管理器中設(shè)置了對(duì)不參與構(gòu)建的文件進(jìn)行隱藏,那么新文件在項(xiàng)目資源管理器中是看不到的,需要打開(kāi)導(dǎo)航器,在導(dǎo)航器中對(duì)需要加入構(gòu)建的文件或文件夾點(diǎn)擊右鍵->資源配置->添加構(gòu)建。我們需要將ra/fsp/src/r_usb_basic和r_usb_hcdc中的文件加入構(gòu)建,在r_usb_basic的src文件夾下還有driver和hw兩個(gè)文件夾,都需要加入構(gòu)建。這時(shí)編譯會(huì)報(bào)有頭文件找不到,在工程配置中手動(dòng)添加一個(gè)頭文件路徑即可。
由于rtt還未對(duì)這款開(kāi)發(fā)板的usb host進(jìn)行支持,所以不需要打開(kāi)rtt設(shè)置中的usb主機(jī)模式開(kāi)關(guān),如果打開(kāi)了,還會(huì)有因宏命名與FSP中的重名導(dǎo)致的編譯警告。
到這里,前期的配置準(zhǔn)備工作就已經(jīng)完成了,需要開(kāi)始寫(xiě)代碼了。在src文件夾下新建一個(gè)usbh_cdc_demo.c文件用于編寫(xiě)我們的例程。
根據(jù)FSP中的API文檔介紹,需要一直調(diào)用R_USB_EventGet接口來(lái)保持底層usb驅(qū)動(dòng)棧的正常工作。所以我們創(chuàng)建一個(gè)線程來(lái)進(jìn)行這個(gè)操作。
在線程中使用一個(gè)狀態(tài)機(jī),根據(jù)每次的event來(lái)進(jìn)行不同的操作,這也是瑞薩提供的例程的寫(xiě)法。
在插入usb設(shè)備后,拿到的event會(huì)變?yōu)閁SB_STATUS_CONFIGURED,這時(shí)候FSP已經(jīng)幫我們枚舉好了設(shè)備,可以直接進(jìn)行控制。下一步是發(fā)送SetLineCoding和SetControlLineState來(lái)配置串口,例如波特率和奇偶校驗(yàn)位等。使用hostControlTransfer發(fā)起一個(gè)控制傳輸。
所有配置工作都結(jié)束后,就可以使用R_USB_Read和R_USB_Write兩個(gè)接口來(lái)接收和發(fā)送串口數(shù)據(jù)了。簡(jiǎn)單地在FinSH中添加一個(gè)命令來(lái)方便我們測(cè)試。
剛好模板工程中的按鍵也是開(kāi)啟使用的狀態(tài),我們?cè)黾右粋€(gè)回調(diào)來(lái)按鍵發(fā)送串口數(shù)據(jù)。
編譯下載,使用一個(gè)micro usb轉(zhuǎn)USB-A的otg連接線,就可以接入一個(gè)usb串口設(shè)備使用了。剛好手上還有上次參加開(kāi)發(fā)者大會(huì)的活動(dòng)獲得的板子,于是在上面簡(jiǎn)單寫(xiě)了一個(gè)usbd_cdc的程序,將它們連接起來(lái)。
CheeryUSB移植嘗試
打開(kāi)RT-Thread Settings,在里面找到CherryUSB軟件包,添加到工程中,保存后,RT-Thread會(huì)自動(dòng)從github上拉取CheeryUSB的源碼放置到packages/CherryUSB-latest目錄下,然后將需要構(gòu)建的文件加入到構(gòu)建中。需要包括core、osal、port、class四個(gè)文件夾下的文件,其中core是協(xié)議棧的核心實(shí)現(xiàn)部分,osal是操作系統(tǒng)抽象層,port存放移植需要實(shí)現(xiàn)的內(nèi)容,class則是針對(duì)不同的usb設(shè)備類型編寫(xiě)的驅(qū)動(dòng)代碼。osal/usb_osal_rtthread.c文件表明CheeryUSB對(duì)RT-Thread系統(tǒng)是有完善支持的。
usb host的部分,CherryUSB的作者還沒(méi)出教程,這部分的文檔也還沒(méi)有,只能繼續(xù)觀察已有的代碼來(lái)猜測(cè)著移植。一開(kāi)始像直接借助FSP的usb_basic來(lái)做移植,直接使用R_USB_Open、R_USB_Read等API,結(jié)果發(fā)現(xiàn)FSP已經(jīng)封裝得很好了,細(xì)節(jié)操作都沒(méi)暴露出來(lái),把整個(gè)設(shè)備枚舉的過(guò)程都隱藏了起來(lái),每個(gè)API的操作也都加了很多條件判斷,不便于移植。那就只能看寄存器手冊(cè),通過(guò)直接操作寄存器來(lái)完成操作了。
自己對(duì)USB協(xié)議只能說(shuō)稍有了解,對(duì)CheeryUSB和瑞薩系列芯片的寄存器也都不熟悉,移植起來(lái)確實(shí)非常困難,只能一直讀FSP的代碼,對(duì)著寄存器手冊(cè)去理解。
后續(xù)時(shí)間也不充裕,還是沒(méi)能成功移植CheeryUSB,只能再到后面等待其他大佬來(lái)搞了。
性能測(cè)試
原本想要做的功能是usb hmsc的,也就是可以外接U盤(pán)等存儲(chǔ)設(shè)備,如果是這樣的話,就可以進(jìn)行一些讀寫(xiě)測(cè)速來(lái)測(cè)試性能指標(biāo)了。但是現(xiàn)在換成了usb hcdc,手上現(xiàn)有的usb串口工具波特率調(diào)不到很高,也沒(méi)有使用DMA來(lái)做傳輸,感覺(jué)測(cè)試不到最快傳輸速度,所以這個(gè)環(huán)節(jié)只能略過(guò)了。
代碼與參考資料
源碼已經(jīng)開(kāi)源到了github上,感興趣的同學(xué)可以識(shí)別下方二維碼或復(fù)制下方鏈接在瀏覽器中打開(kāi),前往github網(wǎng)頁(yè)上查看參考。
cpk-ra6m4-usbh-cdc-demo
https://github.com/VxTeemo/cpk-ra6m4-usbh-cdc-demo
更多參考資料
Renesas USB MCU USB Basic Host and Peripheral Driver using.pdf
https://oss-club.rt-thread.org/uploads/20220406/12e477786db53794f1bb48c6c1b66fd9.pdf
CPK-RA6M4用戶手冊(cè)
https://oss-club.rt-thread.org/uploads/20220406/bd0c6707ec63aa179b2a337d5dbd2233.pdf
RA6M4 datasheet
https://oss-club.rt-thread.org/uploads/20220406/0fa9ca3da04f687db684a4e6f9230725.pdf
RA6M4_Group_User’s_Manual_Hardware.pdf
https://oss-club.rt-thread.org/uploads/20220406/92c2218e2db4b08cff4b6f34cb61268b.pdf
CPK-RA6M4 MCU評(píng)估板原理圖.pdf
https://oss-club.rt-thread.org/uploads/20220406/460d66bee9aa09a6036f302890ebc737.pdf
向左滑動(dòng)查看更多
心得體會(huì)
拿到開(kāi)發(fā)板后,感覺(jué)還是具有一定挑戰(zhàn)性的,首先是usb這個(gè)外設(shè)并沒(méi)有現(xiàn)成的驅(qū)動(dòng),而且我自己對(duì)usb協(xié)議也不算很熟悉。在摸索了一段時(shí)間后,最初的目標(biāo)是打算做一個(gè)usb存儲(chǔ)設(shè)備的主機(jī),可以用來(lái)讀取U盤(pán)等usb存儲(chǔ)設(shè)備,在FSP中添加了usb hmsc的棧時(shí)發(fā)現(xiàn)必須要帶操作系統(tǒng)而現(xiàn)在支持的只有FreeRTOS,并且使用的文件系統(tǒng)是FATFS。RT-Thread里面使用的文件系統(tǒng)是elm chan FatFs,嘗試加進(jìn)去之后做下移植,以前只移植過(guò)有完善支持的文件系統(tǒng),對(duì)這種情況還是不大處理得了,于是作罷。先完成一個(gè)usb hcdc的例程。
在編寫(xiě)例程的過(guò)程中,也去了解了一下CherryUSB(詳見(jiàn)github官網(wǎng)),這是一個(gè)非常優(yōu)秀的usb device/host驅(qū)動(dòng),于是便嘗試將RA6M4也添加支持。觀察了一下工程結(jié)構(gòu),需要在port文件夾下編寫(xiě)移植代碼,之前群里也有人說(shuō)RA6M4的usb IP是叫做fsdev,里面確實(shí)有這么一個(gè)文件夾,只有usb device的實(shí)現(xiàn),里面操作的寄存器和現(xiàn)在這款單片機(jī)是對(duì)不上的,到處搜了一圈也沒(méi)有關(guān)于fsdev和RA6M4 usb IP相關(guān)的內(nèi)容,只能繼續(xù)憑著感覺(jué)移植??傮w來(lái)說(shuō)這次的評(píng)測(cè)體驗(yàn)還是非常不錯(cuò)的。
芯片中還有設(shè)計(jì)用于存儲(chǔ)數(shù)據(jù)的8KB Data Flash,可以不用將ROM做數(shù)據(jù)空間使用了,無(wú)需外接SPI存儲(chǔ)芯片就可以實(shí)現(xiàn)方便的非易失數(shù)據(jù)存儲(chǔ),也不需要考慮和代碼共用空間產(chǎn)生的種種問(wèn)題,甚至還能更好地實(shí)現(xiàn)平衡磨損,這個(gè)設(shè)計(jì)還是很不錯(cuò)的。
在RASC中新增了usb的stack之后,rt-thread studio并不能自動(dòng)識(shí)別新增文件并加入到構(gòu)建中,其他的模塊好像是沒(méi)問(wèn)題的,不知道是不是usb驅(qū)動(dòng)這邊多了一層hw和driver文件夾的原因。需要手動(dòng)添加構(gòu)建就可以解決。
現(xiàn)在大部分設(shè)備都已經(jīng)使用type-c接口了,micro usb的設(shè)備越來(lái)越少,現(xiàn)在手上有一堆type-c轉(zhuǎn)USB-A的轉(zhuǎn)接頭,但是為了這次測(cè)試,還是需要另外購(gòu)買(mǎi)micro usb轉(zhuǎn)USB-A的轉(zhuǎn)接頭。micro usb接口相比type-c接口確實(shí)是有更穩(wěn)定、兼容性更強(qiáng)等優(yōu)點(diǎn),但個(gè)人還是希望能升級(jí)到type-c接口。
1
END
1
往期推薦
1
瑞薩RA產(chǎn)品家族初學(xué)者指南
2
RA6M4通過(guò)DTC實(shí)現(xiàn)ADC多次采樣
3
[瑞薩RA產(chǎn)品家族]器件生命周期管理密鑰安裝應(yīng)用筆記
瑞薩電子 (TSE: 6723)
科技讓生活更輕松,致力于打造更安全、更智能、可持續(xù)發(fā)展的未來(lái)。作為全球微控制器供應(yīng)商,瑞薩電子融合了在嵌入式處理、模擬、電源及連接方面的專業(yè)知識(shí),提供完整的半導(dǎo)體解決方案。成功產(chǎn)品組合加速汽車、工業(yè)、基礎(chǔ)設(shè)施及物聯(lián)網(wǎng)應(yīng)用上市,賦能數(shù)十億聯(lián)網(wǎng)智能設(shè)備改善人們的工作和生活方式。
更多信息,敬請(qǐng)?jiān)L問(wèn)renesas.com
原文標(biāo)題:【開(kāi)發(fā)板評(píng)測(cè)筆記】Renesas RA6M4開(kāi)發(fā)板之USB-H(下)
文章出處:【微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
mcu
+關(guān)注
關(guān)注
146文章
17316瀏覽量
352365 -
瑞薩
+關(guān)注
關(guān)注
35文章
22310瀏覽量
86640 -
RA6M4
+關(guān)注
關(guān)注
0文章
51瀏覽量
474
原文標(biāo)題:【開(kāi)發(fā)板評(píng)測(cè)筆記】Renesas RA6M4開(kāi)發(fā)板之USB-H(下)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論