智能 IC 卡技术杂谈

集成电路卡又称为 IC 卡(Integrated Circuit Card),是一种内嵌有集成电路的塑料标签卡片,其集成电路当中包含有 8 位或者 32 位的微控制单元 MCU、只读存储器 ROM、电可擦只读存储器 EEPROM(按字节操作)或者闪速存储器 Flash(按扇区操作)、随机访问存储器 RAM,以及固化在只读存储器 ROM 当中的片内操作系统(COS,Chip Operating System),并且通常内置有 DESRSA国密 SMxSSF 等加解密算法。

目前市场上主流的 IC 卡芯片有恩智浦 NXPMifare 系列、英飞凌 InfineonSL 系列、、复旦微电子FM 系列,华大半导体SHCCIU 系列除此之外,还有 华虹集成电路SHC 系列,以及大唐微电子DMT 系列,紫光国微THD 系列。这些芯片主要遵循 《ISO/IEC 7816》《ISO/IEC 14443 TypeA》两部协议规范,本文主要介绍了笔者在日常工作当中,经常接触到的各类智能卡相关的技术与规范。

阅读更多

玩转 Arduino Uno、Mega、ESP 开源硬件

Arduino 是一款非常流行与成熟的电子原型评估套件,其 PCB 硬件IDE 集成开发环境板级支持包 全部基于开源共享协议,其中,Eagle 原理图以及 PCB 布线遵循 CC BY-SA 共享协议,而 IDE 集成开发环境的源代码基于 GPL 开源协议,微控制器 MCU 的 C/C++ 板级支持包则是基于 LGPL 开源协议。自从 2005 年第一款 Arduino 开发板面世以来,官方已经推出了琳琅满目的各类硬件以及软件包,叠加各大芯片厂商的助力,整个开源社区的氛围日趋活跃与丰富。

本文首先从入门级的 Arduino Uno 入手,然后逐步过渡至片上资源更为丰富的 Mega 2560,两款都是由 Arduino 官方所推出的 5V 供电电压的开发板。最后引入了携带有 Wifi/Bluetooth 无线接入能力的 ESP8266ESP32,而它们则是采用了国产 3.3V 芯片的开发板,由于开源社区或者芯片原厂提供了兼容 Arduino API 的板级支持包,在较为丰富功能的基础上提供了相对低廉的价格,叠加 Arduino 较为成熟的开发环境,更是加速了 Arduino 的应用与普及。

阅读更多

高等教育出版社《模拟电子技术》温习札记

电子信号是指随着时间进行变化的电压或者电流,可以在数学描述上描述为时间的函数,并且可以绘制出其波形。模拟信号数值时间上均具有连续性,对于任意时间均有确定的电压或者电流值与之对应。常用的模拟电路有放大电路(信号电压、电流、功率的放大)、滤波电路(信号的提取、转换、抗干扰)、运算电路(完成信号之间的加减乘除、积分、微分、对数、指数运算)、信号转换电路(电流与电压信号之间的相互转换)、信号发生电路(用于产生正弦波、矩形波等波形)、直流电源(将不同电压与频率的交流电转换为指定电压与电流的直流电)。

本文所涉及的内容主要包括有常用半导体器件基本放大电路集成运算放大电路放大电路的频率响应放大电路中的反馈信号的运算和处理波形的发生和信号的转换功率放大电路直流电源,基本涵盖了模拟电路当中主要的电路类型,其中放大电路是对模拟信号的最基本处理,上述模拟电路当中均包含有放大电路,因而放大电路是构成各种模拟电路的最基本电路

阅读更多

Git 版本管理命令备忘录

Linux Kernel 是一个非常大规模的开源软件项目,在该项目 1991 ~ 2002 年维护的早期,所有对于代码的修改都是以补丁(Patches)和归档文件(Archived File)的形式进行传递。在 2002 年之后,Linux 内核项目开始使用一款称为 BitKeeper 的商业版本管理工具。但是到了 2005 年,Linux 社区与 BitKeeper 商业公司之间的合作关系破裂,促使 Linux 开源社区以及 Linus Torvalds 本人根据之前的版本管理经验,开发出了全新的分布式版本管理工具 Git

Git 不会以基于文件修改列表的方式来保存数据,而是以及引用快照的方式来保存文件的历史信息;即使没有 Git 版本管理服务器的支持,大部份操作也能够在本地正常进行;Git 当中的所有数据存储时都会经过 SHA-1 完整性校验,并且使用一个长度为 40 的散列字符串来存储和引用这些数据;Git 当中的所有操作都是在添加数据,因而很难执行不可撤消的任务,也很难让出现在删除数据之后无法找回的场景。

阅读更多

小议 MQTT 物联网传输协议

物联网IoTInternet of Things)通过各种网络以及传感器技术,按照约定的协议将无处不在设备联结起来,以进行信息的传输与控制交互,并实现智能化的信息感知与管理,进而构建出万物相联的智能化环境,将网络连接能力渗透进现实世界的方方面面。而伴随近年 5G 无线网的迅速商用,海量物联网设备的接入给传统 Web 通信协议带来了挑战,必须有针对性的采取一系列全新特性的通信协议,从而解决网络环境不可靠终端设备系统资源有限等关键问题。

MQTT(消息队列遥测传输,Message Queuing Telemetry Transport)协议最早是由 Andy Stanford ClarkArlen Nipper 于 1999 年创建,起初主要是解决卫星与原油管道监测数据的传输问题,拥有最低的电池损耗与最小的带宽占用。后来在 OASIS 标准化组织的推动下于 2014 年 10 月公布了 V3.1.1 版本规范,并于 2019 年 3 月发布了最新的 V5.0 版本规范,目前 MQTT 已经成为物联网通信系统当中较为常用的一种传输协议。

阅读更多

编码实践当中涉及的密码学知识

OpenSSL 是用于安全传输层TLS,Transport Layer Security)协议和安全套接字层SSL,Secure Sockets Layer)协议的的工具包,提供了 SSL 协议实现(SSLv2SSLv3TLSv1)、大量算法实现(对称/非对称/摘要)、大数运算、非对称算法密钥、ASN.1 编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL 编解码、OCSP 协议、数字证书验证、PKCS7 标准实现和 PKCS12 个人数字证书格式实现等功能。

然而一直以来 OpenSSL 代码质量,总是受到开发人员的各种诟病,因而出现了 WolfSSL 与 PolorSSL 等 OpenSSL 的开源替代产品,其中 PolarSSL 被 ARM 公司收购之后,现更名为 Mbed TLS,主要由 Trusted Firmware 组织进行维护,遵循相关的 ARM 规范,并为 Armv8-AArmv9-AArmv8-M 内核架构提供了安全可信的参考实现。本文主要主要讨论了 Base64Hash 编码、以及 OpenSSL 所涉及的相关加解密知识。

阅读更多

电路分析经典理论与习题手记

电阻电路是指除电源之外,仅包含有电阻元件的电路,而动态电路则是含有电容电感等储能动态元件的电路,由于动态元件的特性方程当中含有微分积分形式,因而动态电路主要采用微分方程进行描述,其中方程的阶数通常取决于动态元件个数。电路分析当中的动态又称为暂态,指电路从一个稳态变化至另一个稳态的中间过渡过程。而稳态也被称为静态,指电路当中的电压、电流等参数达到一个稳定状态,如果其它参数不发生变化,就会一直以该状态运行。

本文主要讨论了电阻电路分析相关的基本概念与两类约束电路的等效变换电阻电路的分析方法常用电路定理方面的内容,以及动态电路分析相关的动态电路的暂态分析正弦交流电路稳态分析含二端口元件电路分析方面内容,阅读前应当具备微分积分微分方程复数运算线性代数方程组矩阵傅里叶级数高等数学知识。本文在撰写过程当中,参考阅读了国外大学普遍采用的《Electric Circuits》第 10 版教材。

阅读更多

PCB 基本布线规范与设计原则

优秀的 PCB 设计者同时也是出色的艺术家,但是伴随 5G 的全面商用以及物联网设备的普及,电路板走线越来越精密,信号频率日益提高,电磁干扰问题日趋严重,PCB 设计人员不得不去面对一个现实问题:PCB 电路板已经开始像一个具有电阻、电容、电感的组件,而非像过去 10 年前那样仅仅作为线路连接的平台。电磁兼容性信号完整性的问题日益突出,对于 PCB 布线与元器件布局的要求越来越高。

本文首先介绍了 PCB 制造工艺与元器件封装相关的知识,然后重点讨论了笔者工作过程当中总结的一些 PCB Layout 方面的基本布线规范与设计原则。当然,信号完整性作为一个比较系统的工程化问题,这些经验与原则并非绝对适用于任意场合,实际布线时仍然需要具体问题具体分析,结合实际的工况进行设计。而对于信号完整性方面的各类繁杂问题,将会专门新开一篇文章另行讨论。

阅读更多

现代数字逻辑电子技术概论

二十一世纪,数字化浪潮席卷了电子工业领域,与传统的模拟电子系统相比,数字系统具备更加优异的精确与可靠性,逐步取代了许多模拟电路的应用场景。数字逻辑电路是对数字信号进行算术与逻辑运算的电路,以逻辑门作为基本电路单元(最早采用 TTL 工艺,伴随半导体工艺技术的不断进步,目前已经逐步被 CMOS 工艺取代),数字电路可以分为组合逻辑电路(基本逻辑门)和时序逻辑电路(逻辑门 + 反馈逻辑回路)两大类。

本篇文章讲解了数字逻辑电路的分析与设计所涉及到的基础理论,首先讲解了数制码制逻辑代数等基础知识,接着重点描述组合逻辑电路时序逻辑电路的分析与设计方法,然后讨论了各种数字集成电路( 含门电路、可编程逻辑元件、半导体存储器)的原理以及使用方法,并且介绍了硬件描述语言可编程逻辑器件的相关知识,最后一部分讲解AD/DA转换以及脉冲波形的产生和转换电路。

阅读更多

模拟电子技术原理与综合运用

电子技术发展至今,基础理论方面的突破甚少,进步主要体现在工艺、材料与制程方面。特别是大规模集成电路的广泛应用,过去需要采用大量分立式元器件才能完成的工作,都已经被标准化的模拟、数字集成电路所替代。电子工程师的日常工作内容,逐步从过去各类基础电路的搭建,切换至电子自动化设计 EDA(Electronic Design Automation)、信号完整性 SI(Signal Integrity)、电磁兼容性 EMC(Electro Magnetic Compatibility)等方面。

模拟电子技术作为现代电子工业的理论基石,主要围绕双极性结型晶体管 BJT场效应晶体管 FET 构成的模拟信号放大电路展开,着重分析了其频率响应以及负反馈等特性。伴随近年碳化硅、氮化镓等第三代半导体材料在新能源汽车等领域的广泛应用,模拟电子元件在体积、效率、可靠性方面都取得了显著的提高,本文在写作过程当中参考了《Electronic Devices and Circuit Theory》第 11 版一书。

阅读更多

通用 LaTeX 数学公式语法手册

MathJax 是一款运行于 Web 浏览器当中的开源 JavaScript 数学符号渲染引擎,通过它可以方便的在现代 Web 浏览器当中显示数学公式,目前已经能够解析 LaTexMathML 等标记语言。MathJax 项目发源于 2009 年,目前由 NumFOCUS 基金会主持,并且得到了 MathJax 联盟的支持,该联盟是美国数学协会(AMS)和 工业与应用数学协会(SIAM)的共同合资企业。

LaTeX 是一种高质量的排版格式,可以生成复杂的表格与数学公式,是当前电子与数学出版行业的事实标准。本文以 Pandoc 作为 LaTex 渲染引擎(一款用于标记语言文档转换的命令行工具),分门别类的总结了撰写数学公式所需要经常使用到的 LaTeX 语法,方便写作相关科技类文章时随手查阅。

阅读更多

2022 互联网裁员潮之后,国内 IT 行业何去何从?

笔者作为常年工作在一线的 IT 技术研发人员,早在 2018 年就已经不玩儿互联网行业了。主要是感觉 Web 技术栈已然走向全家桶化(例如后端 Spring 全家桶、前端 Vue 全家桶),而开发方式也日趋套路化与工程化,上手难度与技术门槛以肉眼可见的速度不断下探,进而伴随着大量从业人员的持续涌入,整个行业全面开启了 996 内卷模式

除此之外,叠加近几日中概股跌穿了板凳,以及反垄断监管的不断强化,互联网行业合规经营的大幕徐徐拉开。未来全行业的整体薪酬水平,必然回归至类似财务会计这类市场化职位应有的水平。高薪光环终究是到了褪去的时刻,重新回到利润与收支挂钩的市场化薪酬体系,将会是整个行业未来的大势所趋。

阅读更多

Bash Shell 脚本编程实践

Shell 既是一套命令行工具(交互式地解释和执行用户输入的命令)也是一种脚本设计语言(定义有变量与参数,并提供了控制、循环、分支结构)。Bash Shell 是由 GUN 官方项目提供的 Shell 解释器,名称源自于 Bourne Again SHell 的英文缩写,整合了传统 Korn Shell 以及 C Shell 的有效特性,并且尽量遵循IEEE POSIX P1003.2/ISO 9945.2规范,同时在编程与交互使用方面提供了大量的功能改进,因而在提供丰富功能的基础之上,展现出了良好的兼容特性,大多数.sh脚本可以无需移植修改即可交由 Bash Shell 来执行。

当用户登入任意一款 Linux 操作系统时,初始化程序init都将会为用户启动一个Bash Shell命令解析器,其即可以用于解析命令行输入并与内核进行交互,也可以作为高效的脚本编程语言,运用其提供的变量、参数、循环、分支等编程语法特性,完成一些批量的自动化的任务处理工作,本文将会围绕 Bash Shell 的脚本编程特性,加以进行详细的分析、说明与示例。

阅读更多

Qt 5 桌面应用程序开发指南 - QtWidgets 篇

Qt 5.14.2 是跨平台应用开发框架 Qt 的最新版本,除了采用基于 C++11 的经典 Qt Widgets 进行桌面应用程序开发以外,还支持通过 Qt Quick 快速开发适用于移动端设备的用户界面,因为 Qt 5 底层图形渲染引擎基于 GPU 硬件加速,所以其能够保持与原生 C++ 近乎等同的运行效率。笔者计划通过两篇文章分别对这 2 种技术进行介绍,但是无论如何,在传统跨平台桌面应用开发领域,Qt Widgets 依然是 Qt5 最为基础与核心的内容。

虽然 Qt 6 发布在即,但是官方声明将会依然保持 API 的兼容与稳定性,因此本文依然基于当前最新的 Qt5 稳定版本撰写。全文将会分别对 Qt Widgets 当中使用较为频繁的窗口部件布局管理应用主窗口事件系统对象模型风格与样式国际化等部分内容进行深入介绍,同时展示完善的示例代码以及程序运行效果,并结合《QtQuick 篇》一文讲解混合编程相关的技术。

阅读更多

Qt 5 桌面应用程序开发指南 - QtQuick 篇

由于 Material Style 这样富含动画效果的用户界面风格,并不能简单的加入到以静态图形作为主要显示单元的QWidget当中。所以 Qt 官方推出了一种声明式编程语言 QML(Qt 元对象语言,Qt Meta-Object Language),其提供了一种具有更高可读性的声明式语法,并附带了必要的 JavaScript 语句和动态属性绑定支持。QML 的语言特性和引擎框架由 Qt QML 模块提供,该模块同时提供了 QMLC++ 两套接口。

Qt Quick 是一款基于 QML 的应用程序标准库,包含有可视化类型、交互类型、动画、模型和视图、粒子特效等特性,这些都是由 Qt5 上的Qt Quick模块提供,通过import语句即可方便的进行导入。Qt Quick 同样提供了 QMLC++ 两套接口,可以轻松构建具有流畅动画效果的动态 QML 用户界面。而 Qt 5.7 版本以后推出的 Qt Quick Controls 更是提供了丰富的开箱即用控件,让快速开发成为了可能。

阅读更多

玩转 Raspberry Pi 4B 开源硬件

万众期待的 Raspberry Pi 4B 终于发布,之前由于产品原型的需要,一直计划采购 3B+,后来供应商透露新版 4B 稍晚就会面市,所以稍微等待了一段时间,今天终于拿到了一块 2G 内存的板子。一直以为 4B 只会简单的更新一下 SoC 并增大 DDR 容量,但是实际上还带来了 Type-CBluetooth 5.0Micro HDMIUSB 3.0 乃至 DDR4 等诸多崭新升级。而官方推荐的应用范围,开始从教育渗透至工业领域,逐步发展为一套完整的嵌入式生态链。

本文基于树莓派基金会官方提供的 《Raspberry Pi Documentation》,笔者翻译了其中较为常用的配置章节,便于读者拿到板子以后能够快速上手,并避免使用一些官方不推荐的操作和工具库。此外,本文也会涉及 OpenCVdlib 的编译,以及 Electron 在树莓派上的部署等话题。文章内容将会伴随笔者的日常使用而长期进行更新,欢迎各位爱好者朋友持续关注与勘误。

阅读更多

Android 物联网应用开发实例

Android 可以采用 Kotlin、Java、C++ 语言编写应用程序,Android SDK 会将这些代码连同相应的数据和资源文件编译为 Android 软件包,即一个带有.apk后缀的归档文件,也就是 Android 应用程序的安装文件。本质上 Android 系统是一种多用户的 Linux 系统,每个应用程序都运行在独立的 Linux 用户 ID进程之下,从而为每个 Android 应用都提供了独立的安全沙盒,体现了最小权限的设计原则。

鉴于 Google 官方提供了完善的文档,本文并不过多过深的涉及 Android SDK 开发的具体知识细节,仅会在简单介绍 Android 开发当中的一些基本概念之后,着重分析经典/低功耗蓝牙NFCWIFI指纹识别5G 等硬件外设的通信协议概念以及相应的实现步骤,并且展示一些比较典型的应用场景与示例代码,从而为读者在进行物联网相关项目的开发时,在移动设备应用控制端提供即有的现成经验。

阅读更多

STLink V2 调试编程器应用图解

STLink 是由意法半导体公司推出的在线调试编程器,采用5VUSB2.0全速接口进行供电与数据传输,可以方便的对内部固件进行升级,同时支持以 JTAGSWD 模式连接至 STM32 系列微控制器,或者以 SWIM 模式连接至 STM8 系列微控制器,操作温度介于0 ~ 50℃之间。由于 ST 公司极为重视中国市场,因此 STLink 的销售价格相对其它国外大厂的在线仿真设备要实惠许多,基本成为国内嵌入式工程师人手上必备的工具。

本文详细介绍 Keil uVision 5 开发环境下 ST-LINK/V2 版本的调试编程器使用方法,并介绍了相关接口的详细定义与接线方法,文中部分内容翻译至意法半导体官方提供的《用于 STM8 与 STM32 的 ST-LINK/V2 在线调试编程器用户手册》,以确保使用方法与解释的规范性。

阅读更多

从 GNU Make 到 CMake 快速入门

GNU Make用于控制如何从程序的源代码文件编译并链接为可执行文件,通过make命令从名称为makefile的文件中获取构建信息,该文件定义了一系列规则来指定源文件的编译先后顺序、是否需要重新编译、甚至于进行更为复杂的操作。通过makefile文件可以方便的实现工程的自动化编译,只需要执行make命令即可完成编译动作,从而极大的提高了开发人员的工作效率。

CMake 3.17是一款源代码构建管理工具,最初作为各种 Makefile 方言的生成器,后来逐步发展为现代化的构建系统,广泛用于 C 和 C++ 工程源代码的构建。官方提供的《CMake Tutorial》 为开发人员提供了一个循序渐进的指南,涵盖了 CMake 构建过程中常见问题的解决方案。如果需要构建从第三方发布的源代码包,则可以参考《User Interaction Guide》。而《Using Dependencies Guide》则主要针对需要使用第三方库的开发人员。

阅读更多

模拟与数字电子技术入门读物

自本世纪六十年代开始,数字半导体技术席卷了全球电子工业,伴随工艺与制程的持续演进,高频高速电子信号的处理需求愈加旺盛,电子技术的发展重心逐步由模拟时代,过渡至全面的数字化阶段。虽然模拟电路以及分立式电子元器件的使用频率逐年下降,但是在电磁兼容性处理、开关电源设计等场景当中,传统的模拟电子技术以及相关分立式元器件依然扮演着不可或缺的角色。

本文定位为一篇导论性质的文章,用于帮助当前开发团队里的嵌入式软件工程师,快速了解模拟数字电子技术相关的术语与概念,因此行文中并不涉及各类电路原理的深入数学分析,仅仅言简意赅的汇总了日常工作相关的模拟、数字电路知识。文章中的部分公式与原理图摘取自Wikipedia 维基百科,写作过程当中参考了《Understanding Basic Electronics》第 2 版一书。

阅读更多