91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

基于具有USB功能的STM32微控制器

電子設(shè)計 ? 來源:電路城 ? 作者:電路城 ? 2021-05-19 17:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

該設(shè)計是一個物理開關(guān),它確定每次打開計算機時要啟動的操作系統(tǒng)。它使用STM32微控制器充當(dāng)USB大容量存儲設(shè)備,并提供一個動態(tài)文件。該文件可以由系統(tǒng)的引導(dǎo)配置加載,以根據(jù)物理輸入來更改其引導(dǎo)行為:

基于具有USB功能的STM32微控制器

組件:

撥動開關(guān)

具有USB功能的STM32微控制器

ST-Link編程

該項目的解決方案是通過代碼編寫的,因此需要一個撥動開關(guān),一個具有USB功能的STM32微控制器和一個ST-Link編程器。

代碼:點擊查看

設(shè)計過程:

啟動Linux,只需按電源按鈕;另一方面,要引導(dǎo)到Windows,則需要在GRUB短暫顯示自己時進行戰(zhàn)術(shù),精確定時的敲擊,以更改選擇:

基于具有USB功能的STM32微控制器

引導(dǎo)加載程序中的腳本

GNU GRUB是一種流行的Linux啟動加載程序-在加載任何操作系統(tǒng)之前運行的程序,它決定啟動什么以及如何啟動它。通常,將與上圖所示的菜單進行交互,但實際上,GRUB是由簡化的腳本語言配置的。在它的下面是用C語言編寫的模塊系統(tǒng)。

GRUB必須在操作系統(tǒng)外部運行,因此必須提供所有自己的工具,因此可用功能相當(dāng)簡單。

在GRUB中可以任意訪問USB設(shè)備嗎?

創(chuàng)建一個具有自定義(“特定于供應(yīng)商”)接口的USB設(shè)備,以讀出開關(guān)位置,就非USB而言,它就像是裸露的串行連接。可以從操作系統(tǒng)訪問,但是不確定GRUB是否可以處理它。

GRUB實現(xiàn)在其原生支持USB ehci、uhci、ohci模塊,但有一個問題-加載任何這些禁用用于訪問磁盤上的常態(tài)機制通過BIOS來避免沖突,讓你有無人接盤。有一個nativedisk模塊可以獨立于BIOS訪問磁盤,但是除了速度慢之外,嚴重地使用該模塊意味著GRUB無法鏈式加載Windows(說明),從而使這種方法成為注銷。

偽裝成USB大容量存儲設(shè)備

可以利用BIOS已經(jīng)為GRUB提供對所有連接的存儲設(shè)備的訪問的事實,而不是創(chuàng)建自定義USB接口。需要做的就是將設(shè)備顯示為存儲設(shè)備,其中包含一個文件,其內(nèi)容指示開關(guān)位置。

從概念上講這很簡單,但是有幾層:

提供大容量存儲類描述符,指示要使用的幾種存儲協(xié)議之一(SCSI,ATA)。

實現(xiàn)所選的存儲協(xié)議。除了用于讀取和寫入扇區(qū)的標準請求外,這是一組用于詢問存儲設(shè)備的功能,容量,布局和其他元數(shù)據(jù)的命令。

讀取時模擬有效的文件系統(tǒng),而實際上沒有任何存儲介質(zhì)。

使用USB狀態(tài)指示燈中已有的支持USB的STM32板卡和代碼,將供應(yīng)商類設(shè)備更改為大容量存儲類設(shè)備只需更改現(xiàn)有USB描述符中的幾個字節(jié)即可。

對于存儲協(xié)議層,發(fā)現(xiàn)它libopencm3具有內(nèi)置的SCSI大容量存儲實現(xiàn),具有簡單read_block(address)和write_block(address)回調(diào)功能,隱藏了存儲協(xié)議的復(fù)雜性:

基于具有USB功能的STM32微控制器

由于這個原因,即使在這個階段它只能讀出無盡的0x00字節(jié)流,仍然可以使用可識別的存儲設(shè)備快速啟動并運行。

基于具有USB功能的STM32微控制器

熟悉FAT

模擬GRUB可以理解的文件系統(tǒng)。格式化存儲設(shè)備,選擇FAT12,因為它的文檔非常齊全,而且布局簡單:

引導(dǎo)扇區(qū):描述卷名稱和幾何形狀的固定結(jié)構(gòu)

文件分配表:一個索引,用于說明磁盤的哪些部分被使用以及分配/碎片化了多大的文件

根目錄條目:文件元數(shù)據(jù)。指向?qū)嶋H文件內(nèi)容所在的位置

[其余磁盤上沒有固定的結(jié)構(gòu)]

經(jīng)過閱讀和修改之后,進行了一個設(shè)置,可以定義虛擬文件列表,并在毫不懷疑的主機要求下即時生成目錄條目和文件內(nèi)容:

struct VirtualFile {

char* longName;

struct FatDirEntry dir;

void (*read) (uint8_t* output);

};

static void readSwtich(uint8_t* output) { // Output is a zeroed-out 512 byte buffer (one block)

output[0] = gpio_get(GPIOA, GPIO6) ? ‘1’ : ‘0’;

}

static struct VirtualFile _virtualFiles[] = {

{

.longName = “switch_position”,

.dir = { .name = “SWITCH~1”, .ext = “ ”, .size = 1 },

.read = readSwtich

},

// 。..

};

轉(zhuǎn)儲塊設(shè)備看起來像這樣:

基于具有USB功能的STM32微控制器

0000h是引導(dǎo)扇區(qū),0200h是FAT的第一個副本,0400h是FAT的第二個副本,0600h是根目錄條目。一共有三個32字節(jié)的目錄條目-兩個長文件名條目,然后是在640h該文件的實際目錄條目。虛擬文件內(nèi)容在4800h讀出。

在GRUB中讀取文件

GRUB沒有將文件內(nèi)容加載到變量中的任何內(nèi)置支持,也不像典型的Linux shell那樣支持命令替換:

# This is BASH and what I wanted to do

# GRUB script unfortunately doesn‘t support this kind of substitution

pos=$(cat /path/to/switch_position)

echo $pos

使用GRUB的“源” 命令從虛擬文件中加載其他配置。這種方法是開箱即用的,并且理論上適用于任何版本的GRUB:

基于具有USB功能的STM32微控制器

根據(jù)開關(guān)位置啟動

使用GRUB外殼中的switch位置了,然后修改系統(tǒng)啟動配置,以根據(jù)此信息進行啟動選擇。

在 /etc/grub.d/00_header中, 將此添加到了 生成的輸出中(刪除了轉(zhuǎn)義符以使其更易于閱讀):

# Look for hardware switch device by its hard-coded filesystem ID

search --no-floppy --fs-uuid --set hdswitch 55AA-6922

# If found, read dynamic config file and select appropriate entry for each position

if [ “${hdswitch}” ] ; then

source ($hdswitch)/switch_position_grub.cfg

if [ “${os_hw_switch}” == 0 ] ; then

# Boot Linux

set default=“0”

elif [ “${os_hw_switch}” == 1 ] ; then

# Boot Windows

set default=“2”

else

# Fallback to default

set default=“${GRUB_DEFAULT}”

fi

else

set default=“${GRUB_DEFAULT}”

fi

運行update-grub生成新的啟動配置后,

硬件安裝

小的鋁制扁桿,幾個螺絲和一些鉆孔。
責(zé)任編輯:pj

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

    關(guān)注

    48

    文章

    7957

    瀏覽量

    155227
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    8193

    瀏覽量

    273191
  • 編程器
    +關(guān)注

    關(guān)注

    9

    文章

    400

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    不同微控制器版的特性

    要開始嵌入式開發(fā),我們需要兩個主要的東西,即開發(fā)板和IDE(集成開發(fā)環(huán)境)。微控制器開發(fā)板是一種印刷電路板(PCB),其電路和硬件設(shè)計用于促進某些微控制器功能的實驗。開發(fā)板與處理
    發(fā)表于 08-07 08:53

    STM32微控制器

    意法半導(dǎo)體(ST)是世界上最大的半導(dǎo)體公司之一,是MCU微控制器的領(lǐng)先者。STM32微控制器是目前的主流產(chǎn)品。如STM32F0 系列產(chǎn)品基于超低功耗的 ARM Cortex-M0 處理
    發(fā)表于 07-23 10:11

    STM32G071CBT6微控制器功能特性

    功能特性STM32G071CBT6 微控制器具有2路 type C 接口,內(nèi)置 USB Power Delivery PHY。LiPow
    發(fā)表于 08-11 06:18

    基于FatFs在32位微控制器STM32上的移植

    基于FatFs在32位微控制器STM32上的移植
    發(fā)表于 09-26 09:31 ?9次下載
    基于FatFs在32位<b class='flag-5'>微控制器</b><b class='flag-5'>STM32</b>上的移植

    STM32系列微控制器存儲與外設(shè)

    STM32系列微控制器存儲與外設(shè)
    發(fā)表于 09-29 14:50 ?7次下載
    <b class='flag-5'>STM32</b>系列<b class='flag-5'>微控制器</b>存儲<b class='flag-5'>器</b>與外設(shè)

    STM32微控制器上的Octo-SPI接口

    STM32微控制器上的Octo-SPI接口
    發(fā)表于 11-21 08:11 ?4次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>微控制器</b>上的Octo-SPI接口

    STM32微控制器系統(tǒng)內(nèi)存啟動模式

    STM32微控制器系統(tǒng)內(nèi)存啟動模式
    發(fā)表于 11-21 08:11 ?0次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>微控制器</b>系統(tǒng)內(nèi)存啟動模式

    AN3156_基于STM32微控制器引導(dǎo)程序的USB_DFU協(xié)議應(yīng)用手冊

    AN3156_基于STM32微控制器引導(dǎo)程序的USB_DFU協(xié)議應(yīng)用手冊
    發(fā)表于 11-21 17:07 ?3次下載
    AN3156_基于<b class='flag-5'>STM32</b><b class='flag-5'>微控制器</b>引導(dǎo)程序的<b class='flag-5'>USB</b>_DFU協(xié)議應(yīng)用手冊

    AN5225_USB Type-C?電源傳輸采用STM32xx Series MCUs和STM32xxx系列微控制器的應(yīng)用手冊

    AN5225_USB Type-C?電源傳輸采用STM32xx Series MCUs和STM32xxx系列微控制器的應(yīng)用手冊
    發(fā)表于 11-21 17:07 ?0次下載
    AN5225_<b class='flag-5'>USB</b> Type-C?電源傳輸采用<b class='flag-5'>STM32</b>xx Series MCUs和<b class='flag-5'>STM32</b>xxx系列<b class='flag-5'>微控制器</b>的應(yīng)用手冊

    AN4879 使用STM32微控制器USB硬件和PCB指南

    AN4879 使用STM32微控制器USB硬件和PCB指南
    發(fā)表于 11-21 17:07 ?13次下載
    AN4879 使用<b class='flag-5'>STM32</b><b class='flag-5'>微控制器</b>的<b class='flag-5'>USB</b>硬件和PCB指南

    EEPROM仿真技術(shù)和軟件 STM32 微控制器

    EEPROM仿真技術(shù)和軟件 STM32 微控制器
    發(fā)表于 11-21 17:07 ?0次下載
    EEPROM仿真技術(shù)和軟件 <b class='flag-5'>STM32</b> <b class='flag-5'>微控制器</b>

    DB4597_STM32WL系列微控制器參考設(shè)計

    DB4597_STM32WL系列微控制器參考設(shè)計
    發(fā)表于 11-23 20:26 ?3次下載
    DB4597_<b class='flag-5'>STM32</b>WL系列<b class='flag-5'>微控制器</b>參考設(shè)計

    STM32微控制器安全簡介

    電子發(fā)燒友網(wǎng)站提供《STM32微控制器安全簡介.pdf》資料免費下載
    發(fā)表于 08-01 14:22 ?0次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>微控制器</b>安全簡介

    STM32微控制器的工作原理和應(yīng)用 STM32微控制器的命名規(guī)則

    STM32微控制器是一種基于ARM Cortex-M內(nèi)核的高性能、低功耗、低成本的微控制器。它廣泛應(yīng)用于各種嵌入式系統(tǒng),包括工業(yè)控制、消費電子、醫(yī)療設(shè)備、汽車電子等領(lǐng)域。
    發(fā)表于 09-07 16:38 ?3074次閱讀

    STM32微控制器的技術(shù)特點和性能指標

      STM32微控制器是ST公司推出的一款基于ARM Cortex-M內(nèi)核的32位微控制器具有高性能、低功耗、高集成度等特點,廣泛應(yīng)用于各種嵌入式系統(tǒng)。本文將對
    發(fā)表于 09-25 17:16 ?5326次閱讀
    主站蜘蛛池模板: 中文永久免费看电视网站入口 | 四虎影像 | 免费能直接在线观看黄的视频 | 日本污全彩肉肉无遮挡彩色 | 免费精品美女久久久久久久久 | 色综合美国色农夫网 | 一级毛片aaa片免费观看 | 美女下面小内内的沟 | 91亚洲视频| 欧美在线一区二区三区 | 国产午夜免费一区二区三区 | 欧美黑人巨大日本人又爽又色 | 日本黄色生活片 | 最近2018中文字幕免费看2019 | caoporn97人人做人人爱最新 | 手机午夜视频 | 国产a三级三级三级 | 狼色视频在线观免费观看 | 在线观看a网站 | 午夜精品影院 | 五月激情综合丁香色婷婷 | 好紧好爽的午夜寂寞视频 | a级毛片网 | 高清欧美一级在线观看 | 欧美人与zoxxxx另类 | 狠狠狠色丁香婷婷综合久久五月 | 可以免费看的黄色片 | 毛片123| 精品久久看| 天天看片天天操 | 日本级毛片免费观看 | 久久天天躁狠狠躁狠狠躁 | 日本不卡在线播放 | www.激情网.com | 夜色福利 | 在线免费看视频 | 正在播放羽月希与黑人bd在线 | 亚洲婷婷国产精品电影人久久 | 欧美一区二区高清 | 国产激情视频一区二区三区 | a级午夜毛片免费一区二区 a看片 |