- 博客(306)
- 资源 (2)
- 收藏
- 关注
原创 蓝牙基础(二):蓝牙核心系统架构
查看蓝牙核心规范文档,都会看到一个复杂的核心系统架构图,蓝牙核心系统架构图概括了蓝牙的基本工作原理。对于初学者,初看这图,不可避免有点令人望而却步,这未免太过于晦涩?本文我们将尝试对它进行拆开分解,以便于能更好地理解蓝牙的基本工作原理。
2026-01-26 08:38:39
654
原创 蓝牙基础(一):蓝牙软硬件架构介绍
随着物联网的发展,蓝牙已融入到我们生活的方方面面:手机、平板、手环、耳机、音响、智能灯泡、智能门铃、摄像机、冰箱、空调、洗衣机、血糖仪、键盘、鼠标等等。关于蓝牙相关的芯片、协议栈、应用方案也因产品需求的不同而存在很大的差异,因而导致关于蓝牙相关的知识相对比较离散。
2026-01-26 08:38:15
972
原创 芯片半导体基础(二) :20世纪最伟大的发明,PN结与晶体二极管
PN结是晶体管的基础,它使得晶体管能够作为一个放大或是开关元器件。晶体管的发明不仅是一个技术上的突破,也标志着电子学的一个新时代。它极大地推动了科技和社会的发展,奠定了现代信息技术的基础,因此也被认为是20世纪最伟大的发明之一。1947年贝尔实验室发明了第一个锗晶体管,20世纪50年代末硅晶体管开始被商化。现在每年全球生产的芯片数量超过千亿颗,而且在一些复杂的芯片中,一颗芯片就包含几亿到几百亿个晶体管。而这一切,都还得从PN结说起。
2026-01-26 08:37:51
815
原创 芯片半导体基础(一):真空二极管、三极管工作原理
半导体的前身是真空管,在集成电路被发明前,真空管被广泛应用于收音机、电话、无线电、雷达、电视、电子计算机等电子设备中。真空管也叫电子管,在不同的资料中称呼可能不一样,这里我们统称为真空管。因为翻译的原因,Triode三极管实际指代的是真空三极管,而不是我们现在使用的晶体三极管。在了解半导体前有必要对真空管有一个简单的了解。
2026-01-26 08:37:25
1241
原创 芯片半导体基础:序
这是我自己学习芯片知识的一个笔记记录,都是些简单的基础概念和工作原理的介绍,不涉及复杂的公式和计算。芯片算力的提升,可以加速 AI 模型的训练和推理过程,芯片在这波人工智能浪潮中扮演着至关重要的角色。计划是按历史发展介绍:真空管(电子管)、计算机原理,晶体管、集成电路、芯片制作、光刻原理、存储芯片、逻辑处理芯片、GPU芯片,量子计算等等。芯片种类繁多,这里主要介绍与数字计算机相关的数字芯片基础知识,目的在于了解芯片的工作原理,以及芯片对计算机、人工智能发展的促进作用。请关注 liwen01 公众号。
2026-01-25 10:09:52
272
原创 WiFi基础(八):WiFi安全、认证与加密
计算机网络在给人们带来便利的同时,也引入了安全风险,对于无线WiFi网络而言,风险更高。接入认证和数据加密。虽然现在网络安全事件远少于网络诈骗,网络认证与数据加密的方法及原理仍值得学习和借鉴。
2026-01-25 10:07:41
1172
原创 WiFi基础(七):WiFi漫游与WiFi组网
无线 WiFi 的优点是方便、灵活,可以接入各种设备。缺点就是信号容易被干扰、信号覆盖范围有限。为何很多洗手间的 WiFi 信号都不太好?市面上的穿墙路由器真的就比其它路由器效果好么?为何有时候 WiFi 信号强度很好,但网速却很慢?如果房间比较大,需要怎样才能实现 WiFi 全屋覆盖?如果是独栋多层的楼房,又要如何组建 WiFi 网络?商场、公司、学校等人员密集场所,它们的 WiFi 又是如何组建?什么是 WiFi 漫游、它有什么好处、又要如何实现 WiFi 漫游功能?
2026-01-25 10:05:45
1066
原创 WiFi基础(六):天线基础知识
麦克斯韦预言了电磁波的存在,赫兹通过实验证实了麦克斯韦的预言,马可尼基于无线电磁波的原理发明了无线电报系统,从此人类进入无线通信系统时代。天线是通信系统中必不可少的组成部分,它的作用是将电信号转换为电磁波信号发射出去,也可以将接收到的电磁波信号转换为电信号。在 WiFi 应用中,WiFi 天线与 WiFi 性能关系密切,包括但不限于天线的方向、极化、增益、工作频率范围等参数。
2026-01-25 10:03:52
1109
原创 WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧
前面介绍了 WiFi 的工作原理和 WiFi 的接入过程,这里将通过分析 WiFi 具体数据包结构,让你对 WiFi 工作原理和接入过程有一个更进一步的了解。前面文章可以通过下面连接查看:WiFi基础(四):WiFi工作原理及WiFi接入过程。
2026-01-25 10:01:51
820
1
原创 WiFi基础(四):WiFi工作原理及WiFi接入过程
数据帧、管理帧、控制帧。与有线网相比,无线 WiFi 网会复杂很多。大部分应用软件开发对 WiFi 的控制帧和管理帧了解得并不多,因为它们在物理层和数据链路层就已经被处理了,上层应用很少能感知到。一般是在设备出现 WiFi 连接不上,或者是工作不稳定的情况下,才会去分析 WiFi 驱动工作情况以及抓 WiFi 空口包数据来分析。有抓过 WiFi 空口包的同学应该清楚,无线 WiFi 网的网络包不管是从包类型还是包信息内容来看,都会比有线网的包复杂很多。
2026-01-25 09:59:13
1673
原创 WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7
经过二十多年的发展,WiFi 在硬件能力、软件和算法、频谱资源、市场需求、电源与能效方面都有了很大的提升。所以我们能看到从最开始只有几 M 速率的 802.11b,发展到现在几十 G 速率的 WiFi6,WiFi7。前面我们介绍了 802.11 b/g/n 的一些核心技术和基础概念,本章将介绍目前比较新的 WiFi5 和 WiFi6,以及在今年会发布的 WiFi7。:首次引入 MIMO 和 40 MHz 频宽,基础的高效无线网络标准。:更高数据速率,专注于 5 GHz 频段,适合高清流媒体和在线游戏。
2026-01-25 09:57:16
817
原创 WiFi基础(二):最新WiFi信道、无线OSI模型与802.11b/g/n
最近十几年,通信技术发展迅猛,通信标准更新频繁,有的设备还在使用 802.11/b/g/n 协议,有的已支持到 WiFi6、WiFi7。而国内有关无线 WiFi 的书籍或资料却很少,就算能找着的,大多也是比较老旧。本文试图使用最新的数据来介绍 WiFi 相关的一些基础知识。家用路由器一般都兼容支持哪些 WiFi 协议标准?802.11 b/g/n/ac/ax 具体是指什么?与 WiFi4/5/6/7 有什么区别?为什么不同协议间的最大速率相差巨大?它们实现的原理是什么?
2026-01-25 09:52:36
1078
原创 WiFi基础(一):无线电波与WIFI信号干扰、衰减
为什么我们在高速移动的高铁上网络会变慢?为什么 5G WiFi 的穿墙能力没有 2.4G 的好?为什么在对 WiFi 进行 iperf 拉距测试的时候,每次测试数据都会有差异?为什么在路由器很多的环境,WiFi网络会变慢?为什么在有些大型体育馆,人少的时候网络信号好,人多的时候网络信号很差?为什么路由器放置在客厅上,远离客厅的房间会信号不好?为什么蓝牙,WiFi,微波炉之间会相互干扰?要比较深入地去回答上面的这些问题,我们需要先回顾一下中学的物理知识,然后再对这些问题做解答。
2026-01-25 09:50:21
1261
原创 文件系统(十一):Linux Squashfs只读文件系统介绍
嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省空间的目的。另外还有个特性就是它可以分块解压缩,使用数据会更加灵活,但同时也会引入读放大的问题。
2026-01-25 09:40:05
1093
原创 文件系统(十):一文看懂 UBI 文件系统
UBI (Unsorted Block Images)文件系统是一种用于裸 flash 的文件系统管理层。它是专为管理原始闪存设备而设计,特别适用于嵌入式系统。与 YAFFS2 和 JFFS2 不同的是,它可以提供整个 flash 空间的磨损平衡,并且有良好的扩展性,适用于大容量的 nand flash。
2026-01-25 09:37:50
1108
原创 文件系统(九):一文看懂yaffs2文件系统原理
yaffs 是专为nand flash 设计的一款文件系统,与jffs 类似,都是属于日志结构文件系统。与jffs 不同的是,yaffs 文件系统利用了nand flash 一些特有属性,所以在数据读写擦除和回收上都有较大的差异。关于jffs2文件系统的介绍可以查看《文件系统(八):Linux JFFS2文件系统工作原理、优势与局限这里先介绍一下nand flash的一些基础知识,有助于后面理解yaffs的设计原理。
2026-01-25 09:33:49
900
原创 文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
在嵌入式Linux设备中,经常使用jffs2文件系统来作为参数区的文件系统格式。至于为什么要使用jffs2来作为参数区的文件系统,我猜大部分人都没有做过多的思考。jffs2在2001年被设计出来,距今已过二十多年,现在在嵌入式设备中它还在被大量使用、说明这套设计本身是没有问题。但是,你是否有思考过,你的jffs2文件系统使用是否正确、合理?如果你存储文件某天突然不见了,你要怎么分析?是flash有坏块,还是被jffs2垃圾回收处理掉了?亦或是应用程序误删除了?又要怎样才能把它恢复回来?
2026-01-25 09:31:36
859
原创 文件系统(七):文件系统崩溃一致性、方法、原理与局限
先提几个问题:什么是文件系统崩溃一致性?为什么会出现文件系统崩溃一致性问题?有哪些方法可以解这个问题?它们各自又有哪些局限性?window系统电脑异常后会蓝屏、手机死机卡顿后我们会手动给它重启,大部分设备的系统在遇到不可修复的严重异常后都会尝试通过重启来恢复,因为系统重启之后,系统整体比较"干净"。其中有一例外,就是我们希望磁盘存储的数据无论在系统出现何种异常的情况下,都能够保存好原来的数据,系统恢复后可以再找到异常前的所有数据。
2026-01-25 09:28:50
901
原创 文件系统(六):一文看懂linux ext4文件系统工作原理
Linux系统中的ext2、ext3、ext4 文件系统,它们都有很强的向后和向前兼容性,可以在数据不丢失的情况下进行文件系统的升级。目前ext4是一个相对较成熟、稳定且高效的文件系统,适用于绝大部分规模和需求的Linux环境。数据分段管理、多块分配、延迟分配、持久预分配、日志校验、支持更大的文件系统和文件大小。ext4文件系统的具体实现比较复杂,本文尝试用比较简单的方式用一篇文章的篇幅来简单地介绍一下它的工作原理。一个索引节点的大小为256Byte。
2026-01-25 09:25:02
1052
原创 文件系统(五):exFAT 文件系统原理详解
exFAT是微软2006年推出的一种文件系统,距今已快二十年,相比于FAT16和FAT32,exFAT还是算年轻。exFAT一直是微软的一个专用文件系统,直到2019年微软发布它的规范,目前微软拥有exFAT多个元素的专利,如果产品上使用exFAT,需要微软授权,否则有可能侵权。exFAT被SD协会采用作为大于32GB SDXC卡的默认文件系统,在win11系统上,SDXC卡默认格式化选项已经没有FAT32选项,exFAT文件系统的使用范围正逐渐扩大。为啥微软要用exFAT来代替FAT32呢?
2026-01-25 09:21:46
957
原创 文件系统(四):FAT32文件系统实现原理
FAT32是从FAT12、FAT16发展而来,目前主要应用在移动存储设备中,比如SD卡、TF卡。隐藏的FAT文件系统现在也有被大量使用在UEFI启动分区中。
2026-01-25 09:18:50
629
原创 文件系统(三):嵌入式、计算机系统启动流程与步骤
我们身边的各种电子设备,手机、手表、相机、个人电脑等等,从用户体验的角度看,好像只要给它们一上电,它们就开始启动可以工作了,这个过程一般是比较短暂的。从一个嵌入式开发的角度来看,不管是嵌入式系统,还是其它的计算机系统,其启动过程都是一个相对复杂的过程。这个过程一旦出错,基本上设备就不能正常运行了。要了解计算机的启动流程,我们先看下一台个人计算机的主板上都有些什么接口和组件电源CPU南桥北桥芯片组BIOS芯片磁盘接口、还有各种扩展接口和连接器(内存、显卡、网卡声卡等等)与启动比较相关的是电源CPU。
2026-01-25 09:16:36
956
原创 文件系统(二):分区、格式化数据结构
生活中,我们买回来的SD卡、TF卡、硬盘等存储设备一般是可以直接使用,如果要改变存储设备上的文件系统格式,我们一般直接在电脑上右键格式化就可以实现。买回来能直接用,是因为存储设备在出厂前厂家就已经做了分区和格式化操作。为什么存储设备需要分区格式化之后才能被使用?分区与格式化各的目的又是什么?分区是为了给硬盘提供逻辑结构,格式化是为了给分区提供可以用于存储数据的格式。分区是将硬盘划分成一个或多个逻辑区域的过程。每个分区被视为独立的存储设备,有自己的文件系统和存储空间。方便数据组织和管理。
2026-01-25 09:12:32
854
原创 文件系统(一):存储介质、原理与架构
从系统角度来看,文件系统是对文件存储器空间进行组织、分配、负责文件存储并对存入的文件进行保护和检索的一个系统。它的目的是使用户和应用程序能够方便地管理存储器上的文件和目录,比如常见的对文件的增、删、改、查。每当我们操作一个文件的时候,实际都会涉及到存储器、管理系统、被管理文件,还有就是实施文件管理所需的数据结构。存储器,我们也叫存储介质,也就是电子设备用来存储数据信息的器件。存储介质,也就是用来存储信息的介质,从远古的石壁刻画,到古代的笔墨纸砚记录,再到电气时代的磁存储、光存储、半导体芯片存储。
2026-01-25 09:10:06
968
原创 T31快启图像效果优化
根据官方的说明,君正系列,在T20系列,可以直接使用应用层软件直接采adc值与稳定的ev值但是在T30,T31芯片上,因为启动的时候ADC其实还未稳定,所以只能是采集启动时boot的adc值,与内核打印中稳定的ev值相互对应,不然会出现不准确的现象
2022-10-29 09:59:39
3602
1
转载 时间复杂度和空间复杂度解析
在学习具体的数据结构和算法之前,每一位初学者都要掌握一个技能,即善于运用时间复杂度和空间复杂度来衡量一个算法的运行效率。所谓算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但耗费的时间和资源肯定有所差异。就比如拧一个螺母,扳手和钳子都可以胜任,但使用钳子拧螺母肯定没有扳手的效率高。图1 解决问题的方式有多种这也就意味着,如果解决问题的算法有多种,我们就需要从中选出最好的那一个。那么,怎么判断哪个算法更好(或者更优)呢?“好”算法的标准解决一个问题的方法可能有很..
2021-04-13 09:52:58
1117
原创 君正Zeratul开发(6)——为什么禁止使用system
文章目录(一)前言(二)为什么危险(1)实现(2)执行:(3)返回值:(4)危险的原因(三)为什么不建议在主进程中执行引用:(一)前言在很多嵌入式设备开发中,很多平台明确规范,禁止在主程序中使用system 等系统调用接口函数,需要在另外的一个守护进程中去实现system函数的功能。这里有两个问题:1.system函数有哪些不安全的地方? 2.为什么不可以在主进程中去执行system,而在守护进程中却可以?(二)为什么危险system 源码实现int system(const char * cmd
2021-03-31 20:25:54
2959
7
原创 君正Zeratul开发(5)——快速启动优化
前言: Camera 需要快速启动, 以第一时间抓拍到图像,君正官方给的第一帧图像是200ms,实际应用中时间会长不少。1.尽快运行主程序 主程序应该放置在 rootfs 中并第一时间加载运行。 例如在 rcS 中, 在环境变量设置完成之后即可运行主程序 主程序依赖的动态库要放在 rootfs 中, 例如 libimp.so 主程序启动后首先初始化视频, 之后可以并行处理其他的业务(比如 P2P、 认证鉴权等等) 如果对某些配置文件有依赖, 例如 config 分区下的配置文件, 可以使用如下
2021-03-31 20:25:43
3672
原创 君正Zeratul开发(4)——图像效果调试
前言 目前而言,君正设备的isp 图像效果还是君正的工程师在负责开发调试,如果需要添加一款新的摄像头,一般也是将新摄像头的驱动,从ISVP 版本移植到Zeratul平台。这里主要介绍:(1)摄像头驱动移植;(2)快启图像效果优化;(3)宽动态效果(一) Sensor驱动移植 Zeratul平台 是从ISVP平台优化过来的,所以很多Sensor 驱动也是需要从ISVP平台移植到Zeratul平台。其中分为两个步骤:以gc2053 Sensor为例: **Step 1 添加sen
2021-03-31 20:25:33
8827
4
原创 君正Zeratul开发(3)——升级回滚
升级 升级有两种方案:直接升级方案,recovery 升级 直接升级方案与其他嵌入式设备升级方式一样,就是从不同地方(OTA,U盘,TF卡等)获取升级文件,然后将需要升级的数据烧录到指定的flash分区地址去就可以了。 recovery 升级是当系统启动异常或是接收到recovery命令的时候,设备进入recovery模式,这个模式是一个精简的系统,一般只初始化跟升级相关的外设,一般也只进行升级相关的业务。 直接升级直接升级方案的几个分区升级方法如下: boot: 系统启动后 boot 分区不
2021-03-31 20:25:24
2325
1
原创 君正Zeratul开发(2)——uboot启动分析
前言 boot启动一般分为两个阶段,君正设备的第一阶段uboot spl 程序没有开源,用户编译的是第二阶段的boot,最后将两个阶段的boot合并到一起,写入到boot分区中去,boot分区如下(一)SPL (secondary program loader) SPL(secondary program loader)是一个十分小的bin文件,它是用来引导主u-boot文件。对于一些SRAM很小的SOC,无法一次性加载ROM中的bootloader到SRAM中,因为一般SRAM远远小于b
2021-03-31 20:25:10
6188
1
原创 君正Zeratul开发(1)——分区启动分析
文章目录(一)整体分区(二)Tag 分区(1)tag 损坏说明:(2)T31 RISCV(三)启动流程(一)整体分区1234567boottagkernelrootfsrecoverysystemconfig0.25M352K4M~5M2M~3M2M~2.5M4512K512K● boot 分区存放 bootloader● tag 分区存放系统启动参数, 包括 cmdline, Senso init setting, env 参数, b
2021-03-31 20:24:58
3506
4
原创 君正Zeratul开发(0)——序言及目录
前言 2020年疫情加上海思供货紧缺,导致很多方案开始找相应的替代方案。对于海思低功耗视频方案,君正T31 Zeratul 是一个比较理想的替代方案。君正低功耗方案,因为向前的使用量并不算大,所以整个方案并不算是非常成熟。开发文档和资料跟海思相比还是有些差距,在使用的过程中,也依然还有不少问题需要持续优化。 我就自己在使用君正T31 Zeratul 中遇到的问题及一些知识点整理成文章,以便日后自己查看,也可供大家参考。 (一)Zeratul 与ISVP的区别 Zeratul 是基于君正 T 系列芯
2021-03-31 20:24:31
6405
4
原创 unix domain 与本地本地回环在进程间通信中的差异
前言: 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡(loopback)上的IP。在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况。比如下面代码(一)本地回环: 客户端数据收发程序:static int send_recv(char *cmd, int *ret, char* strResult, int nSize){ struct sockaddr_in sin; struct sockaddr_in cin; int
2021-03-31 15:02:01
1892
转载 深入理解UDP协议
UDP的疑难杂症UDP的传输方式:面向报文面向报文的传输方式决定了 UDP 的数据发送方式是一份一份的,也就是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢? UDP 数据包的理论长度是多少,合适的 UDP 数据包应该是多少呢?(1) UDP 报文大小的影响因素,主要有以下3个:[1] UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536; [2] 以太网(Ethernet)数据帧
2021-03-31 11:28:12
1717
转载 TCP/IP网络协议详解
一、 计算机网络体系结构分层一图看完本文计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。二、 TCP/IP 基础2.1 TCP/IP 的具体含义从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 I.
2021-03-30 18:59:52
13388
1
原创 Hello World 深入理解(4)——静态链接
前言:问题: #include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 不同的编译器(Microsoft VC、GCC)和不同的硬件平台(x86、SPARC、MIPS、ARM),以及不同的操作系统(Windows、Linux、UNIX、Solaris),最终编译出来的结果一样吗?为什么?链接的接口——符号链接过程的本质就是要把多个不同的目标文件之间相互“粘”到一起,或者说像玩具积木一样,可以拼............
2020-12-10 20:20:59
1526
原创 Hello World 深入理解(3)——目标文件分析
前言: 问题:最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 在Linux系统中可执行文件属于elf文件格式中的一种,它里面有编译后的机器指令,数据,符号表,调试信息,字符串等等信息。如果要知道它是如何存放的,那就需要了解ELF文件格式可执行程序:可执行文件格式( Executable)主要是 Windows下 的 PE (Portable Executable)和 Linux 的 ELF (Executable Linkable For........
2020-12-10 20:19:50
879
原创 Hello World 深入理解(2)——编译过程与编译原理
前言: 问题:编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 编译一个C程序可以分为四阶段,预处理阶段->生成汇编代码阶段->汇编阶段->链接阶段,这里以linux环境下gcc编译器为例。 使用gcc时默认会直接完成这四个步骤生成可以执行的程序,但通过编译选项可以控制值进行某些阶段,查看中间的文件。1.万能程序大法----Hello World #include <st.........
2020-12-10 20:18:38
1734
1
原创 Hello World 深入理解(1)——序言
最近看了《程序员的自我修养——链接装载与库》,少有的国内优秀计算机书籍。它在开篇的时候提出了下面的9个问题: 1.程序为什么要被编译器编译后才能运行? 2.编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的? 3.最后编译出来的可执行文件里面是什么?除了机器码还有什么?他们怎么存放的?怎么组织的? 4.#include <stdio.h>是什么意思?把stdio.h包含进来意味着什么?C语言库又是什么?它怎么实现的? 5............
2020-12-10 20:17:36
673
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅