嵌入式系统与单片机|技术阅读
登录|注册

您现在的位置是:嵌入式系统与单片机 > 技术阅读

技术阅读

  • USB Type-C PD spec (5)

    2024-07-12

    Type-C PD spec 由五部分组成翻译自《USB Power Delivery Specification v3.1》1、PD Overview2、物理层3、协议层4、设备策略层5、场景讲解5、场景讲解5.1、功率协商(SPR)SPR 显性契约建立过程SRC 发送 Source_Capabilities 消息通告其功率能力SNK 评估这些能力,并发送 Request 消息来选择一个功率SRC 评估请求并通过 Accept 消息接受请求SRC 转换到新的功率,然后通过发送 PS_RDY 消息通知 SNKSNK 开始使用新的功率对于 SPR PPS 操作SRC 启动其保持活动计时器,等待 SNK 的周期性请求SNK 启动请求定时器以发送周期性的 Request 消息SRC 状...

  • USB Type-C PD spec (4)

    2024-07-12

    Type-C PD spec 由五部分组成翻译自《USB Power Delivery Specification v2.0》1、PD Overview2、物理层3、协议层4、设备策略层5、场景讲解4、设备策略层4.1、设备策略管理器(Device Policy Manager)负责管理一个或多个 USB 端口使用的电源维护设备的本地策略通过 USB 与系统策略管理器通信设备需能够自主响应 PD 相关请求控制设备中 SRC/SNK 的行为对于 SRC,监控当前供电能力并在变化时发起通知对于 SNK,评估和响应对端的供电能力、请求检测线缆管理电源需求维护每个端口与策略引擎(Policy Engine)的接口维护每个端口与策略引擎(Policy E...

  • USB Type-C PD spec (2)

    2024-07-12

    Type-C PD spec 由五部分组成翻译自《USB Power Delivery Specification v3.1》1、PD Overview2、物理层3、协议层4、设备策略层5、场景讲解2、物理层USB PD 物理层由一对通过单条信号线(CC) 进行通信的发送器和接收器组成所有通信都是半双工的。发送器从协议层接收包数据计算并附加 CRC对包含 CRC 的分组数据(即有效载荷)进行编码(4b5b)使用 BMC 在 CC 上跨信道传输数据包(前导码、SOP*、payload、CRC 和 EOP)接收器恢复时钟并从前导码锁定到数据包检测 SOP*解码包含 CRC 的接收数据检测 EOP 并验证 CRC如果 CRC 有效,则将分组数据传送到协...

  • USB Type-C PD spec (1)

    2024-07-12

    USB Type-C PD spec 由五部分组成,本文先看第一部分翻译自《USB Power Delivery Specification v3.1》1、PD Overview2、物理层3、协议层4、设备策略层5、场景讲解1、PD Overview1.1、IntroductionUSB PD(Power Delivery) 主要功能:端口间协商电压、电流以及功率方向 (通过 Type-C CC 通道)电压可比其他标准规范更高或更低电流可比其他标准规范更高支持与电缆组件通讯,发现支持的标准或供应商模式,允许多种 mode 同时运行只有 VCONN Source 才能与线缆组件通讯可发生在显性契约之前或之后供电模式的两种契约显性契约:Source 发送 Capabiliti...

  • PCI / PCIe 概述

    2024-07-12

    本文参考 百问网-韦东山驱动大全《PCI Express Technology》,Mike Jackson, Ravi Budruk; MindShare, Inc.《PCIe 扫盲系列博文》,http://blog.chinaaet.com/justlxy/p/5100053251,对《PCI Express Technology》的理解与翻译《PCI EXPRESS体系结构导读 (王齐)》《PCI Express_ Base Specification Revision 4.0 Version 0.3 ( PDFDrive )》《NCB-PCI_Express_Base_5.0r1.0-2019-05-22》1. 最容易访问的设备是什么是内存!要读写内存,知道它的地址就可以:volatile unsigned int *p = 某个地址;unsigned int val;*p...

  • USB Type-C spec

    2024-07-12

    1、定义本规范定义了 USB Type-C 的 receptacles、plug、cables,即插座、插头、电缆。USB Type-C 是一种 USB 接口外形标准,拥有比 Type-A 及 Type-B 均小的体积,支持正反插。USB Type-C 有更多的 PIN 脚,传统的 USB Type-A 只有五个 PIN 脚。USB Type-C 要注意的是,插座和插头的 CC pin、D+/D- 数量不一样,另外,插头的 B5 是 VconnCC:Configuration Channel拆分后的 PIN 脚功能图如下typec 主要的新增 PIN 脚2、CC PINType-C 增加了 CC1/CC2 和 SBU1/SBU2,CC1/CC2 在 USB Type-C 的各种模式 Normal,PD,ALT,Accessory 中都发挥相当重要...

  • Linux 电源子系统之充电、放电、低功耗

    2024-07-12

    在嵌入式产品中,有三个重要模块:充电、放电、低功耗。1、充电 charging知识点包括:开关电源基本原理线性充电和开关电源硬件电路图分析Battery_Charging_v1.2 spectypec spectypec-PD specUevent 在 Android 层的实现battery service 监听 uevent 事件以及发送 broadcast 流程PMIC ICCharger IC示波器的使用快充协议如 MTK PE/高通 QC/OPPO VOOC充电曲线OCP 过流保护OVP 过压保护NTC 温度检测2、放电指电池与电量计 Fuel GaugeFuel Gauge 显示的基本原理Fuel Gauge 校准和参数测量Fuel Gauge 休眠唤醒的更新流程Fuel Gauge 初始化和电量计算法netl...

  • USB Gadget 应用实例之 adb

    2024-07-12

    本文来自百问网-韦东山驱动大全教程韦东山老师驱动大全https://blog.csdn.net/pwl999/article/details/121873236https://blog.csdn.net/kunkliu/article/details/122746762https://blog.csdn.net/baidxi/article/details/123618276https://blog.csdn.net/baidxi/article/details/1228745251. ADB 框架ADB 全称为"Android Debug Bridge",Android 调试桥。在纯 Linux 系统中也可以使用。它是 client-server 架构,由三部分组成:adbclient:我们运行的 adb 命令就属于 adbclient,比如我们运行以下命令adb push d:\1.txt /root时,它就是一个 adbclie...

  • USB Gadget 应用实例之 serial

    2024-07-12

    本文来自百问网韦东山驱动大全教程韦东山老师驱动大全* https://blog.csdn.net/embededswordman/article/details/6689593* Linux 文档:Documentation\usb\gadget_serial.txt* UART 教程  * 回顾 TTY 的概念  * 回顾 console 的概念1. 硬件体验使用 Linux 自带的 USB Gadget 驱动 /drivers/usb/gadget/legacy/serial.c使用 USB 线,连接板子的 OTG 口和 PC 的 USB 口。然后在板子加载驱动程序后,可以看到新的设备节点 /dev/ttyGS0:# modprobe g_serialg_serial gadget: Gadget Serial v2.4g_serial gadget: g_serial ready...

  • USB Gadget 应用实例之 zero

    2024-07-12

    1. 编写程序1.1 编程思路涉及的程序如下图所示:PC 端基于 libusb 编写应用程序,开发板端直接使用 Linux 自带的 USB Gadget 驱动 zero.c【/drivers/usb/gadget/legacy/zero.c】。应用程序编程框架如下:找到设备选择配置:zero.c 提供了两种配置,loopback、sourcesink得到端点:找到 interface 进而得到 endpoint读写数据:操作 endpoint1.2 zero 设备的描述符在 Ubuntu 里执行如下命令,根据 VID:PID 获取设备信息:$ lsusb -v -d 0525:a4a0可以列出 zero 设备的描述符:Bus 001 Device 002: ID 0525:a4a0 Netchip Technology, Inc....

  • OTG 硬件检测电路

    2024-07-12

    1. OTG 接口与转换器OTG 是"On The Go"的英文缩写,可以理解为“安上即可用”。USB 传输是主从结构,一切 USB 传输都由 Host 发起。在开发板上可以插入 U 盘,这时开发板作为 USB Host。开发板要跟 PC 通信,开发板就要作为 USB Device。开发板要作为 USB Host、USB Device 两种角色,可以使用 OTG 插口:它可以根据硬件电路自动识别自己的角色,切换为 USB Host 或 USB Deivce。OTG 插口有多种形态,常用的有 Micro USB、Type C,如下:1.1 Micro USB对于 Micro USB 插座,它有 5 条引脚:引脚作用如下表所示:引脚名作用VBUS作为 Host 时,对外供...

  • USB 鼠标驱动

    2024-07-12

    本文来自百问网-韦东山驱动大全教程韦东山老师驱动大全Linux 内核源码:include\linux\usb.hLinux 内核源码:drivers\hid\usbhid\usbmouse.c1. 目标使用鼠标模拟按键:左键相当于"L"、右键相当于"S"、"中键"相当于 "回车"。2. 编程2.1 驱动框架对于 GPIO 按键,是直接构造、注册一个 input_dev 结构体,在 GPIO 中断函数里获得数据。现在数据来源发生了变化,数据来自 USB 设备,需要做的事情是:构造、注册 usb_driverusb_driver 发现能支持是设备后,它的 probe 函数被调用:构造、注册 input_dev 结构体获得数据:构造、提交 URB在 URB 的回调函...

  • 使用 libusb 读取鼠标数据

    2024-07-12

    本文来自百问网韦东山驱动大全教程韦东山老师驱动大全libusb API 接口:https://libusb.sourceforge.io/api-1.0/libusb 示例:https://github.com/libusb/libusb/tree/master/examplesHID 规范:https://www.usb.org/sites/default/files/hid1_11.pdf文档:USB Human Interface Devices, https://wiki.osdev.org/USB_Human_Interface_Devices1. HID 协议HID: Human Interface Devices, 人类用来跟计算机交互的设备。就是鼠标、键盘、游戏手柄等设备。对于 USB 接口的 HID 设备,有一套协议。1.1 描述符HID 设备有如下描述符:HID 设备的"设备描述符...

  • libusb 使用大全

    2024-07-12

    本文来自百问网韦东山驱动大全教程韦东山老师驱动大全libusb GIT 仓库:https://github.com/libusb/libusb.gitlibusb 官网:https://libusb.info/libusb API 接口:https://libusb.sourceforge.io/api-1.0/libusb 示例:https://github.com/libusb/libusb/tree/master/examples1. 概述1.1 介绍libusb 是一个使用 C 编写的库,它提供 USB 设备的通用的访问方法。APP 通过它,可以方便地访问 USB 设备,无需编写 USB 设备驱动程序。可移植性:支持 Linux、macOS、Windows、Android、OpenBSD 等用户模式:APP 不需要特权模式、也不需要提升自己的权...

  • USB 协议层数据格式

    2024-07-12

    1. 硬件拓扑结构compound device :多个设备组合起来,通过 HUB 跟 Host 相连composite device  :一个物理设备有多个逻辑设备(multiple interfaces)在软件开发过程中,我们可以忽略 Hub 的存在,硬件拓扑图简化如下:一个物理设备里面可能有多个逻辑设备,Host 可以外接多个逻辑设备,硬件拓扑图如下:2. 协议层要理解协议层、理解数据如何传输,带着这几个问题去学习:如何寻址设备?如何表示数据方向(读、还是写)如何确认结果?提前罗列出来:USB 系统是一个 Host 对应多个设备,要传输数据首先要通知设备:发出 IN 令牌包:表示想读数据,里面...

  • USB 电气信号

    2024-07-12

    USB 已经发布了五篇文章,如下:本文主要讲解 USB 电气信号,懂硬件,才能更好的写出软件,否则是空中楼阁。参考文章如下,本文主要参考百问网-韦东山驱动大全教程:https://www.jianshu.com/p/3afc1eb5bd32https://www.jianshu.com/p/cf8e7df5ff09https://www.jianshu.com/p/2a6e22194cd3https://zhuanlan.zhihu.com/p/460018993https://www.usbzh.com/article/detail-459.html1、USB2.0USB 2.0 协议支持 3 种速率:低速(Low Speed,1.5Mbps)全速(Full Speed, 12Mbps)高速(High Speed, 480Mbps)USB Hub、USB 设备,也分为低速、全速、高速三种...

  • 【震惊】单片机也可以轻松玩转UTF-8码和TTF字体了

    2024-07-12

    【说在前面的话】随着科技的进步,很多嵌入式产品都有了一块屏幕(号称智能)并且走出了国门,迈向了世界。那么,问题来了,这种设备是怎么支持各国文字的呢?带着这个问题,往下看文章你就会发现原来这个也很简单。【UTF-8码简介】要让智能设备支持各国不同的文字,首先得有支持全球文字的编码集,时下最出名的要数UTF-8码了。它一种可变长度字符编码,使用1~4字节为每个字符编码,由此它可以用来表示Unicode标准中的任何字符,而且仍与ASCII码相兼容。有了国际范的UTF-8码,如果我们再有一个支持UTF-8码的字库,那显示各国的文字就很简单了。接下...

  • 【重学51单片机】八、串口通信与AT指令

    2024-07-12

    【说在前面的话】上一篇51单片机的文章我们简单介绍了串口的使用,实现了单片机向电脑端的串口助手发送数据,这一篇我们继续完善串口程序,实现串口接收数据的程序,这样一个完整的串口收发数据的功能就实现了。这篇的主要内容为上位机(电脑端串口助手)和下位机(51单片机)进行串口通信,并制定通信协议和实现简单的AT指令。好,接下来就开始讲今天的串口接收数据的程序。【串口接收数据初始化】由于51单片机接收的是电脑端串口助手发来的数据,而串口助手什么时候发送数据给单片机我们是不知道的,所以这次接收数据的程序就用串口中断来实现,这...

  • 串口通信与分时轮询调度器

    2024-07-12

    【说在前面的话】玩过STC89C52单片机的应该都用过串口,因为此单片机就是用串口下载程序的。那51 单片机的串口除了下载程序还有别的用途吗?当然就是可以用来和其他单片机进行通信。今天我们就讲一下单片机和电脑是怎么进行串口通信的。【接线图】单片机要和电脑进行串口通信,首先要把单片机连接到电脑,如下图图中我们知道,单片机的IO口是不能直接和电脑相连的,需要一个usb转串口的转接板,转接板的USB口接到电脑,另一端接到单片机的IO口。【串行通信】简单讲串口通信是按位(bit)发送和接收数据的。尽管比按字节(byte)的并行通信要慢,但是...

  • 【玩转Arm-2D】十一、酷炫汽车仪表盘是怎么实现的

    2024-07-12

    【说在前面的话】随着科技的发展,汽车也几乎达到了普及,家家都有辆小车,汽车上酷炫的仪表盘界面大家应该也不陌生,大致如下你想知道这个仪表界面是怎么实现的吗?哈哈,下面我们就从原理讲起一步一步实现这个酷炫的界面。在讲制作原理之前,有必要先说一下这个板子的软硬件配置,如下单片机syd8810(m0内核)主频64M屏幕240*240像素、spi接口Arm-2D的PFB大小240*30MDK编译优化等级-Omax配置讲完之后,就来看看我们是怎么实现这个酷炫的界面。【表针的旋转】首先,仪表盘中有一个表针,看到表针那肯定就需要旋转了,Arm-2D的旋转我们之前已经讲过...

  • LCD1602显示汉字与分时轮询调度器

    2024-07-12

    不知不觉系列文章已经写到第五篇了。今天这篇文章主要讲一下LCD1602的用法(包括左右移动、显示汉字)和对上一篇讲到的分时轮询调度器的优化(看看又遇到什么新问题,会有什么新玩法)。【说在前面的话】好,那就开始讲今天的主题。在第三篇文章中,我们介绍了方式,然而数码管只能用来显示数字,如果要用来显示英文和汉字,就必须要使用液晶显示屏(LCD)。而LCD又可分为字符型和点阵型,其中,字符型LCD以其廉价、使用简单等特点,成为数码管的理想替代品。今天,我们就讲一下字符型LCD1602的驱动程序。【LCD1602引脚定义】在讲驱动之前,我们先看...

  • 【重学51单片机】四、硬件定时器实现分时轮询调度算法

    2024-07-12

    【说在前面的话】众所周知,一个简单的嵌入式设备都不是仅仅有一个功能。而每一个功能就相当于程序中的一个驱动(任务),比如一个时钟,就有屏幕、按键、时钟芯片等。因此,要实现一个时钟,就需要实现屏幕显示任务、按键设置任务、和时间计算任务。而在上一篇中我们已经用状态机简单实现了多任务,不过他的缺点就是延时不够精确,所以我们今天就用硬件定时器来精确延时,并实现一种基于分时轮询调度算法的多任务调度器。我们先简单介绍一下分时轮询,这可是在像51单片机这种小资源单片机中很常用编程结构。所谓分时,就是把多个任务按照时间节点进...

  • 【重学51单片机】二、基于状态机的按键驱动

    2024-07-12

    【说在前面的话】按键作为单片机的输入设备,可以向单片机输入数据、传输命令等,是设置参数和控制设备的常用接口。所以,学会按键驱动也是初学者必不可少的能力。说到按键驱动程序,大家应该也不陌生,而一般的按键驱动流程图如下这里,可能有人会问,为什么要延时10ms啊?那是因为按键被按下时,不会像理想的情况非0即1,而是会有抖动,如下图当机械按键被按下或松开时,会有10ms的抖动时间,所以要延时10ms来消去波形抖动(* ̄︶ ̄)知道了这个,一般初学者编写的按键驱动程序如下://延时1msvoid Delay1ms() {   //@12.000MHz  unsigned c...

  • 【重学51单片机】一、酷炫呼吸灯,不到30行代码就实现了

    2024-07-12

    【说在前面的话】单片机技术是现代工业自动化、电子电气及物联网等的一门必不可少的主流技术。随着人们生活智能化的提高,单片机技术也几乎融入了我们生活的各个角落,比如智能电饭煲、智能音箱、等等。由此,《重学51单片机》系列文章意在帮助初学者入门单片机技术。我们会从最简单的点亮一个灯开始,一步一步实现按键、lcd1602、ds18b20、ds1302、双机通信等模块,同时,还会讲一些硬件通信协议,比如uart、IIC、SPI等。并结合C语言的编程技巧,以实际的工程项目来给大家讲解编程思路,让大家灵活运用C语言的指针与结构体,实现编程模块化。言归正...

  • 群友看傻了!三个简单步骤我就把LCD刷新率逼到了理论极限

    2024-07-11

    【说在前面的话】做过UI界面都知道,往LCD刷新一帧数据动辄就是几十毫秒,甚至一些低端的芯片(flash<64K,ram<32K)动不动就是几百毫秒,这个数量级真是让人头痛,为此也有很多大佬绞尽脑汁来优化这个时间,并取得了较好的效果。哈哈,所以我们今天就可以站在巨人的肩膀上也来优化一下这个让人头痛时间。要优化这个时间,当然的有测量时间的工具。众所周知(玩过Arm-2D的都知道),Arm-2D有一个小工具就是会给我们计算FPS和LCD Latency的时间,并在屏幕下方用绿色的小字显示出来,如下图其中,FPS就是我们常说的刷新率(单位为Hz),即芯片每秒刷新...

  • 【玩转Arm-2D】九、将“活字印刷术”进行到底之自定义A4字体

    2024-07-11

    【A4字体是什么】你用过A4纸,那你听说过A4字体吗?哈哈哈,在讲A4字体之前,我们先看看平时我们用的普通字体,如下字体中的一个点用一位二进制数表示,也就是非黑即白这样,画斜线(撇和捺)的时候就会有明显的锯齿是不是,像那种没有锯齿的字体(如下图)是怎么弄的呢?别急,我们先把他放大看看,如下放大后我们很容易发现,在锯齿边缘还有一些灰色的点(这样斜线的锯齿感就会大大减小),但是问题又来了,这样一个点用一个二进制位来表示就不行了,那怎么办呢?此时,我们可以采用4位二进制数来表示一个点,这样一个点就可以表示成16种灰度了(*...

  • 【玩转Arm-2D】八、实战篇 - 手撸酷炫智能手表GUI竟如此简单

    2024-07-11

    tips:文章已经更新,欢迎点击看下一篇      随着智能手机的普及,各种智能仪表也铺天盖地席卷而来,所谓智能,就是增加了人机交互,而人机交互最主要的就是一块彩色的屏幕。那么,在一款资源紧缺(Flash <= 64K、SRAM <= 16K)且带了彩屏的嵌入式产品中,想制作出类似智能手机界面的GUI可以吗?或者说GUI设计上有什么模板可遵循么?答案是肯定的。【基于面板的界面设计范式】这就是一种基于面板的嵌入式界面设计模板(范式),如下图所示:图中我们可以知道一个GUI主要由状态面板、导航面板和功能面板3大模块组成。其中:状态面板(即待机界面...

  • 【玩转Arm-2D】七、制作酷炫圆环进度条

    2024-07-11

    之前我们讲过一个矩形进度条的制作,忘记的可以看下面这篇文章今天我们再讲一下怎么制作炫酷的圆环进度条,效果如下所示:【制作前的准备知识】一、子Tile与矩形进度条一样,我们需要用到子Tile,之前我们讲过怎么用arm_2d_tile_generate_child函数生成一个子Tile,如下arm_2d_tile_t c_tileChild;arm_2d_tile_generate_child( &Parenttile,//父tile  &rotate_region,//子tile的region &ChildTile,//子tile  false);//默认为false今天我们补充一个用宏函数impl_child_tile来初始化一个子tile,如下:staticconst arm_2d_tile_t c_tileChild =...

  • 【玩转Arm-2D】五、小游戏制作:不到4K RAM的floppy bird 快到我追不上

    2024-07-11

    今天我们用Arm-2D制作一款时下流行的小游戏floppy bird,由于版权问题,没有用原版素材,他的玩法也很简单,只需要一个按键就可以了。视频演示如下:软硬件配置如下:硬件配置:树莓派PCIO单片机屏幕:240*240 SPI接口的显示屏图形引擎Arm-2DPFB缓存(RAM)120*33(3960)【游戏简介】这款floppy bird小游戏使用了Arm-2D图形引擎,使得制作很简单,也预祝玩Arm-2D的人越来越多,像星星之火可以燎原,燎原之势,势不可挡。有了这个寓意,我们游戏的主人公小火星就出来了,如下图:外围是Arm-2D小火星,中间是一个虫字,也预祝嵌入式小书虫公众号能够更...

  • 【玩转Arm-2D】四、旋转与抗锯齿(美颜功能)

    2024-07-11

    前两篇我们讲完了Arm-2D Tile的用法,有了Tile与子Tile的思想,我们也玩一下Arm-2D的高级功能rotation(旋转)和抗锯齿。说到旋转,我首先就想到了仪表指针的旋转,好那我们就用Arm-2D制作一个自己的智能手表,并给他开启美颜功能。啥,还有美颜。对啊,Arm-2D的旋转函数为我们提供了抠图功能(masking)、半透明显示的透明度功能(Opacity),最重要的还提供了抗锯齿功能,这3大功能用好了可不就相当于开启美颜了。我们要实现的智能手表效果如下图所示:【旋转接口函数简介】好,那我们先看看Arm-2D旋转的接口函数,如下arm_2dp_rgb565_tile_rotati...