
嵌入式基础
文章平均质量分 83
嵌入式学习
fanged
野生程序员。。。这里主要是一些学习笔记和心得。。。
注:标题带TODO的内容都是未完成,内容有可能不准确。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
学一下PLC
摘要:PLC是可编程逻辑控制器,本质是单片机在工业领域的封装应用。相比传统嵌入式,PLC更强调可靠性(抗干扰、宽温工作)、稳定性(长期无故障运行)和简易性(图形化编程)。国内以西门子为主流,国产汇川价格约为西门子一半。PLC系统包含核心单元和丰富外设模块(I/O、通讯、HMI等),采用标准化工业接口(24V电源、485总线),适合搭建模块化工业控制系统。虽然成本高于普通开发板,但其可靠性和易用性在工业自动化领域具有不可替代优势。原创 2025-08-15 14:03:10 · 88 阅读 · 0 评论 -
HarvardX TinyML小笔记1(Fundamentals of TinyML)(TODO)
TinyML课程分为三部分:基础、应用和部署。基础部分介绍TinyML概念、与传统ML的区别,以及面临的硬件限制(如缺乏FPU)和软件挑战(库支持不足)。课程使用Google Colab和Arduino 33 BLE Sense硬件,重点讲解模型压缩技术(剪枝、量化等)和TensorFlow Lite部署流程。TinyML主要关注推理而非训练,强调在资源受限设备上的优化。课程还涉及AI伦理内容,整体偏向Google技术栈。原创 2025-07-30 23:38:45 · 126 阅读 · 0 评论 -
总线学习7--Modbus
Modbus是一种简单稳定的工业通信协议,采用主从结构,支持RTU、ASCII和TCP/IP三种模式,其中RTU较为常用。协议定义了四种数据模型(线圈、离散输入、输入寄存器和保持寄存器)和七种功能码(如读取线圈、写入寄存器等)。其实例操作展示了通过RS485读取温湿度传感器的过程,包括数据帧解析(设备地址、功能码、数据、CRC校验)。编程实现方面,使用pymodbus库可以轻松完成寄存器读取和数据处理。该协议因其开放性和易用性在工业领域广泛应用。原创 2024-08-30 10:58:48 · 488 阅读 · 0 评论 -
总线学习8--RS485
摘要:本文解析了UART、RS232、RS485等通信协议的区别。UART是异步串行通信协议,而RS232和TTL是电气标准,RS232采用±12V电平增强抗干扰性。RS485是RS232的升级版,使用差分信号实现长距离(1200米)多设备通信,但只能半双工。Modbus RTU协议基于UART+RS485/232构建应用层。实践部分通过485传感器实验验证了理论,并指出需要双通道示波器观察差分信号。文章简要说明了各协议层级关系及核心特点。原创 2025-05-18 01:23:07 · 396 阅读 · 0 评论 -
FPGA--hello
摘要:作者分享首次尝试国产FPGA开发板荔枝唐nano的经验。相比之前失败的Intel Cyclone V尝试,该板价格低廉且文档完善。环境搭建中遇到IDE占用100G空间的困扰,并提示设备选择时需注意88P引脚设置。通过经典的Verilog流水灯代码示例,展示了计时器和LED控制逻辑的实现。重点解析了FPGA开发特有的综合、约束和布局布线三大步骤,将其类比为建筑施工过程。最后说明如何将程序写入开发板运行。整个过程展现了FPGA开发与传统编程的显著差异。原创 2025-06-20 23:32:50 · 1102 阅读 · 1 评论 -
蓝牙学习1(基础知识)(TODO)
蓝牙(Bluetooth)是一种短距离无线通信技术,用于在电子设备之间传输数据或建立语音连接。它采用2.4GHz ISM频段(2.402GHz–2.480GHz),支持点对点或小型局域网(如蓝牙Mesh)通信,具有低功耗、低成本、易集成的特点。原创 2025-01-26 15:12:34 · 892 阅读 · 0 评论 -
ARM内核一览
M也就是Microcontroller,微控制器的意思,主要是用在嵌入式。核心发布年份架构性能(CoreMark/MHz)特点Cortex-M02009ARMv6-M~0.9极低功耗Cortex-M32006ARMv7-M~1.25低功耗,入门控制Cortex-M42010ARMv7E-M加速度计、音频控制Cortex-M72014ARMv7E-M~5.0双精度FPU,高性能Cortex-M332016ARMv8-M~1.5支持TrustZone。原创 2025-05-27 15:43:16 · 1163 阅读 · 0 评论 -
毫米波雷达
毫米波雷达和超声波雷达在车载应用中各有特点。毫米波雷达使用24GHz或77GHz的电磁波,能够测量距离、速度和角度,且穿透能力强,适用于多目标跟踪,但成本较高(500-3000元/个)。超声波雷达则使用40kHz的声波,主要用于测距,成本低廉(5-20元/个),但穿透性差,易受环境干扰。毫米波雷达在精度和抗干扰能力上优于超声波雷达,但超声波雷达的算法更为成熟。此外,毫米波雷达模块如TI的IWR系列,根据集成算法的不同,分为仅传感器、传感器加硬件加速(HWA)和传感器加DSP等类型,开发难度和成本各异。毫米波原创 2025-05-12 00:16:49 · 1318 阅读 · 0 评论 -
从电灯泡到CPU。。
本文概述了电子技术的发展历程:从爱迪生发现"爱迪生效应"到弗莱明发明真空二极管(1904年),再到德福雷斯特发明三极管(1906年),电子管实现了信号整流和放大。1947年贝尔实验室发明晶体管,克服了电子管体积大、功耗高的缺点,并催生了MOS管(1960年)和CMOS技术(1963年),为现代CPU奠定了基础。计算机方面,从ENIAC(电子管)到冯·诺依曼架构的EDVAC(1945年),通过布尔逻辑和MOS管构建逻辑门(如与非门),最终组合成ALU等模块,形成现代芯片。文中还特别提及贝尔原创 2025-05-03 03:44:11 · 138 阅读 · 0 评论 -
刷了一个Openwrt
在海鲜市场收的,100块,还行,但是要自己刷机。选的直接是最流行的OP路由之一,移动的rax3000m,没有别的原因,就是因为用的人多,成熟,教程多。。。要刷机的时候才知道,算力版和普通的区别是EMMC和NAND的区别。不过我一直记得NAND也是不错。(之前开发过一个任务,把NAND换成NOR,真是欲仙欲死,改了驱动之后还要改文件系统。最后是能驱动了,但是文件系统死活配置不上去。。。网上指导刷机的教程也很多,要区分版本。开始差点刷成EMMC的了。确实很详细,而且针对移动的rax3000m专门做的。原创 2025-04-27 03:46:25 · 2393 阅读 · 0 评论 -
总线学习7--PWM(树莓派3B)
之前写过一篇PWM驱动三色灯。这里继续把PWM写完吧。这篇也是TODO了很久都快忘了,最早是打算用PWM的风扇,这次改成三色的LED。这里用的平台还是树莓派3B。接线如下:共阳极--3.3V绿--GPIO12蓝--GPIO13红--GPIO19。原创 2024-08-19 01:49:10 · 554 阅读 · 0 评论 -
Linux PWM控制多色灯
共阳接那个脚树莓派的3.3V,其它的接GPIO12,13,19。此外,说明书上说了红色脚电压2~2.2V,绿色蓝色3~3.2V。所以要串联电阻进行限流。=====================2025/04/24更新=====================很久之前的,都快忘了为什么要写。现在有时间,找了一个共阳三色LED,如图。对了,去年在项目上还做一个用I2C的多色led。因为I2C写过了,所以这里就先不多写了。因为我手上的电阻都是100Ω,所以都用100的了。效果也是马上就能出来了。原创 2024-04-18 15:16:23 · 420 阅读 · 0 评论 -
树莓派3的启动
我的板子是树莓派3B。抓取LOG是从串口抓的,冲启动一直到登录。原创 2024-09-01 10:20:24 · 953 阅读 · 0 评论 -
U-Boot简单学习(1)
好像自从我开始做嵌入式,就有u-boot这玩意了,以前一直不知道这个是干嘛的。总觉得费这事干嘛,直接启动操作系统不就完了。后来接触多了才知道不行。首先,OS是软件,是在存储里面,那一开始最初的启动怎么做?启动CPU,初始化时钟内存。机器要正确跑起来吗,这些都启动了才可能去加载OS。原创 2025-01-19 22:40:58 · 441 阅读 · 0 评论 -
Linux的perf
在Linux下,其实有好多种性能工具,我看的多就是htop,strace/ptrace,perf,还有最近兴起的BPF。其实按照之前的经验,一般只要框架靠谱,程序实现的靠谱,一般真的很少遇到性能问题,反而是逻辑问题比较多,比如一个漏掉的分支处理,导致行为异常或者是崩溃。不过既然有perf这个工具,还是简单看看呢。首先还是比较一下htop,perf和BPF的差异。。主要用来分析整体性能,占用的CPU,内存等。基本等同于windows下的任务管理器。。用来分析具体一个程序。优化代码,提高效率。。原创 2025-03-29 03:12:25 · 170 阅读 · 0 评论 -
Hello Vulkan
简单的介绍如下:Vulkan 是一个跨平台的高性能图形和计算 API,由 Khronos Group 开发,旨在提供更高效的硬件控制和更低的 CPU 开销。与传统的 OpenGL 相比,Vulkan 提供了更细粒度的控制,支持多线程渲染,适用于现代 GPU 架构,广泛应用于游戏、虚拟现实、科学计算和移动图形等领域。Vulkan 的设计目标是最大化性能,同时保持跨平台兼容性,支持 Windows、Linux、Android 等操作系统。从主页可以看到很多精美的图,貌似都是Vulkan生成的。原创 2025-02-26 03:35:14 · 224 阅读 · 0 评论 -
CMake小结2(PICO为例)
构建系统现在真的太多了,完全学不过来的感觉,meson,gardle,buildroot, Maven。。。我是真的有点放弃治疗了。之前其实CMake主打过一阵,不过那时还忙着GT的事情,所以基本上是混过来的。也没有太认真去看。最近在看FreeRTOS,用的板子是pico,首当其冲遇到的问题就是编译环境,没想到这里用的也是CMake,前两天尝试增加了一点东西,但是报错很多。看来这次这玩意是绕不开了,结合树莓派的手册,这次就详细再看看吧。有个实际的高手的项目看,也比自己瞎学强多了。。原创 2025-02-25 03:17:46 · 560 阅读 · 0 评论 -
LDD3学习9--USB驱动2(Device HID实操)
最近又在看RTOS,刚好两个东西可以一起看了。。。那就是在树莓派PICO上弄一下基于RTOS的USB device。这次的例子是HID。其实想做的还是树莓派PICO的UAC device,不过先看看HID也可以。。。原创 2025-02-24 03:08:10 · 523 阅读 · 0 评论 -
低通滤波的实践(PWM)
写这个其实是做RP2040 USB声卡的一部分。因为现在树莓派5板子没有3.5的音频输出了(树莓派3的板子反而有),所以想自制一个USB声卡,通过这个制作,打算学一下制板,USB/UAC,RTOS。。。都是我很感兴趣的内容。这个声卡应该能写好几篇文章。。。网上也看了不少USB声卡,硬件部分都提到有两个部分,1是要做电流放大。2是低通滤波。所以这次先看的这两个部分。我不是真正的硬件出身,很多内容也是刚开始学习。如果内容有误或者太粗浅还见谅。原创 2025-01-25 02:34:23 · 201 阅读 · 0 评论 -
搭建Windows下的WSL嵌入式开发环境
我之前不管是在家里还是在公司,主要的开发环境都是Windows+远程linux服务器。主要是Windows下交叉编译环境问题很多,速度貌似也不如linux。远程操作使用putty或者mobaxterm,文件用SFTP或者SAMBA,一直也还行。不过最近真遇到一个问题,那就是调试嵌入式linux内核和驱动。因为我的开发编译环境是建在远程的腾讯云,但是要调试内核,要么就是QEMU去模拟,如果是设备,就必须得接上才行。最近看到windows下的wsl,感觉挺方便的,能解决我的问题,所以试着搞一搞。原创 2025-02-14 03:07:57 · 352 阅读 · 0 评论 -
LDD3学习10--USB驱动1(理论)
端点就是最小的那个endpoint。只能是单向的,有以下四种类型:CONTROL,配置设备,获取关于设备的信息。INTERRUPT,中断端点传送小量的数据,USB键盘或者鼠标。BULK,块端点传送大量的数据。存储,网卡之类。ISOCHRONOUS,同步端点也传送大量数据,但是不保证完成,一般传输音视频。bEndpointAddress是USB的地址。其中有一位是USB传输的方向。bmAttributes,就是USB端点的类型,就是上面说的四种。原创 2025-01-20 13:39:26 · 807 阅读 · 0 评论 -
QEMU虚拟机1(虚拟树莓派3B)
QEMU是一个虚拟机,有点类似以前的VMware或者VirtualBox。看现在DIY领域玩的挺多的,所以也跟风用一下吧。看介绍说性能比不上VMware,但是模拟的更深入,目前也不是很懂。因为最近想学习Linux内核,还有就是裸片编程,虽然说树莓派不贵,但是用实体机有时候也挺麻烦。所以还是把虚拟机用起来。原创 2024-08-01 01:03:35 · 506 阅读 · 0 评论 -
PCIE学习1 -- 树莓派5外挂M.2 SSD
树莓派5本身集成了PCIE控制器,于是就想着学学,但是它的插槽不能直接用,所以要买一个转接板和一个SSD。过程基本上和最后列的参考文档的过程差不多,也没什么难的。这里有一个和很多教程不一致的地方,很多教程都说要在EEPROM中修改BOOT_ORDER=0xf416,实际上我的板子是不需要的。M.2的SSD有两种,NVMe和NGFF,NGFF是不支持的,我第一次就买错了,没办法退了重新买。现在真不贵,30块钱的样子,就可以买128G的NVMe,白菜价了。转接板的排线,不光有正反,还有公母。原创 2024-11-19 01:48:18 · 1121 阅读 · 0 评论 -
树莓派上试一下软件锁相环
在树莓派上实现软件锁相环(S-PLL)通常涉及实时信号的采集和处理。以下是一个示例,演示如何在树莓派上实现 S-PLL 来从外部输入信号中提取同步信号。通过 Raspberry Pi 采集音频输入信号(例如麦克风信号或音频文件),实现一个简单的软件锁相环,以解调信号或实现同步。通过该示例,您可以在 Raspberry Pi 上运行 S-PLL,并使用真实信号进行实验。原创 2024-11-17 15:07:53 · 388 阅读 · 0 评论 -
YOLOV8--玩了一下
2 最开始的代码用的opencv的,不过貌似在树莓派上不支持CSI接口的camera,有点无语。换成亲儿子Picamera2就行了。1 代码中下载yolo的模型还是比较慢,可以在浏览器下载好,然后拷贝进去,快很多。代码很简单,注释也说的很明白。不过这种纯软解决感觉还是会有性能问题。好吧,看来后面还是要多学习TensorFlow。平台还是现在用的树莓派5。原创 2024-11-17 03:00:21 · 656 阅读 · 0 评论 -
树莓派外挂Camera4(pipeline)
现在说起Pipeline都有点迷糊了,很多都是这个概念。GStreamer里面有,相机里面有,然后还有别的地方也有。pipeline本身其实没什么特殊的,简单理解就是一段处理。晚上查了一下,确实这几个地方都叫pipeline,然后树莓派还有个自己的Post-processing,也就是后处理。今天主要说camera的和Post-processing的。原创 2024-10-03 01:13:48 · 892 阅读 · 0 评论 -
车牌识别1
本来是可以用esp32 cam来做,后面想了想还是在linux上弄吧。终于,最近几天把树莓派的摄像头打通了。看了下这篇的TODO是二月就做了,但是一直拖到现在10月。也就是一个关键的前置摄像头那块没打通,所以这边也block了。里面还用了个pytesseract的库,看介绍说这个是用来做OCR的,好吧,我也是第一次用这个。我想原因是第一这个代码不支持汉字,第二还是要用深度学习来做这题才行。最好的时候88888能认出来,但是其它的就惨不忍睹了。网上找了一个炫酷车牌。原创 2024-02-07 02:31:21 · 229 阅读 · 1 评论 -
树莓派外挂Camera2(libcamera)
树莓派其实有两个摄像头接口,一个是rpicam,另一个是libcamera。不过rpicam是以前的接口,而且貌似还是树莓派专用的,所以不用再花精力去看了。而libcamera是开源库,貌似现在用的还越来越普遍,所以学学完全没问题。现在树莓派在libcamera之上,又封装了picamera2,本来python又快又好的信条,所以先从picamera2开始学吧。原创 2024-10-03 01:12:58 · 2142 阅读 · 0 评论 -
树莓派外挂Camera1(基操)
手上有OV5647,OV2640,看这次能不能驱动吧。。。今天忙活一阵,终于把OV5647跑起来了。图像质量很一般,10块多点的camera,本来也没指望太多。原创 2024-09-29 01:54:52 · 1024 阅读 · 0 评论 -
树莓派3B驱动ST7735(内核)(Framebuffer篇)(TODO)
终于一条龙的将ST7735驱动,Framebuffer,还有LVGL的东西点亮了。现在也有点时间来总结一下。原创 2024-09-25 02:05:27 · 853 阅读 · 1 评论 -
LVGL UI 库(TODO)
还是老规矩,先上图。。。整体来说还是接着以前的,之前在树莓派上弄通了ST7735的驱动,framebuffer,现在终于能来看GUI了。原创 2024-05-05 04:00:52 · 351 阅读 · 0 评论 -
嵌入式Linux充电电池管理
用TP4056当然是简单方便,但是也存在设置不灵活的问题,回想最近做的商业级项目,都是可以直接在设备树中配置,应该是没用这种方法。这个真的是要根据电池的特性来看,不同类型的电池,甚至不同型号的电池可能管理策略都不同。其中,C表示电池额定容量对电流的表示,比如电池的容量是1000mAh,1C就是1000mA的充电电流。恒压充电(CV):当电池电压达到4.2V时,调整充电器输出,维持电压恒定在4.2V,同时电流会逐渐减小。那么关注的地方就有两块,一个是电池状态的监控,还有一个就是充电电流电压的控制。原创 2024-09-12 12:26:35 · 958 阅读 · 0 评论 -
看看原理图(以ESP32游戏机为例)
这个芯片主要是对单节充电锂电池,电池低于2.9V时,提供小电流,电池电压大于2.9时,提供相对大的电流,而电池电压大于4.2V时候,进入恒压充电。不过除了电流可以通过电阻配置外,其它的电压都是恒定的。暂时能想到的就是以上几个,所以其实重点关注上面的几个内容就行了,其它的比如每个模块里面具体是什么走线,用什么芯片和硬件,倒是不用太关注,不用去抢硬件工程师的饭碗。- **晶体管**:由三个引脚组成,分别是基极(B)、集电极(C)和发射极(E),不同的符号表示不同类型的晶体管(如 NPN、PNP)。原创 2024-08-31 12:39:20 · 1477 阅读 · 0 评论 -
树莓派3B驱动ST7735(Python)
要在树莓派 3B 上驱动 ST7735 LCD 屏幕并显示 "Hello World",你可以使用 Linux 内核中的 SPI 驱动程序以及帧缓冲驱动程序来控制显示屏。查了一下午,最后发现GPT搞成需要触屏的驱动了,pitft28-resistive一般是用在需要触屏的地方,然后dtoverlay的用法也不是很熟悉,看起来应该是设备树的匹配,这块后面有时间再研究研究。通过这些步骤,你可以在树莓派 3B 上成功驱动 ST7735 LCD 屏幕,并在屏幕上显示 "Hello World"。原创 2024-08-30 01:33:06 · 834 阅读 · 0 评论 -
示波器的使用
算是很基础的一个东西,但是该掌握还是要认真掌握才行。原创 2024-08-14 11:17:34 · 449 阅读 · 0 评论 -
总线学习5--I2S
音频信号在原始状态下是模拟信号,表现为随时间连续变化的电压波形。为了将这些模拟信号存储或处理为数字形式,需要将其转换为一系列离散的数字值。这一过程称为。原创 2024-08-06 00:34:57 · 3968 阅读 · 1 评论 -
MQTT协议
第一部分是固定的一个字节,从高位到低位分别是消息类型(占 4bit)、重传标识(占 1 bit)、Qos 标识(占 2bit)、保留位 (占1bit);的消息发布/订阅传输协议。从抓包的情况来看,装的mosquitto-clients是2个字节的固定报头。当然,如果是扩充到3个字节,那消息长度肯定是够用的。因为我之前一直做路由器,一直是听说MQTT协议,年初接触了一下Openwrt产品,又是这个协议,所以抽时间看一下。5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;原创 2024-08-05 02:19:34 · 205 阅读 · 0 评论 -
总线学习6--I2C(EEPROM)
鉴于I2C的项目还是很多,所以又多做了一个试验。原创 2024-08-11 18:11:42 · 959 阅读 · 0 评论 -
总线学习4--UART
总结一下UART协议基本就是两根线(不算地线),甚至你都可以理解成一根线,只是方向相反而已。也没有时钟那些乱七八糟的,时隙直接sleep就欧了。数据一次一个byte,高就是1,低就是0。真的很简单。。在嵌入式里面,不知道有没有比它更简单的协议。。。上图的校验位据说基本上不会用的。。。原创 2024-08-04 23:04:46 · 367 阅读 · 0 评论 -
嵌入式外挂MCU
之前看了有些方案说外挂某个芯片,或者说外挂某个MCU,当时觉得很牛X,是很想写一点来学习学习。最近真的学了嵌入式底层,觉得这个话题又没啥好写的。从软件的角度来说,外挂硬件,其实就是你用了某个三方库。。。没错,就是这么理解。只是软件上可能是用dlopen这样的软件接口去开,然后调用函数接口。但是嵌入式硬件中是使用I2C或者SPI这些总线协议去去控制。当然,如果封装一些I2C这些,也和函数接口无异了。最后是有可能设备树的某些定义或者属性要改一下。难吗?好像真不算难,没太多好写的。原创 2024-06-20 15:26:20 · 459 阅读 · 0 评论