FPGA 原理和结构 「天野英晴」 读书笔记

复习下基础知识

基础知识

逻辑电路基础

  • 布尔代数
  • 逻辑表达式
    • 乘积的和
    • 和的乘积
  • 真值表 -> LUT
  • 组合逻辑电路
    • 当前的输出取决于当前输入,不包含记忆元件
    • 异或 Exclusive-OR (第一次直到单词这么写,惭愧啊)
      • 简写XOR,EOR,EXOR(后面这俩还真是第一次见)
  • 时序逻辑电路
    • 含有记忆元件的逻辑电路
    • 同步时序逻辑电路
      • 状态变化由时钟信号控制
      • 有限状态机模型
        • Mealy 输出=输入+状态 (输入直接影响输出)
          • 通常状态少,电路规模小
          • 输入立刻反映到输出,导致逻辑元件不等长布线,容易冒险
        • Moore 输出=状态 (输入影响状态)
          • 状态数量多,电路规模大
          • 不易冒险
        • todo:书上的图挺好,后续贴过来
    • 异步时序逻辑电路(FPGA一般不使用)
      • 这本书没讲,后面有机会补上

同步电路设计

  • 触发器(Flip Flop,FF)
    • FPGA 一般采用DFF
    • CMOS工艺电路
      • todo:抄图
    • 建立时间(setup time),保持时间(hold time)
    • 亚稳态(metastable)
    • 时序分析
      • 评估是否满足时序约束(需求)
      • 动态时序分析
        • 过于耗时,很少采用
        • todo:需要了解下
      • 静态时序分析(static time analysis, STA)
        • 只需要电路网表,遍历一次电路拓补,分析速度快
      • 资源充足时,编译容易,时间短
  • 单向时钟同步电路
    • 时钟偏移(skew):时钟信号到达时间错位
    • 时钟抖动(jitter)
    • FPGA通过驱动能力强的专用总线(global buffer)将多层时钟树的时钟低偏移连接在所有FF上。

FPGA 定位和历史

  • 逻辑器件分类
    • 标准器件
      • 标准逻辑
        • 怀疑书中指与或非门等标准器件
      • 固定用途定制芯片(Application Specific Standard Parts,ASSP)
      • 可编程逻辑器件(Programmable Logic Device,PLD)
        • FPGA是一种设计自由度高的PLD。
        • 半导体厂商可以量产,用户无需开模即可定制电路
    • 定制芯片
      • 全定制芯片
        • 优势:性能(速度),集成度(门数),设计自由度
        • 劣势:NRE,TAT高(费用和时间)
      • 半定制芯片(缩短NRE和TAT)
        • 门阵列(gate array)
        • 嵌入式阵列(embedded array)
        • 标准单元ASIC
        • 结构化ASIC
  • FPGA历史
    • 1970s
      • FPLA – NXP
        • AND-OR阵列
      • PAL – Lattice
        • 改进版FPLA
        • 耗电量大无法普及
    • 1980s
      • GAL – Lattice
        • 固定OR阵列结构
        • CMOS EEPROM进行编程
      • FPGA – Xilinx
        • LUT+FF
        • CMOS SRAM
        • 可重配置
      • CPLD – Altera,AMD,Lattice
      • 反熔丝FPGA – Actel,QLuickogic(这俩公司没听过…)
    • 1990s
      • 日本厂商尝试加入,没有成功
      • FPGA(SRAM)- Altera,AT&T,AMD,Atmel
      • FPGA(FLASH)-GateField
      • FPGA(BCiMOS)-DynaChip
    • 2000s
      • FPGA,SoPD – Altera,Xilinx
    • 2010s
      • 高端 FPGA – AMD(Xilinx),Intel(Altera)
        • 动态可重配置
        • 车载FPGA
        • 光FPGA
        • SoPD (Zynq,DE1SOC等带有处理器的FPGA)
      • 中低端:Lattice,GOWIN

FPGA 概要

todo:9/4

FPGA结构

todo:9/4

设计流程和工具

todo:9/5

设计原理

todo:9/6

硬件算法

todo:9/7

PLD、FPGA应用案例

todo:9/8

新器件,新架构

todo:9/9

WIFI+USBIP+MCU=无线USB设备

请注意,本文提供方法基于zephyr OS制作,由于目前zephyr项目的USB子系统处于大规模重构状态,所以本方案不受zephyr正式支持。详细请参考:

https://github.com/zephyrproject-rtos/zephyr/pull/46862

背景

目前,我们有许多MCU项目利用USB协议与PC进行通信,绝大多数使用USB从机协议,随着Wifi协议的广泛使用以及速度的提升,我认为绝大多数的USB设备都可以经由网络协议而渐渐变得无线化。

但是,如果完全将协议栈转换为网络,会导致一系列兼容软件或驱动需要再次适配,较大的开发量和不明显的收益使得各大厂商在这方面进展缓慢。

本文介绍一种基于USBIP的USB设备无线化方法,希望能够推进设备线束的无线化进程。

USB with WIFI

灵感来源(废话部分,技术无关,可以跳过😄)

前段时间有幸从artery公司木一川先生处得到一片at32 demo板,正巧促使我简单的学习了一下openocd和cmsisdap。发现cmsis-dap协议很容易就可以在zephyr中引用,以获得大量开发板支持。

但是如果只是制作一个普通的dap仿真器,比较缺少挑战性,因此我决定尝试制作无线的仿真器。

最初的目标是通过TCP转发cmsis-dap协议,修改openocd以支援网络设备,但是后面我意识到这会导致windows的KEIL和IAR等IDE环境难以运用。

因此,我将目标转向USB设备的网络访问,因此了解了USBIP协议,并且偶然发现zephyr OS中对USBIP是有部分实现的,我只需要简单的将他扩展到其他设备即可,因此便有了本文。

方案介绍

再次提示,本方案虽然基于zephyr OS制作,但是由于zephyr OS的USB subsystem处于大规模重构状态,所以不受zephyr主线支持!

实现代码请参考:https://github.com/zephyrproject-rtos/zephyr/pull/46862

实际在下面设备中运行通过:

传统USB程序结构

这里指的传统zephyr USB 设备程序(因为zephyr系统目前没有host设备,这也是大规模重构的原因)。

如果您的程序目前采用其他方式架构(可能大部分程序都是吧),您首先需要将其移植到zephyr OS。(目前USB subsystem处于不稳定状态,商业用户需要谨慎考虑)

zephyr OS USB DEVICE

USBIP 网络USB设备

本方案工作在UDD层,通过注册zephyr USB device驱动,并将其转换为USBIP协议。因此没有虽然没有USB硬件,但是在操作系统看来和有USB驱动是一样的。

示意图

注意:

  • 这不是标准USBIP Server的实现,但是我认为对于绝大多数的USB设备已经足够实现功能

使用

MCU程序

建议创建如下application

  • 启动后的wifi配置:帐号,密码,功耗等(有线网络可忽略)
  • 静态IP或DHCP服务

简单使用教程

  • 使用usbip客户端,确认基本通信
usbip list -r FEILONG-CMSIS-DAP
  • 挂载usbip设备
sudo usbip attach -r FEILONG-CMSIS-DAP -b 1-1
  • 调试可以使用wireshark,内置有USBIP协议。

windows

请参考

https://github.com/cezanne/usbip-win

有些功能可能需要使用zadig安装驱动:

https://zadig.akeo.ie/

linux

linux用户应该不需要多说,参考archlinux wiki即可使用。

https://wiki.archlinux.org/title/USB/IP

注意:

在linux上使用时,如果在使用过程中,没有detach直接复位、断电等,会造成linux内核出现异常,重启后即可解决。(windows没有发现此类问题)

参考链接

CMOS芯片结构与制造技术

CMOS学习中…

LSI、VLSI制造基本技术

  • 基础工艺技术
  • 晶圆吸杂去除被金属刀片切割的单晶硅片上沾染的金属
    • 外部吸杂离子注入
    • 内部吸杂氢气中退火处理
  • 氧化氧气中加热形成二氧化硅薄膜
    • 依据氧化气氛分类
    常用干氧、湿氧、干痒相结合的方式混合含氯气体(氯气、氯酸等)捕获Na离子,改善SiO2表面稳定性。
    • 干氧氧化
      • 可以使用氮气和氩气稀释氧气,减慢氧化速度 形成超薄氧化膜
    • 水汽氧化
    • 湿气氧化
    • 依据集成电路制造工艺区分
    • 初始氧化
    • 基地氧化
    • 预氧化
    • 场区氧化
    • 栅氧化
    • 多晶氧化
    • 源漏氧化
  • 光刻通过光照将光掩模版的电路打印在光刻胶上
    • 工序
    • 硅片处理
    • 涂黏附剂
    • 涂胶
    • 前烘
    • 曝光
    • 显影
    • 后烘
    • 光源
    • 0.8um 高压水银灯 436nm
    • 0.35um i线 365nm
    • 0.13um UV光KrF 248nm
    • 0.10um ArF 193nm
    • 更窄 F2 157nm
  • 腐蚀或刻蚀
    • 湿法腐蚀腐蚀剂浸泡光刻后硅片
    • 精度不高
    • 干法刻蚀
    • 等离子刻蚀依靠气体辉光放电刻蚀
    • 反应离子刻蚀纵向刻蚀,精度较高
  • 去胶
  • 离子注入对Si衬底掺杂,改变电特性
    • 高能离子注入
    • 低能离子注入0.13um以下
  • 扩散退火氮气约1000度加热
  • 薄膜沉淀CVD工艺

假装做一个电子单词卡

背景

最近总能在淘宝刷到各个厂家的电子单词卡(如下图所示),作为一名电子工程师,感觉这个小玩意作为平时的产品设计练习会是个不错的话题。

从购买上来说,个人不是很推荐,理由如下:

  • 如果是购买给孩子使用,屏幕太小了,像素密度低,从商品照片里面看字体都很模糊。虽然是墨水屏,但是孩子们可能要贴近看屏幕,我认为不利于孩子们的视力。
  • 低成本墨水屏,没有背光,和在过亮或过暗的地方看书一样,不合适的光线依旧会导致视疲劳。

题外话 – 我目前在用的单词背诵组合

正式开始前,分享下我在使用的背单词组合:

  • Anki(Desktop+AnkiDroid)
  • 墨水屏安卓手机(海信A5Pro CC, 彩色墨水屏技术离实用化还有太远的距离,建议现阶段还是使用黑白屏)
  • 懒人支架,放在床头上夹住手机,保持平躺保护脊椎😄
  • 迷你手柄(如下图,按键还挺舒服)
    • 个人使用ABXY四个按键,竖过来可以握在手里

方案

淘宝的那种我也没有买实物,下面方案没有实际做出来,只从理论上判断可行性,现阶段没有实际制作的计划。

全体结构

Android APP

  • 每次同步时,同步当天单词表及字模(Flash寿命?)
  • 蓝牙升级
    • 固件来自服务器
  • 设置锁屏壁纸(个性化+蓝牙丢失后显示的联系方式设置)

固件

  • 功能一览
    • 蓝牙升级
      • WCH貌似有现成的解决方案(没用过😄)
    • 字库
      • 应该和OLED的字模用法是一致的
      • 需要区分语言,以便减小体积
    • E-INK驱动
    • 电源管理
      • 电量显示
      • 电量矫正
      • 充电指示
      • 低功耗设置
      • 按键唤醒
    • 壁纸(低功耗+蓝牙出发)
    • 单词同步
      • 压缩?
      • 增量?
      • 小数据库能跑动不?

硬件设计

我一般认为商品的价格,成本约60%,也就是说淘宝成品成本价格在70元上下。

猜测屏幕约40元,芯片+PCB+电池+外壳+按键30元

  • EINK屏幕
    • 最开始那个图的2.6寸屏幕其实不大,296×152像素的屏幕,在计算字模大小时候发现字真的很小。虽然是墨水屏,但是很担心小孩子们长时间使用这样的设备是否会对视力产生影响。个人还是更推荐黑白的墨水屏安卓手机或电子阅读器,一般几百元就可以搞定,并没有贵多少。
    • 题外话:我选择手机的一个理由一方面是当时没有这种设备,另一方面确实是因为字体比较大。
  • 锂电池容量和尺寸很难凭空想出来,不过可以参考目前在卖的方案尝试下
    • 充电电路网上遍地都是😄
  • USB串口
    • 烧录程序用
    • CH340N最小,应该够用
  • MCU – CH571F因为没有计划实际做,所以Flash容量不太好判断但是这个系列从datasheet上来看,很适合做这个。嘉立创商城价格约等于一瓶饮料
  • 接口
    • USB-C
  • 存储
    • 不太确定是否需要外挂存储芯片
  • 电阻电容MOS等
  • 按键
    • 开模的话可能要大批量才行
    • 遥感的十字按键看起来不错

windows 下webdav连接方法

1. 启用http网络连接

如果是https的连接,可以直接跳到第二步。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters]
"BasicAuthLevel"=dword:00000002

把上面文件保存为 xxx.reg,导入注册表,或

手动修改 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters

BasicAuthLevel 值改成 2(支持 http & https)

https://blog.csdn.net/kh766200466/article/details/91951568

2. 添加网络位置

在「我的电脑」画面中右键「添加一个网络位置」,「下一步」,「选择自定义网络位置」,网络地址输入为 WebDAV 的地址,比如坚果云就是 https://dav.jianguoyun.com/dav/,再点「下一步」,给该位置输入名称。

完成后可以在「我的电脑」画面看到新建的这个 WebDAV 地址的快捷方式了。第一次进入的时候需要输入用户名和密码。

https://www.jianshu.com/p/7ba5f0756efc

或者RaiDrive一步到位

直接图形化:

参考:https://sspai.com/post/47830

我的图书管理系统

最近发现家里的书越来越多,电子书也在kindle,boox,电脑和NAS里面堆得四处都是,因此下定决心对图书进行整理。

实体图书

  • 微信小程序:优优书柜

介绍可参考: https://www.appinn.com/youyoushugui-wechat-miniapp/

计划使用这个软件把图书和小伙伴分享,但是暂时还没有实施。

小说、漫画等快餐类图书

  • calibre管理

calibre是一个自由开源电子书软件套装,可以用来组织、存放、以及管理电子书,支持大多数的电子书格式。同时也支持与许多流行的电子书阅读器进行同步,并可能在DRM的限制下转换电子书的格式。

https://zh.wikipedia.org/zh-cn/Calibre

为了便于与E-INK设备共同使用,依旧使用calibre进行管理。

看和下载漫画用软件,19年左右参与过一段时间开发,不过后来没有坚持下去。

新的节目比当年的界面要好看一些。

阅读3.0, 阅读是一款可以自定义来源阅读网络内容的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。

https://github.com/gedoor/legado

一般用这个看看爽文小说啥的,不过实际使用的时候,我比较喜欢导出epub之后给calibre导入到kindle或者使用静读天下来打开阅读。

PDF图书

  • 旧:Nas+Samba+Syncthing

这套环境我使用了大概两年左右,但是随着书籍的增多,简单的多设备同步会造成EINK平板的容量浪费。同时,因为Nas可能存在单点故障,因此数据还是存在一定风险。

  • 新:zotero

偶然的机会发现了zetero这个专门管理文献的软件,使用后感觉很满意,特别是强化了文献的搜索功能。以前有很多次想从某本书里面借几句话出来,但是只记得几个模糊的词,因此搜索了很久才找到,或者无功而返。

简单列举下我认为比较好用的功能:

  • 文献的关系管理:可以设置文件关系,比如在某个芯片的手册可以关联它的封装和设计样例;外语课程可以关联听力或者其他补充资料
  • 文献模糊搜索:上面说过了 🙂
  • PDF标注:不知道为什么,很少能够看到同时支持windows、linux的带有笔记和标注功能的PDF阅读器。不同平台使用不同软件,脑子有时候还是反映不太过来。
  • 网页存储:配合插件可以存储原始网页,避免浏览器书签里面的网站丢失导致资料缺失(目前我主力使用trilium,把网页作为笔记管理这部分内容,在评估是否应该迁移)

多设备同步或备份可以选择官方或支持webdav的网盘。

  • 同步策略(以下方案均测试可用,请根据使用场景选择)
    • zotero官方(免费版本300m)
    • 坚果云(免费版每月1G上传流量,速度很快)
    • koofr(免费版共2G空间,可以连接onedrive、google drive等网盘,连接的网盘每天限制1T的流量传输,速度适中,连接onedrive较慢)
    • TeraCloud(免费版共15G,速度适中)

我的方案(onedrive+rclone+Termux+Android Phone+koofr)

虽然上面列举了很多种方案,但是我的图书容量已经远远超越15G,使用公有云同步的方案成本实在有些大,因此,我特别定制了一套符合我自己使用方式的方案。

我的使用环境满足下面条件:

  • 图书体积大:
    • 有一些生物学相关的书籍里面图像较多,每本300m上下
    • 有些图书只有图像版本,体积大
    • 芯片手册虽然体积很小,但是品类繁多
    • 外语能力差,部分书籍保留了英中日三种语言
    • 有些图书会赠送光盘或音视频资料
  • 网盘速度不敏感:
    • 书是用来看得,不是用来屯的
    • 虽然有时候会批量增加一些书籍,但是跨公网的同步时间没有什么强烈的要求
  • 同步用数据无隐私内容,泄露无危害
    • 都是能买到和网上公开的内容
    • 一些图书笔记
    • 基于RCLONE,可以实现全数据加密,隐私问题完美解决
  • 同步数据丢失后,本地依旧有多个副本存储在下面设备中
    • NAS(完整图书库)(现有方案暂未实现,计划syncthing同步台式机和NAS)
    • 家中台式机(完整图书库)
    • 笔记本电脑(完整图书库)
    • EINK平板(部分在读图书)
  • 可以接受使用手机作为中继
    • 手机随身携带
    • 使用电脑时,一般我在电脑边上 o.o
  • 为什么不直接在电脑上运行rclone
    • 买的onedrive不稳定,可能要经常维护
    • 终端较多,每次维护重复作业多,手机只要维护一个设备,其他设备可以一同使用
  • koofr在干什么
    • 平时,没有大文件变动时候,使用koofr管理即可,减少手机操作。

环境一览

  • Onedrive 5T+office365 淘宝40元(需要购买支持API的onedrive)

不推荐店铺,因为这种店随时跑路,帐号也随时会没,空间虽大但是很不稳定,而且管理权限不在手中,存储文件可能会被他人看到。

我选择这个网盘作为同步方案的原因是我有Nas,Onedrive的价值是同步和灾难备份,而不是作为所有文件的保存地。同时zotero这个软件对于文件的传输都是乱码格式的压缩文件,虽然没有密码,但是即便泄露,也不过是网上各种能够找到的网页和电子书再加上少许笔记而已,没有任何隐私资料。 配合rclone全数据库加密。

同时还有office 365可用,比拼家庭车划算。

可以参考koofr手册:https://koofr.eu/help/connect-other-cloud-services/how-can-i-connect-onedrive-to-koofr/

onedrive网盘的一大缺点是不支持webdav,或者说是只支持一种很特殊的webdav方案,zotera不支持。

rclone是本方案的核心,可以将onedrive网盘转换为webdav服务。

但是,这是一个GO语言编写的程序,不能直接在Android手机运行,但是借助Termux就可以了。

这是一个Android系统中的linux环境,在Android中使用Linux程序时经常会用到。

使用方法

Onedrive

一般老板会给注册好或者给出网页自助注册,不明的话可以询问店家。

Termux

Android程序, 安装即可。

第一次打开会执行一个自动安装,没有什么需要操作的。

rclone
pkg update
pkg install rclone

使用上面命令,直接安装即可。

配置

首先,rclone登录onedrive:参考https://rclone.org/onedrive/ 即可。

参考这个页面添加加密层

启动webdav服务器(remote:/是上一步的服务器名字):

rclone serve webdav --addr 0.0.0.0:端口 --user 用户名 --pass 密码 remote:/

参考资料

本方案制定过程中参考了以下资料

移植zephyr到GD32E103_EVAL板子

背景

终于考完日语了,虽然够呛能过 o.o 105分飘过了o.o

不过也算是有点空闲时间能随便玩玩了.迫于近年来半导体价格飞涨, 国产MCU的应用也越来越广(大部分是替代STM32的样子)

整个移植过程可以看出GD32和STM32高度相似.

具体代码参考: https://github.com/zephyrproject-rtos/zephyr/pull/36833 PR的使用方法请参考后面

本次移植大概花费三四天,本文不会记录详细的移植过程(因为代码在上一行)只会记载几个移植中的小问题.

主要参考资料:https://docs.zephyrproject.org/latest/guides/porting/index.html

基础知识

为了能够移植zephyr系统,下面知识是我认为必须要先了解的,可能会有些不全,仅供参考,如有不足欢迎补充

  • 最低限度的计算机组成原理以及单片机构成常识(一般来说MCU由内核(arm,risk-v等,执行指令,提供中断系统)存储(flash, ram等)外设(gpio,uart,can,ethernet等),一般芯片是要放在电路板上才能工作,综上zephyr的硬件驱动划分为arch, soc, board)
  • cmake(虽然使用west命令进行编译,但是实际的构建环境是cmake,因此在移植前,我建议了解最低限度的cmake知识)
  • kconfig(官方仓库https://github.com/ulfalizer/Kconfiglib,用于配置内核宏, 会影响构建过程以及C程序)
  • dts(devicetree 设备树)(zephyr系统通过设备树对arch,soc,board进行抽象,类似linux设备树,但是系统调用方式不同,zephyr通过将dts编译为宏,在程序和构建过程中调用)
  • linux(虽然据说windows也可以使用,但是我建议如无特殊原因,请尽量养成在linux或mac中开发程序,避免各种麻烦)
  • openocd(MCU调试工具) 这个东西的使用的话相对简单,但是编写tcl脚本需要对jtag/swd的底层原理比较熟悉.一般的MCU openocd中都包含了支持文件, 但是不巧的是GD32E103_eval的这款板子和芯片均不在支持范围内.
  • yaml(一种配置文件格式,类似json/xml)简单了解即可
  • git(zephyr版本通过git管理)
  • C Marco (C语言宏)
    • 虽然因为zephyr项目使用C语言编写,为了移植掌握C语言是必要的无需多做说明,但是在处理设备树的过程中,会用到极其复杂的宏调用,数十层的宏包装人脑展开已经极为困难,有些时候只能根据编译器预编译结果来检查问题. 所以如果您是C语言新手或关于预编译器工作原理不是很清楚的话,强烈建议您补全此处知识,包括但不限于宏拼接(##运算),可变参数列表宏(__VA_ARGS__)
  • vscode调试和编译的配置方法(可能经常使用keil,iar等IDE环境的朋友会比较陌生)

相关文件

zephyr的移植主要设计下面文件(module需要单独建立仓库,可以参考https://github.com/feilongfl/hal_gd32, 仓库内GD32E1的支持包来自gigadevice官网)

  • boards(板级外设)
  • socs(芯片外设)
  • drivers(驱动)
  • west.yml(module)

绝大多数都可以参考STM32F1x的芯片进行移植,其实从手册来看,驱动也可以共用, 但是为了避免STM32的驱动应用在其他厂家的芯片上所产生的法律和道德问题, 我主要使用GD32官方提供的代码.

主要问题

  • arm mpu可能在移植初期带来一些问题,所以在初期最好关闭
  • zephyr使用systick定时器运行,所以在开始配置时,我们可以不用从时钟系统开始.我认为从gpio led灯开始会比较容易.
  • 我的移植顺序(目前只做了这些,至此芯片基本功能已经完成,但是我适配的串口只能支持基本的收发,如果要应用console或其他subsys可能还要支持中断和DMA):
    • 已实现
      • led灯(GPIO的输出)
      • RCU时钟树
      • 按键(GPIO输入)
      • 串口(GPIO pinmux, uart外设)
    • 计划中
      • 串口(runtime config)
      • 串口(中断驱动)
      • 串口(DMA)
      • CAN
      • USB
  • openocd 这个是移植过程中比较头痛的,因为虽然会使用openocd调试一些芯片,但是编写tcl脚本适配芯片debug系统确实没怎么研究过.只了解一些边界扫描之类的理论知识.这个位置氛围两个部分,一个是debugger,另一部分是debugger和MCU间的通讯支持
    • debugger
      • GD32开发板接入pc,执行 lsusb,可以得到Bus 001 Device 006: ID 28e9:058f GDMicroelectronics CMSIS-DAP,因此debugger是CMSIS-DAP,这部分驱动openocd内提供.
    • debugger和MCU间的通讯支持
      • 因为GD32基本与STM32相似, 仔细调查发现是与STM32F1x系列相似(新系列例如G4等不兼容), 于是常识STM32F1的openocd配置,发现jtag和swd的ID芯片信息需要修改,修改后即可工作.
  • west.yaml 这个和android的repo命令所使用的manifest原理很相似,看来大家都觉得git submodule不好用
  • 感觉GD32的EVAL板质量一般
    • 目前手中的板子信号振铃极其严重,串口波特率115200就已经开始乱码了,有点怀疑是不良品
      • 也可能是usb串口不良,因为我没想到只有两个DB9的串口接口可以使用,用的淘宝8元包邮的那种,后续可能会更换usb串口测试下
      • 印象里CMSIS DAP是自带虚拟串口的,不清楚为啥GD的这个调试器没有接串口.像ST-link一样调试串口可能更友好一些.
    • 吐嘈下,好多年没用锉刀打磨PCB板子边角了o.o
    • 从手册来看,芯片支持CANFD协议,但是PHY芯片手册标识最高速率1M,不是CANfd应该使用的PHY芯片.
      • 后续不稳定可能要自己更换
      • 不过确实是第一次见国产CAN phy,以前只用过NXP的产品,不知道国产芯片是否能有超越数据手册的性能 o.o
      • 我猜GD是不想管理太多芯片,整个eval系列物料共用了
  • 移植过程中发现STM32的官方支持确实很到位, GD32就没有找到太多的支持.

写完之后再看感觉会移植的人也不需要看了,不会的可能看完还是看不会 o.o

PR用法

动图如下(顺便发现了termtosvgasciinema这几个好玩的工具):

https://asciinema.org/a/443449

boox max2 更换电池

平时看漫画和anki的主力工具,用了两三年,电池有点不行了.

翻遍了国内各种网站,竟然没有任何拆解相关的内容, 我掰了掰侧面,感觉不像卡扣的.问淘宝电池卖家也没有拆解方案,最终在youtube上找到了前人的拆解视频,才恍然大悟,正面竟然只是一层贴纸,螺丝密密麻麻排在贴纸下.

拆解视频

注意,贴纸很薄,但很结实,感觉像是某种塑料,能割伤手指!!拆机一定要小心.

电池更换

和视频说明区别不大,换上电池满血复活 🙂