- 博客(12)
- 收藏
- 关注
原创 STM32 USB CDC开发全攻略:从协议解析到虚拟串口实战案例
一、USB枚举与描述符机制USB设备通过描述符向主机报告其属性,枚举过程中主机依次获取设备、配置、接口、端点等描述符。设备描述符(18字节)定义全局信息如VID/PID、协议版本、端点0包大小;配置描述符声明供电模式与接口数;接口描述符指定类代码(如CDC类0x02),端点描述符定义传输类型(BULK/INTR)。CDC设备需至少包含控制接口(管理类请求)与数据接口(批量传输)。二、CDC类请求处理类请求通过控制传输处理,核心操作包括:SET_LINE_CODING (0x20):设置波
2025-04-04 17:52:39
1170
原创 嵌入式车规级bootloader解析:Flash驱动内存编排与CAN诊断协议网络层机制
1. Flash驱动内存编排通过链接脚本(Linker Script)实现动态内存布局:地址空间划分:定义RW_IROM_FlashDrvOffset(0x01010000)存储5个Flash操作函数指针,RW_IROM_FlashDrv存放实际函数代码。运行时定位:利用CAL_OFFSET宏计算函数偏移量,结合RAM基地址实现动态寻址,支持固件热更新。实践意义:实现Bootloader与Flash驱动的解耦,提升固件升级的灵活性和兼容性。2. ISO 15765-2网络层机制解析多帧数据传输的
2025-03-08 14:08:12
917
原创 CPU 上电之后的前提背景和后续操作
第二步,CPU上的Flash控制器将flash上的代码拷贝到内存的代码段,然后CPU读取并执行解析代码,此时CPU的运算器会工作,在DDR的堆和栈中不断的存取数据,再根据解析下一行或下几行的代码的要求,访问指定地址的空间,去存放数据。它是操作系统管进程的重要数据结构,PCB存储了进程的执行状态和资源信息如:进程ID 和状态,程序计数器,堆栈指针,栈帧,内存管理信息,如代码段、数据段、堆栈起始地址和大小,打开文件列表、文件描述符等I/O资源信息,CPU 寄存器内容。处理数据执行加减乘除,与或非等逻辑操作。
2024-12-22 17:57:45
638
原创 “CAN 与 CAN FD 通信详解:协议、时间分析与延迟补偿机制“
CAN采用的是差分信号:由两根线组成CANH和CANL。按照定义:CANH-CANL<0.5v时候为隐性,逻辑电平为高CANH-CANL>0.9v时为显性,逻辑电平为低。CAN总线与IIC一样采用线与,在总线上显性电平具有优先权,当同时出现显性信号和隐性信号时,总线上为显性数据即0。通信过程:由于CAN通信只有两根数据线,没有时钟线所以并不知道数据。
2024-09-20 10:27:57
2683
6
原创 DTC Catogory Bit定义
这段话涉及ISO 14229标准中关于DTC(故障诊断代码)分类位(Category Bit)的定义,尤其是对于不同的系统(如动力系统)如何分配和定义这些位的使用。下面我将通过举例来解释这段话的意思。
2024-08-29 16:04:38
572
原创 从零开始,轻松掌握Git版本控制
文章将介绍 Git 的基本概念,包括版本控制的必要性和 Git 的工作原理。将了解到 Git 是如何通过本地和远程仓库来管理代码变更的,并理解提交(commit)、分支(branch)和合并(merge)等基本操作。接着,文章将详细讲解一些常用的 Git 命令。包括如何初始化一个新的 Git 仓库,克隆已有仓库,以及添加和提交文件。通过具体示例,读者将学会如何查看分支、切换分支以及合并分支。还将介绍如何处理合并冲突,确保代码库的一致性和稳定性。如如何使用 Git rebase 整理提交历史,如何通过
2024-07-17 11:21:39
549
原创 解析CAN通信之UDS服务实现的Bootloader
一帧的发送主要有单帧发送和多帧发送两种,在标准地址情况下,单帧SF按照N_PDU格式最多发送和接收7个字节数据+一个字节PCI,而发送长段报文信息时,拆分后的报文信息会通过多个N_PDU进行发送,接收到多个N_PDU信息后进行重组。安全访问服务目的是提供一种方式来访问数据和诊断服务,这些数据和服务因安全因素受到限制,通常需要进行安全访问服务解锁才可以访问这些数据和服务包括:下载/上传例程或数据到ECU,或从ECU读取特定的内存位置数据。对于常见的安全访问服务用于更改安全级别,以解锁具有受限访问的其他服务。
2024-07-05 15:51:52
1899
原创 深入解析:诊断服务与程序刷写功能详解
client请求经CAN总线传输到server,从Can模块到CanTp模块,再经PduR模块到DCM模块;反之server响应从DCM模块经Can总线到client。那么DCM模块具体怎么处理请求?通过周期性调用Dcm_Mainfunction来处理,即先辨别请求时什么服务,然后看当前的会话模式是否能激活该服务,再看激活该服务是否需要再已解锁的状态才可进行,最后对该服务进行请求处理,即根据相应的逻辑去判断给出怎样的响应(正响应还是负响应)。诊断会话用于在HUD中开启不同的诊断会话。
2024-05-28 14:08:26
2016
3
原创 看懂CAN2.0B与CANFD数据帧解析
每次数据传输前,节点都会监听总线的状态,如果说总线为空闲状态,那么就会发送自己的数据包,数据包包括本身的ID信息或者其他控制指令,也称之报文。主动错误标志由 6 个连续的显性位构成,这种位序列主动打破了位填充规则,所有其他节点在识别到所生成的位填充错误后,会自行产生错误帧,称为错误反射标志。是什么时候开始发送什么时候开始接收,不像IIC有SCL时钟线,SPI有CS片选信号,那么每个ECU是怎么知道CAN总线上的数据是发给自己呢,CAN有一套复杂的协议。这样,可使发送远程帧的节点立即收到所需数据。
2024-01-04 17:36:52
2013
1
原创 DMA的特性和使用方式
从设备:DMA自身的寄存器,所以他可以是主动单元主动去访问总线矩阵读写右边存储器,也是一个AHB总线被动单元 ,CPU可通过系统总线访问总线矩阵,通过总线矩阵去访问AHB单元,去配置MA。存储器地址是否自增:当DMA转运一次之后,传输下一个数据需要放到下一个存储单元,所以使能地址自增可以让数据一直连续存储, 若没使能数据就会被覆盖。为了方便CPU的运行效率,可以配置好DMA,定义数据存储的位置和需要搬运的位置,配置好DMA,CPU不需要干预数据搬运。外设到存储器也可以是存储器到外设,存储器到存储器。
2023-09-02 20:24:46
628
1
原创 关于STM32中ADC原理
由于规则通道数据寄存器只有16位,所以当你传输16个通道你智能存放一个数据在这个寄存器,前面15个就丢失了,所以需要DAM来配合,当你输出一个数据时,通过DMA去搬运出去,然后进行下一个数据比较。由于规则通道数据寄存器只有16位,所以当你传输16个通道你智能存放一个数据在这个寄存器,前面15个就丢失了,所以需要DAM来配合,当你输出一个数据时,通过DMA去搬运出去,然后进行下一个数据比较。单次转换:选择通道到序列上,通过触发转换,ADC会对通道进行模数转换,转换完成数据放到寄存器中EOC置1。
2023-06-30 22:45:04
1867
原创 如何去设置蓝牙协议栈应用程序进行交互
主机和从机一次数据发送与接收为一个连接事件,连接间隔就是发生一个连接事件,到下一次连接事件之间间隔的时间就是连接间隔。当设定为1s的连接间隔,10s就会产生10次连接事件,而设定5s的连接间隔,就会产生2次连接事件,相比来说少三次连接事件,就是在睡眠状态对应的功耗也会不同。选择哪个射频通道进行通信,怎么识别空中数据包,具体在哪个时间点把数据包发送出去,怎么保障数据的完整性,ACK如何接收,如何重传,如何对链路进行管理和控制。管理BLE连接的加密和安全,如何保证连接的安全性,同时不影响用户的体验。
2023-06-19 16:11:00
325
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人