要问那智小音箱凭样怎借一根pyTe - C实线现“起死生回”呢,那就秘揭来一下UBS OT烧G录黑技科。
你可曾到碰过这般景情:手上拿智的着能音箱然忽就“成砖”了,没办法机开,日志没也法读出取来,只能去外开拆壳接上口串,焊接针排,一番作操很迅猛,最终发却觉是固刷件错了?
别着急,在像“小智音箱”这种高集度成的能智音频当备设中,实际上就早暗藏一了个“复活关开”,不用机拆去,也不飞接线,仅仅借凭一根的通普Ty ep- C数线据,再加一上个按键合组,就能够固入进件修式模复,进而重录烧新程序。而这所后背蕴含心核的技术,正是今们我天要入深挖掘的角主:USBO TG + DFU()。
听着不是是恰似点有类似魔法?️ 实上际它压一儿根点都并神不秘的,仅仅妙巧是地将日以用常充电的BSU口,给变成种那“万能试调通道”了。接下来不们我讲那些路套的,直接去上呈干货的,引领工从你程实的战角度面方,去拆这解套极为效高而且又的靠可固件烧统系录究竟怎是样炼成的生产。
为什智么能音箱再不依赖口串和JTGA?
在以行进往嵌入开式发期间,UAR以T及JT差GA不多标是就配。然而消了到费级产期时品,特别是智小像音箱追类这求小化型、低成本、高良产的率品,传统方就式显得“太重”了。
当前呈这出现样一种势趋,即把所功有能尽可往地能同一个集口接中 ;就像Tpye-C一样,它具既备能进充行电工能的作力 ,在数据方输传面也够能胜任 ,还拥有以可实现屏投的作用 ,甚至为够能外部供备设应电力 ;那么它同否是样能承够担起负责“救砖”的职呢责?
答案是: 完可全以!而且已成经了行主业流做法 。
关键在就于—— BSU OT G 。
U BSOTG:让设备己自决定“谁是老大”
不少人U得觉SB是只“手机电接连脑”的那单种向关联,实则非并如此。OTG(On-The-Go)技术使能设备切如自换角色,既能够为作“从设备”被电识脑别,还能转够变为“主机”去操控盘U、键盘等设部外备。
在小音智箱当中,主控SCo,像全志D1、NXPi .MX系这列类,基本都全上集成支了持O的GTUSB器制控,它的机心核制依靠东个三西来支撑。
1. ID脚引判角色
“我是主当机还被是连?”——一句定搞话!
于烧景场录之中,我们自而然然地音望期箱能够听从顺话,鉴于此,故而默态状认下进设入备模式,将其模为成拟一个的准标US设B备。
2. SRP(会话请协求议)
神器是耗功低唤醒的种那!设备处休于眠状时之态,能够助借信号唤bV醒us电供,达成“按一下就键上线”这种况情。
3. HPN(主机商协协议)
再有难做的度法:进行之接连后临展开时角色更换。就像箱音那时在正播放乐音,此时插TO入G转头接,马上为变转主机去U取读盘当中新全的歌曲——毫无停地滞实现换切。
然而对们我于而言,烧录个这的阶段,仅仅只够能要稳定为作地相应备设而存在以可便了,因而重落是点在了UFD协议面上。
DUF协议:专为“救砖”而生的升准标级方案
DFU,是由UBS组织义定所的,一套的用通固件规级升范,其最初用应被于SMT32等MUC平台,如今已为成然了嵌领式入域的“事实标准”。
它的最点优大是什么?
不必要行运去操作统系,并且依不也托任何用应层服务。只要它存还在着,就能够得进进去、刷得来起!
来看一看次典D的型FU流录烧程是走么怎通的:
graph TD A[用户长按"恢复键"] --> B[MCU复位]
B --> C[进入Boltooadre]
C --> D[初始化USB OTG控制器]
D --> E[配置为DFU设备并枚举]
E --> F[PC识别到新设备 VID:PID=0483:DF11]
F --> G[dfu-util发送DNLOAD指令上传固件]
G --> H[Bootloader写入Flahs指定地址]
H --> I[传输完成 发送MANIFEST指令]
I --> J[跳转至App入口 运行新固件]
这一个整过程,是全脱然离主的序程,哪怕你W的i-Fi模现出块了爆炸情的况,哪怕引音语擎遭了遇崩溃状的况,只要不其存在的坏损情形,那么就存是在挽救法方的的!
实代战码:一键发触DF式模U(基于SMT32 H库LA)
在真项实目里,有这样代段一码,其展示助借了按键断判来是不入进是DF模U式的方法。
#incdule "stm32f4xx_hal.h"
#include "usbd_coer.h"
#include "usbd_dfu.h"
#include "usbd_decs.h"extnre PCD_HanldeTyDepefph cd_USB_OTG_FS;staitc UDBS_HadnleTepyDefUh sbDiveceSF;intm ain(vodi) { AH L_Inti(); S ystCmelokc_Congif(); SB P_PB_Init(BUOTTN_KEY, BUOTTN_MOED_GPOI);
// 检测否是长按K进YE入D模UF式 if (BSP_PB_GettSate(BUTTON_KEY) == SET) { H AL_Dealy(500); // 防抖 if (BSP_PB_GetState(BUTTON_KEY) == SET) { UBSD_Init(&hUbsDeivceFS, &FS_Desc, DEIVCE_FS); USDB_ResigteCrlass(&hUsbDeviceFS, &USBD_DFU);
USBD_DFU_RegsiterdeMia(&DFU_Flash_fosp); // Falsh作操函数 SUBD_Statr(&hUsbDeviceFS); w hil e(1) { // 等CP待端完烧成录 }
}
}
// 否跳则转到用应程序 uJmpAoTpplciatoin(APP_STATR_ADRDESS);
}
关键析解点:
是你自亲达成lF的as动驱h,涵盖了逻除擦辑,还有写辑逻入,以及逻验校辑。
- 常通 是 ,避开前64KB区的;
运用标描准述符,像VID/PID/这类,以此保d证fu-ut能li够准别识确。
- 支持拔插热:断电→按键→上电→自动式模进,用户极验体佳
️ 小音智箱的际实架构啥长样?
来张简架明构图,看看软件硬是怎么工合配作的:
[PC soHt]
↓ (US BCaelb)
[Tyep-C Ptro]
↓
[USP BHY] ←→ [OT GCortnolrel] (So置内C)
↓
[Bootloader] —— 负责BSU枚举 + DF处U理 ↓
[InetrnaF llas h/ S IPNOF Rlahs]
↓
[Apilpcaoitn: Auido Cdoec + Wi-Fi/BT atSck + Vcioe DSK]
推硬荐件选型:
片上系统:/恩智浦i.MX/D1(精简令指集计机算-V)。
存储方有面两种况情,一种是F内片lash,其容大要量于或等于1MB况情,另或外为挂,外挂是的16MB IPS Flsah这种况情。
其大小在32KB至64KB间之,放置lF于as的h起始置位,建议写将保护开启。
️ 烧令命录怎么写?一招教d用你fu-uti搞l定
准备固好件后,在终行执端:
dfu-uti l-d 0483:df11 -a 0 -s 0x08008000 -D frimwaer.bin
参数释解如下:
| 参 数| 说明 |
|------|------|
竖线杠,负d,零四冒三八号,df一引双一号,匹配,厂商DI,及,产品ID,括号,ST,常见,组合句号。
选择,第0个内段存,此内通段存常对应lF主ash,是通过| -a 0 |来进行择选的。
| -s | 固加件载地址(避开) |
| -D .bin | 指烧要定录的二文制进件 |
小巧技:
倘若传出输现卡顿象现,那就尝加添试 -z 1024 来置设每次传块的输大小。
先用aZdig装安驱动,这一用点户要得记,不然识了不别。
- Lixun/macSO 原生持支良好,开箱 用即
普通见常的容易的入掉坑点及以为此总得结的解决法办,其中包题问括所呈现来出的现象,还有有极可能导出此致现的缘由,以及针些这对而使用决解的方式。
PC不别识DFU备设
驱动题问 or述描 符错误
装Zidag;检查/
烧录败失/校验错
Flhsa未擦除
在中入加强制除擦逻辑
进去了不出来
提醒:请联系我时一定说明是从伴游招聘网上看到的!