- 博客(87)
- 资源 (6)
- 收藏
- 关注
原创 【802.3】PCS 物理编码子层
PCS( Physical Coding Sublayer)属于物理层,通过 MII 接口与 MAC-RS 层进行连接,主要功能:(1)将 MII 接口的数据编码为 66B Block,反之,将 66B Block 解码为 MII 接口数据;(2)对数据进行加扰和解扰;(3)通过插入或删除对齐字补偿 PMA 和 MII之间的速率差。XLGMII 传输速率为 40Gbps,经过PCS 64B/66B编码后传输速率变为 40Gbps * (66/64) = 41.25Gbps。
2023-06-01 10:30:02 2798
原创 【802.3】RS 调和子层与 MII 接口
(1)RS 用来连接 MAC 和 PHY 物理层,将 MAC 层输出的串行数据转换为并行数据发送给物理层,RS和物理层通信的接口为MII接口,使MAC层的数据传输不受物理层实现的影响。40G和100G对应RS层的位置如图所示:传输 MAC 层的数据(串行转并行);检查链路状态并及时上报链路错误(如 local fault/remote fault/link_interruption)。
2023-05-31 15:10:13 1638
原创 嵌入式杂货铺
1 驱动层开发1.1 器件读写接口 嵌入式产品中的器件,如传感器,都需要通过 SPI/I2C 等接口实现配置和功能应用。在不同的开发平台上,SPI/I2C 读写的 API 接口是不一样的。因此,在编写器件驱动程序时,首先会封装出 SPI/I2C 的读写函数,屏蔽掉平台接口的影响。 下面通过几个例子来分享下器件驱动编写时的技巧方法。案例一 (STM32-I2C) 简单地,在 STM32 平台上的 Max17050 的 I2C 驱动接口可如下所示,这样做的好处经过第一级封装,屏蔽掉了平台的
2021-09-03 11:55:40 210
原创 TWS ChargerBox 驱动篇(二):Proximity Sensor
文章目录1.器件特性1.1 功能框图1.2 关键参数1.3 状态图2.寄存器解释1.器件特性以AMS的 TMD2637 为例,熟悉红外传感器的主要配置参数及配置方法1.1 功能框图 接近传感器包括红外发射器和红外接收器(光电二极管)。发光二极管的驱动电流、脉冲宽度和数量、发光周期等可编程控制。光电二极管采样得到的数据将经过信号放大(增益Gain)和偏差校准。INT为开漏输出,内置ADC用于光电二极管采样Prox Thresholds接近阈值:上限和下限1.2 关键参数 红外发射
2021-04-16 17:45:37 897
原创 TWS ChargerBox 驱动篇(一):Charger
文章目录1.Charger 特性1.1 功能框图1.2 充电过程1.Charger 特性1.1 功能框图 MP2661具有完整充电功能:涓流充电、恒流充电、恒压充电、充电终止、自动再充以及内置定时器。IN/VBUS——电源输入(Type-C或无线)BATT——电池正极SYS——系统供电INT——向主机发送中断NTC——接温敏电阻 NTC,用于监测电池温度1.2 充电过程(1)涓流充电 Trickle current charge当电池电压低于一定阈值(eg: 3.0V)时,
2021-04-09 17:40:11 1263
原创 FreeRTOS学习(十)列表与列表项
文章目录1.列表与列表项1.1 列表1.2 列表项2.列表项操作2.1 列表项插入2.2 列表项删除与遍历1.列表与列表项 在前面的介绍中提到过,任务的管理涉及到了列表与列表项,针对不同的任务状态建立不同的列表,实现任务的追踪与管理。//就绪列表和阻塞列表PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];//就绪列表PRIVILEGED_DATA static List_t xDelayedTaskLi
2021-03-22 16:54:14 376
转载 FreeRTOS学习(九)资源管理
文章目录1.资源管理概述1.1 必要性1.2 互斥机制2.资源管理方法2.1 临界区2.2 挂起调度器2.3 互斥量2.4 守护任务3.总结1.资源管理概述1.1 必要性 在多任务系统中,会存在一种潜在的风险。比如,当一个任务正在使用某个资源时,被另一个任务或中断抢占访问该资源,将造成数据损坏。可能存在类似风险的场景有以下几种:(1)访问外设比如 UART I2C SPI 这些常用的公共资源,存在多个任务共享的情况 举个例子,任务A通过串口向主机发送传感器数据,任务B抢占任务A发送命令请
2021-03-22 10:28:40 708
原创 FreeRTOS学习(八)内存管理
文章目录1.内存管理概述1.1 必要性1.2 内存碎片1.3 字节对齐2.内存管理方法2.1 heap_2 方法2.2 heap_4 方法1.内存管理概述1.1 必要性 在创建任务时,需要申请内存来存放任务控制块和任务堆栈,同样地,创建队列时也需要内存来存放队列结构体和队列存储区。在开发应用中,肯定要创建和删除一些任务或队列等,那么它们所需内存的申请和释放必须有一定的方法来管理。 在介绍内存管理方法之前,先来看看FreeRTOS提供的可用内存,在FreeRTOS的内存管理方法 heap_x.c中
2021-03-18 17:04:37 1046
原创 FreeRTOS学习(一)配置文件
文章目录1.配置文件1.1 配置文件概述1.2 配置文件内容1.配置文件1.1 配置文件概述 FreeRTOS 提供了一个配置文件FreeRTOSConfig.h用来对系统内核进行裁剪配置,这个头文件在Source源码文件中并没有,可以在Demo对应例程中找到。 FreeRTOSConfig.h主要包含以下几部分内容:(1)INCLUDE_开头的宏 这部分宏主要用来使能/失能对应的内核函数,如task相关函数。(2)config开头的宏 这部分宏主要用来定义内核的属性,使能/失能内核
2021-03-17 15:44:10 450
原创 FreeRTOS学习(七)中断配置与管理
文章目录1.中断配置1.1 中断概述1.2 优先级分组1.3 中断屏蔽寄存器1.4 中断配置宏2.临界区1.中断配置1.1 中断概述 中断是处理器的一个常见特性,由硬件产生,中断产生后CPU就会中断当前流程转去处理中断服务。Cortex-M内核的MCU还挺过来一个用于管理中断的嵌套向量中断控制器 NVIC,它支持多种中断和异常管理。 Cortex-M处理器提供了多个管理中断和异常的可编程寄存器,重点需要关注的是3个中断屏蔽寄存器:PRIMASK、FAULTMASK和BASEPRI。1.2 优先
2021-03-17 11:35:34 4595
原创 FreeRTOS学习(六)时间管理
文章目录1.延时函数1.1 vTaskDelay()1.2 vTaskDelayUntil()1.3 系统时钟节拍2.软件定时器2.1 定时器概述2.2 定时器 API1.延时函数 当任务需要调用延时函数延时时,任务会进入阻塞态,同时发生任务切换,指导延时完成,任务重回阻塞态。1.1 vTaskDelay()(1)相对延时 vTaskDelay延时函数实现的是相对延时,其主要特点是时间计算的节点是将调用 API 的时刻作为起点。void vTaskDelay( const TickType_
2021-03-16 16:48:18 1240
原创 FreeRTOS学习(五)队列与信号量
文章目录1.队列1.1 队列特性1.2 队列创建1.2.1 接口函数1.2.2 内存占用1.2.3 创建过程分析1.3 入队与出队1.3.1 队列项入队1.3.1 队列项出队2.信号量1.队列 FreeRTOS支持多任务操作,那么任务之间以及任务与中断之间肯定需要通讯与同步,因此,继任务相关内容学习之后,下一个重要的概念就是队列。1.1 队列特性 队列能够存储一定数目、大小固定的数据项目。因此创建队列时,需要指明数据的长度length和数据元素的大小 size。这里将队列类比成火车,长度leng
2021-03-15 15:53:35 2326
转载 FreeRTOS学习(四)任务调度与切换
文章目录1.SVC 和 PendSV1.1 SVC 中断1.2 PendSV 中断1.SVC 和 PendSV 在上一节中也提到了这两个中断的中断服务函数的功能,这里再详细介绍一下。1.1 SVC 中断 SVC是系统服务调用,由 SVC 指令触发调用。在 FreeRTOS 中用来在任务调度中开启第一个任务。触发指令:svc 01.2 PendSV 中断 与SVC相关的是PendSV中断,称为可悬起的系统调用。两者不同之处在于响
2021-03-15 10:31:05 5103 2
原创 FreeRTOS学习(三)任务管理
文章目录1.任务创建1.1 动态创建1.2 静态创建1.3 任务创建过程2.任务删除1.任务创建FreeRTOS 提供了多种任务创建的API,这里主要列举了动态创建和静态创建函数 API功能描述xTaskCreate()动态创建,堆栈由 FreeRTOS 动态分配xTaskCreateStatic()静态创建,堆栈由用户指定分配1.1 动态创建任务的创建一般都采用动态的方式,其API涉及的参数如下BaseType_t xTaskCreate( TaskFunct
2021-03-12 15:16:21 824
原创 FreeRTOS学习(二)任务基础
1.任务引入在嵌入式开发中,有两种常见的开发方式:前后台系统和嵌入式操作系统。1.1 前后台系统后台:一个无限循环,在循环中调用相关函数完成相应操作前台:就是中断,可以多级嵌套,处于处理一些实时性要求比较高的事件,比如按键的状态获取。这种编程方式的主要缺陷在于两方面(1)复杂度方面:无法实现复杂的系统(2)实时性方面:难以保证较高的实时性尤其是一些穿戴类产品,集成了多种传感器,还涉及蓝牙 BLE数据通讯等,系统复杂度高、实时性要求高 ,因此针对类似这种产品开发就需要引入实时操作系统。1.
2021-03-12 09:39:37 599
原创 Makefile 练习(二):多个源文件
1 位于同一目录下list1.c#include "list1.h"#include <stdio.h>void list1_printf(){ printf("this is printf from list1\r\n");}list2.c#include "list2.h"#include <stdio.h>void list2_printf(){ printf("this is printf from list2\r\n");}main.
2021-01-21 11:15:53 613 1
原创 Makefile 练习(一):单个源文件
Makefile 练习(一):基本应用1.程序编译过程2. 单个源文件main.c#include <stdio.h>int main(){#ifdef _SWITCH_ printf("Hello, this is from Switch\r\n");#else printf("Sorry, it doesn't work\r\n");#endif return 0;}Makefile# Makefile test // 注释VAR_ENAB
2021-01-21 10:46:33 230
原创 QCC30xx 资源汇总
1.Qualcommn MDE1.1 工程配置点击左侧的“Project”图标,可配置编译配置和工程属性1.2 开启 debug logDebug log 开启教程2.ADK Config Tool2.1 打开位置Qualcommn MDE -> Tool -> Config tool2.2 工具说明config tool 工具栏含义2.3 使用教程按键配置教...
2020-05-08 08:56:28 1087
原创 Git 使用教程
Git 简介Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。本篇博客主要参考Runoob Git 教程廖雪峰 Git 教程1.Git 的安装与配置(1)安装下载链接:https://git-scm.com/downloads无脑安装即可右键可看到**“Git Bash Here”**即表示安装成功(2)配置安装完成后,配置下个人信息,右键点击“...
2020-04-14 13:40:37 287 1
原创 蓝牙基础:蓝牙音频
前言蓝牙耳机中存在两种 通话音频 和 音乐音频两种音频。1 通话音频1.1 音频链路通话中的音频数据(Audio)直接通过基带上的SCO链路进行传输音频通路 (1) Audio-》Voice-》SCO/eSCO-》HCI-》Baseband (2) Audio-》Voice-》PCM-》Baseband 这两种方式表现在硬件连接的差异上, 音频通路1方式,音频数据是走HCI...
2020-01-20 10:42:27 4302
原创 蓝牙基础(四):蓝牙协议栈之底层协议
蓝牙基础(四):蓝牙协议栈之底层协议0 前言在这篇博客里,博主将蓝牙协议栈进行了分类,后续博客会进行分别介绍。由于蓝牙协议栈在实际应用中已被封装起来,博主介绍的蓝牙协议不会过多涉及具体细节,比如数据包形式、指令形式等,更多的是围绕着功能与作用,便于理解与吸收。在建立整体认识的基础上再进行深入研究。这片博客只讨论BT(BR/EDR)的底层协议:RF、BB&LC、LM。1 射频 Ra...
2019-12-19 11:45:59 2513
原创 蓝牙基础(三):蓝牙协议栈总体认知
蓝牙基础(三):蓝牙协议栈总体认知0 前言初入门经典蓝牙学习,网上资料参差不齐,本博客旨在整理自己的一些总结内容,建立整体功能认识,以便后续深入学习。1 蓝牙整体架构蓝牙的整体核心架构如下图1.1 蓝牙构成蓝牙的构成可分为主机(Host)和控制器(Controller),控制器由可分为主控制器和辅助控制器。主机是非核心配置文件下方和主机控制器接口(HCI)上方的所有层,控制器是H...
2019-12-19 10:09:57 1859 3
转载 结构体中的位定义
1.结构体位定义在工作中,经常遇到按位(bit)定义结构体 的情况。由于一个字节有8个位,这时,程序员往往对bit的位置产生困惑。现在给出2个例子,来说明位的定义次序。第一个例子是将unsigned char 分成8个比特。#pragma pack(push,1) typedef struct ST_TEST{ unsigned char ucA:1; unsigned char ...
2019-11-14 11:38:57 8906 2
原创 TWS蓝牙耳机
1. TWS 耳机概述TWS - True Wireless Stereo,即真正无线立体声。从技术上来说是指手机通过连接主耳机,再由主耳机通过蓝牙无线方式连接从耳机,实现真正的蓝牙左右声道无线分离使用。1.1 爆发原因手机取消 3.5mm 耳机插头,有线耳机需配转接线、缠绕等问题。1.2 TWS耳机优缺点优势真无线结构,完全摒弃了有线烦恼一机能当做两机用劣势关键问题在于蓝...
2019-10-21 10:25:05 2993
原创 嵌入式系统架构层次
1.嵌入式系统结构分层(1)硬件层(2)驱动层(3)操作系统层(4)应用层1.1 硬件层硬件平台是基础,增值还要靠软件。作为一名嵌入式软件工程师,应能够看懂硬件原理图,这一部分在这里提到过,可从以下三方面入手:- 芯片复位方式 - 硬件复位方式 - 软件复位方式- 电源树 - 开发板的电源输入 - 电源供电器件 - 5V 电压供电器件 ...
2019-10-16 09:17:46 8988
原创 STM32烧录程序遇坑记录
1. 前言嵌入式工程师的工作内容- 阅读和编写工程代码- 看硬件原理图,查阅芯片数据手册第一部分阅读和编写工程代码就是说当我们的工程比较复杂时,将涉及到非常多的硬件和功能,作为软件工程师,首先要做的是看懂芯片商或第三方提供的工程代码,然后在此基础上移植或添加代码。比如,蓝牙芯片厂商提供的蓝牙芯片,以恒玄科技的BES2300为例,厂商会提供相应的软件开发包,即SDKSDK中提供了软...
2019-10-12 09:31:01 2876
原创 C语言学习(六):内存分配
1.存储器常用的存储器类型如下:2. 内存分配2.1 内存分配机制(1)栈(Stack):位于函数内的局部变量(包括函数实参),由编译器负责分配释放,函数结束,栈变量失效。(2)堆(Heap):由程序员用malloc/calloc/realloc分配,free释放。如果程序员忘记free了,则会造成内存泄露,程序结束时该片内存会由OS回收,但程序只要不结束,就有可能造成内存泄露。(程序...
2019-10-08 14:01:26 316
原创 代码阅读利器:Source Insight 基本操作
1. Source Insight为什么要使用 Source Insight在做项目过程中,我们要阅读的代码非常复杂,工程中包含了非常多的API接口和自定义结构体、函数等。为了尽快熟悉整个项目的流程,必须借助一定的工具来提高我们代码阅读的效率。Source Insight可以帮助我们快速查询某个变量或函数的定义、调用关系,以及全局查找功能,从而使我们在代码阅读和调试过程中提高效率。2....
2019-09-30 10:11:46 1795
转载 详解单片机复位电路
首先需要注意RST引脚上边是否画了一条横线,如果画了一条横线,则是RST引脚接收到低电平复位,如果无横线,则RST引脚接收到高电平复位1.复位电路的工作原理在书本上有介绍,51单片机要复位只需要在第9引脚接个高电平持续2us就可以实现,那这个过程是如何实现的呢?在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和...
2019-09-23 17:54:01 4981
转载 STM32 HAL库学习(四):DMA之串口空闲中断
STM32CubeMX 配置实现参考这里。1.不定长数据接收的原理及其解决的问题在 STM32 中,UART是最为常见的通信方式——它每次接收一个字节,我们可以使用轮询的方式,但是对于某些数据不固定时间发送的数据,轮询的方式有时候不够灵活。也可以使用中断的方式,如每一个字节都中断一次,比较消耗系统资源。特别是HAL库中,从中断到回调函数运行了不少的程序,频繁的中断很可能造成数据溢出。为了避免...
2019-09-04 17:35:25 24107 16
原创 STM32 HAL库学习(四):I2C 协议篇
STM32 HAL库学习(四):I2C 协议篇1. I2C1.1 I2C 简介I2C(Inter-integrated Circuit)总线支持设备之间的短距离通信,用于处理器和一些外围设备之间的接口,它只需要两根信号线来完成信息交换。1.2 与UART、SPI 的区别1.UART串行端口是异步的(不传输时钟相关数据),两个设备在使用串口通信时,必须先约定一个数据传输速率,并且这两个...
2019-09-02 17:33:14 9092
原创 STM32 HAL库详解
STM32 HAL库整体总结STM32 之二 HAL库详解 及 手动移植本篇博客是对以上参考资源的一个二次总结与整理。1. HAL库文件结构对于开发人员而言,首先要清楚 HAL 库的文件结构。根据文件类型可认为以下两大类:库文件: stm32f2xx_hal_ppp.c/.h // 主要的外设或者模块的驱动源文件,包含了该外设的通用API stm32f2xx_hal_ppp...
2019-09-02 14:15:38 19136 3
原创 CSDN网页打印PDF格式
CSDN网页打印PDF格式相较于网页右键打印更加完整简洁浏览器:Google Chrome如图打开浏览器的开发者模式找到 console 窗口,并输入以下代码,回车保存打印。(function(){$("#side").remove();$("#comment_title, #comment_list, #comment_bar, #comment_form, .announc...
2019-09-02 11:32:46 2363 2
原创 STM32 经典应用原理(一):按键消抖
STM32 经典应用原理(一):按键消抖消抖原理,就是检测,延时,检测。可以应用到扫描式操作(就是放在循环里面)/** * 函数功能: 读取按键KEY1的状态 * 输入参数:无 * 返 回 值: KEY_DOWN:按键被按下; * KEY_UP :按键没被按下 * 说 明:无。 */KEYState_TypeDef KEY1_StateRe...
2019-09-02 10:25:58 5093
原创 C语言进阶(二):指针与指针变量
C语言进阶(二):指针与指针变量1 指针与指针变量1.1 区别 牢记三句话: 指针就是地址,地址就是指针;指针变量是一个变量,它保存了基本类型变量的地址。 如果指针变量p保存了变量a的地址,那么称作p指向了a,*p 就是变量a。 如果p是一个指针变量,*p 表示了以 p 的内容为地址的变量,就是p指向的变量。C++实例int a ; //定义int类型变量int *p = &...
2019-08-29 14:59:59 276
Faster_RCNN绘制P-R曲线、检测视频
2019-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人