国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

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

從STM32F103到ACM32F403的U盤程序移植工程

上海航芯 ? 來源:上海航芯 ? 作者:上海航芯 ? 2021-12-23 14:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

本項(xiàng)目是以SPI Flash(如W25Q128等)存儲(chǔ)元件作為存儲(chǔ)單元,MCU主控完成USB接口通信并根據(jù)SCSI協(xié)議實(shí)現(xiàn)U盤功能。其結(jié)構(gòu)如下圖所示:

pYYBAGHEE_WAeyirAAAcvPlG0h4753.png

SPI Flash部分移植

SPI功能部分相對(duì)簡單,ACM32F403的接口引腳和STM32F103的相同,可直接對(duì)接,按照ACM32F403的說明對(duì)SPI接口進(jìn)行初始化,并對(duì)底層讀寫函數(shù)進(jìn)行更改即可。

USB部分移植

1. STM32F103代碼結(jié)構(gòu)

在ST的芯片上,USB的數(shù)據(jù)是由兩個(gè)中斷,USB_LP_CAN1_RX0_IRQHandler和USB_HP_CAN1_TX_IRQHandler來進(jìn)行,其中高優(yōu)先級(jí)中斷(USB_HP_CAN1_TX_IRQHandler)用于處理同步(Isochronous)模式傳輸或雙緩沖塊(Bulk)傳輸模式下的正確傳輸事件,而低優(yōu)先級(jí)中斷(USB_LP_CAN1_RX0_IRQHandler)用于處理其他傳輸時(shí)間。ST的USB數(shù)據(jù)處理如下圖所示:

poYBAGHEFBSAABCJAAGBMBY2Rik368.png

由于USBFS協(xié)議的限制,一包數(shù)據(jù)中最多可攜帶64字節(jié)數(shù)據(jù),因此,當(dāng)存在大量數(shù)據(jù)需要進(jìn)行傳輸(IN或OUT包)時(shí),需要分批次進(jìn)行傳輸。在ST的代碼中,通過變量“Bot_State”來進(jìn)行控制,以Read10指令為例,其讀數(shù)據(jù)流程可如下圖所示:

poYBAGHEFCiAPj79AAIZklrheBo449.png

需要注意的是,Read10指令解析完成之后(即上圖左側(cè)流程圖)則進(jìn)入數(shù)據(jù)傳輸階段,此階段是通過多次進(jìn)入U(xiǎn)SB高優(yōu)先級(jí)中斷中,調(diào)用Read_Memory();來實(shí)現(xiàn)的。Read_Memory();函數(shù)內(nèi)每次傳輸64字節(jié)數(shù)據(jù)。

2. ACM32F403代碼移植要點(diǎn)

本文基于上海航芯官方USB例程進(jìn)行移植,移植后的程序結(jié)構(gòu)如下圖所示:

poYBAGHEFDuAcaoMAADWiksCJaQ150.png

ACM32F403的USB是采用一個(gè)中斷來進(jìn)行數(shù)據(jù)處理。在官方例程中,USB的中斷函數(shù)內(nèi)判定接收數(shù)據(jù)類型,包括suspend,resume,reset,EP0_pack以及其他端點(diǎn)的接收數(shù)據(jù)。判定結(jié)束后,會(huì)調(diào)用USB_Monitor();函數(shù)來處理suspend,resume,reset以及EP0_pack數(shù)據(jù)。而其他端點(diǎn)數(shù)據(jù)會(huì)在usb_transfer_monitor();函數(shù)中進(jìn)行解析,該函數(shù)由客戶調(diào)用,一般在主函數(shù)的死循環(huán)中進(jìn)行處理。在本文的移植中,主要需對(duì)USB的端點(diǎn)數(shù)據(jù)進(jìn)行處理。

A. EP0_Pack

EP0接收的setup數(shù)據(jù)會(huì)被存放在SETIP_0_3_DATA和SETIP_4_7_DATA寄存器中 ,數(shù)據(jù)結(jié)構(gòu)如下所示:

dev_req.bmRequestType=USBCTRL->SETIP_0_3_DATA &0xff;

dev_req.bRequest=(USBCTRL->SETIP_0_3_DATA>>8)&0xff;

dev_req.wValue=(USBCTRL->SETIP_0_3_DATA>>16)&0xffff;

dev_req.wIndex = USBCTRL->SETIP_4_7_DATA&0xffff;

dev_req.wLength=(USBCTRL->SETIP_4_7_DATA>>16)&0xffff;

該部分解析,可由用戶在函數(shù)void usb_control_transfer(void)中添加需要的處理函數(shù)。該函數(shù)由航芯官方例程里提供。在做U Disk程序移植時(shí),需添加GetMaxLun和Storage_Reset處理函數(shù),如下圖所示:

pYYBAGHEFEmAeQ_4AAAXy3Fvpe4520.png

B. EP1_Pack

在本文所述的代碼中,ACM32F403采用EP1完成數(shù)據(jù)的收發(fā)工作。主要是完成對(duì)SCSI協(xié)議的解析工作。移植過程中,需要文件mass_mal.c、memory.c、scsi_data.c、usb_scsi.c、usb_bot.c及其頭文件。本段主要就上述文件中代碼需要改動(dòng)的地方進(jìn)行說明,部分參數(shù)需要重新定義,讀者可自行解決。下表列出了ST和Aisino的USB收發(fā)功能函數(shù),該部分移植時(shí)需要修改的主要部分:

pYYBAGHEFFaAZ_OdAAGrUNCnfJM199.png

a. void Mass_Storage_In (void)

在ST的工程代碼中該部分主要用于處理SCSI的讀指令。由于全速USB一包數(shù)據(jù)最大支持64字節(jié),因此,當(dāng)需要傳輸?shù)臄?shù)據(jù)個(gè)數(shù)大于該數(shù)值時(shí),則需要分包傳輸。在使用ACM32F403時(shí),可直接傳送需要的數(shù)據(jù)長度,內(nèi)部會(huì)進(jìn)行分包處理,因此,該函數(shù)可省略。

b. void Mass_Storage_Out (void)

該函數(shù)用于處理SCSI指令解析以及發(fā)送指令,需在usb_transfer_monitor()中調(diào)用,并將函數(shù)內(nèi)部的接收數(shù)據(jù)部分更改為:

“Data_Len = HAL_FSUSB_Receive_Data(Bulk_Data_Buff, 64, out_ep_index, 1);”

c.void Transfer_Data_Request(uint8_t* Data_Pointer, uint16_t Data_Len)

將USB發(fā)送函數(shù)更改為ACM32F403對(duì)應(yīng)的發(fā)送函數(shù)。在ST的工程中,該函數(shù)用于傳輸完數(shù)據(jù)后,進(jìn)入BOT_DATA_IN_LAST狀態(tài),并在下一次的Mass_Storage_In()函數(shù)調(diào)用時(shí),回復(fù)CSW指令。而本文的移植代碼中,省略了Mass_Storage_In()函數(shù),因此,可在該函數(shù)的尾部增加CSW發(fā)送指令:

Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);

d.void Set_CSW (uint8_t CSW_Status, uint8_t Send_Permission)

將USB發(fā)送函數(shù)更改為ACM32F403對(duì)應(yīng)的發(fā)送函數(shù)。

e.void Bot_Abort(uint8_t Direction)

該函數(shù)主要對(duì)收發(fā)端點(diǎn)的STALL狀態(tài)進(jìn)行處理,在ACM32F403的收發(fā)庫函數(shù)中,對(duì)端點(diǎn)的STALL已做出相應(yīng)控制,因此,該函數(shù)可省略。

f.void Read_Memory(uint8_t lun, uint32_t Memory_Offset, uint32_t Transfer_Length)

Read_Memory函數(shù)用于收到PC端的IN包請(qǐng)求后將存儲(chǔ)器中的數(shù)據(jù)讀取并發(fā)送至PC端。而ACM32F403的USB發(fā)送庫函數(shù)中,自行進(jìn)行分包操作(一包最大數(shù)據(jù)為64字節(jié)),因此在數(shù)據(jù)緩沖區(qū)容量允許條件下,可直接發(fā)送完畢,該函數(shù)修改如下:

{

uint32_t Offset, Length;

Offset = Memory_Offset * Mass_Block_Size[lun];

Length = Transfer_Length * Mass_Block_Size[lun];

CSW.dDataResidue = CBW.dDataLength;

while(Transfer_Length --)

{

MAL_Read(lun ,

Offset ,

Data_Buffer,

Mass_Block_Size[lun]);

Length = min(Mass_Block_Size[lun], CSW.dDataResidue);

Offset += Mass_Block_Size[lun];

HAL_FSUSB_Send_Data((uint8_t *)(Data_Buffer), Length, in_ep_index);

CSW.dDataResidue -= Length;

}

Set_CSW (CSW_CMD_PASSED, SEND_CSW_ENABLE);

}

g.void Write_Memory (uint8_t lun, uint32_t Memory_Offset, uint32_t Transfer_Length)

寫數(shù)據(jù)指令完成后,將Bot_State 值更改為 BOT_IDLE。ST的工程代碼中,變量“Bot_State”收發(fā)狀態(tài)機(jī)的狀態(tài)值,其值如下表所示:

poYBAGHEFHCARKM7AAInEow6Qbw876.png

而基于ACM32F403的U Disk工程,IN包可由函數(shù)HAL_FSUSB_Send_Data()在其內(nèi)部進(jìn)行分包處理,不需要額外邏輯,因此,移植后Bot_State僅需要在BOT_IDLE、BOT_DATA_OUT、BOT_ERROR之間轉(zhuǎn)換,其他對(duì)Bot_State的控制可省略。

審核編輯:符乾江

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

    關(guān)注

    147

    文章

    18925

    瀏覽量

    398241
  • STM32
    +關(guān)注

    關(guān)注

    2309

    文章

    11162

    瀏覽量

    373462
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CW32L012與STM32F103的三角運(yùn)算性能對(duì)比

    ? ?CW32L012和STM32F103在定位和性能上差異顯著,在三角函數(shù)的運(yùn)算性能上的對(duì)比亦非常直觀。 一、 硬件架構(gòu)對(duì)比(性能基礎(chǔ)) 芯片型號(hào) CW32L012C8 STM32F103
    的頭像 發(fā)表于 12-29 15:32 ?2324次閱讀
    CW32L012與<b class='flag-5'>STM32F103</b>的三角運(yùn)算性能對(duì)比

    【新品上市】華清遠(yuǎn)見AIoT實(shí)戰(zhàn)平臺(tái)-STM32F103&amp;amp;ESP32-S3 AI開發(fā)板套件,玩轉(zhuǎn)小智AI桌寵機(jī)器狗智能車等項(xiàng)目

    F103&ESP32-S3AI開發(fā)板是華清遠(yuǎn)見針對(duì)嵌入式與AI開發(fā)市場(chǎng)需求,打造的高性能、低成本AIoT實(shí)戰(zhàn)平臺(tái)。該開發(fā)板采用雙核心設(shè)計(jì),整合了STM32F103與ESP32-S3兩款芯片
    的頭像 發(fā)表于 11-03 16:18 ?1343次閱讀
    【新品上市】華清遠(yuǎn)見AIoT實(shí)戰(zhàn)平臺(tái)-<b class='flag-5'>STM32F103</b>&amp;amp;ESP32-S3 AI開發(fā)板套件,玩轉(zhuǎn)小智AI桌寵機(jī)器狗智能車等項(xiàng)目

    CPPDEFINES = [\'STM32F103xB\']如何選擇?

    移植時(shí)SConscript中 CPPDEFINES = [‘STM32F103xB’]如何選擇目標(biāo)芯片:STM32F103VC
    發(fā)表于 10-11 12:56

    MH32F103A系列單片機(jī)的功能特性

    MH32F103A是一款硬件完美兼容ST32的國產(chǎn)32位單片機(jī),使用高性能的ARM Cortex-M3 內(nèi)核,最高工作頻率216 MHz。內(nèi)置最大512K Flash,96K Sram存儲(chǔ)器。MH32F103A 軟硬件兼容STM32F1
    的頭像 發(fā)表于 09-12 10:58 ?1123次閱讀
    MH32<b class='flag-5'>F103</b>A系列單片機(jī)的功能特性

    AT32F403A硬件I2C與機(jī)通信

    示例目的 演示AT32F403A硬件I2C與機(jī)通信。 注:本應(yīng)用筆記對(duì)應(yīng)的代碼是基于雅特力提供的V2.x.x 板級(jí)支持包(BSP)而開發(fā),對(duì)于其他版本BSP,需要注意使用上的區(qū)別。 支持
    發(fā)表于 09-10 16:59

    STM32F103長時(shí)間運(yùn)行,串口發(fā)送失敗怎么解決?

    STM32F103長時(shí)間運(yùn)行,串口發(fā)送失敗,目前定位一致卡在USART_FLAG_TC判斷那里,我們采用輪詢的方式發(fā)送數(shù)據(jù),然后判斷USART_FLAG_TC是否發(fā)送成功,在大量發(fā)送后出現(xiàn)了一次發(fā)送后USART_FLAG_TC沒有置位,然后就一直卡在這里了,這可如何是好
    發(fā)表于 07-30 07:55

    STM32F103c8上做DLQR最優(yōu)控制算法的C編程資料

    這是我近期做的一個(gè)項(xiàng)目--基于STM32F103c8的DLQR控制算法的C編程,涉及DLQR最優(yōu)控制算法、嵌入式STM32F103編程、CMSIS-DSP庫使用。? ??附有完整的程序。
    發(fā)表于 07-23 15:30 ?0次下載

    STM32F103驅(qū)動(dòng)LD3320語音識(shí)別模塊

    本文介紹了如何使用STM32F103微控制器驅(qū)動(dòng)LD3320語音識(shí)別模塊,該模塊具備非特定人語音識(shí)別功能,支持動(dòng)態(tài)編輯關(guān)鍵詞,且無需額外Flash和RAM。通過SPI接口連接并配置代碼,實(shí)現(xiàn)在不同指令下執(zhí)行相應(yīng)操作,如流水燈、閃爍等。實(shí)驗(yàn)結(jié)果顯示,STM32能成功識(shí)別并響
    的頭像 發(fā)表于 06-28 14:16 ?1639次閱讀
    <b class='flag-5'>STM32F103</b>驅(qū)動(dòng)LD3320語音識(shí)別模塊

    STM32F103C6T6 DCAC逆變器原理圖

    STM32F103C6T6 DCAC逆變器原理圖
    發(fā)表于 05-19 17:48 ?2次下載

    CS32F103RB有無驅(qū)動(dòng)例程,是否可用stm32F103的驅(qū)動(dòng)代碼?

    如果不能使用stm32F103驅(qū)動(dòng)的話,請(qǐng)把驅(qū)動(dòng)例程發(fā)送1830665518@qqcom
    發(fā)表于 05-15 10:54

    stm32f103c8t6主控芯片無人機(jī)原理圖

    stm32f103c8t6主控芯片無人機(jī)原理圖
    發(fā)表于 04-29 17:02 ?3次下載

    STM32F103x8 STM32F103xB單片機(jī)數(shù)據(jù)手冊(cè)

    STM32F103x8STM32F103xB單片機(jī)數(shù)據(jù)手冊(cè)
    發(fā)表于 04-14 14:55 ?8次下載

    STM32F103×8/STM32F103×B MCU手冊(cè)

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的訂購信息和機(jī)械器件特性。有關(guān)整個(gè)STMicroelectronics STM32F103xx系列的更多信息,請(qǐng)
    發(fā)表于 03-18 16:37 ?0次下載

    STM32F103VFT6的程序能直接在STM32F103VGT6上運(yùn)行嗎?

    STM32F103VGT6能代替 STM32F103VFT6嗎? 也就是STM32F103VFT6的程序能直接在STM32F103VGT6
    發(fā)表于 03-12 06:39

    stm32f103cbu6底部焊能不能連接到VSS?

    stm32f103cbu6底部焊能不能連接到VSS
    發(fā)表于 03-10 07:51