分类 博客文章 下的文章

测音量不能只看分贝!声音大小的衡量与单位dB、dB(A)、dB(C)的概念

你有没有想过?为什么指甲刮过黑板那微弱的刺啦声,能让你瞬间全身起鸡皮疙瘩。而远处滚滚而来的雷声虽然震得窗户乱颤,你却能安然入睡?

如果说声音的能量值,肯定是撼动窗户的低沉雷声更强。但刮黑板的高频声音却更让我们人耳难以忍受。由此我们知道了,人耳对不同频率声音的感知能力是不一样的。

声压(Sound Pressure):

声压表示声音在空气中传播时引起的空气压强变化,这是一个客观的物理量,其单位是帕斯卡 (Pa)。

响度(Loudness):

响度是人耳对声音强弱的主观感觉,也就是你觉得它“有多响”。基于进化的选择,同样声压下,我们的耳朵对中高频(如人声、婴儿哭声)极为敏感,但对低频(如低音炮的震动、远处的空调外机声)较为钝感。为了衡量人耳的感受,人们引入了响度这一概念。

声压级 (SPL):

声压级它表示当前声压是基准声压(20uPa)的多少倍。用分贝(dB)表示,它实际不是一个物理单位,更不能称为声音大小的单位,而是一个比例关系。
之所以要把声压转换成声压级的表示方法,是因为耳朵能听到的最小到最大的声压,相差百万倍。人们为了少写点零,引入了对数运算。

声压级 $L_{p}$ 的计算公式如下:

$L_{p}=20\log _{10}\left(\frac{p_{rms}}{p_{ref}}\right)\text{\ dB}$

其中各个字母代表:

$p_{rms}$ (待测声压): 你实际测量到的空气压力波动值(单位:帕斯卡 Pa)。
$p_{ref}$ (基准声压): 人耳刚能听到的声音压力,是一个固定值:$2\times 10^{-5}$ Pa(即 20微帕)。
$\log _{10}$: 以10为底的对数运算,负责把巨大的倍数关系“压缩”成小的数值。 

计权(Weighting):

A 计权 (A-Weighting):模拟“普通耳朵”

dB (A) 是通过 A 计权网络 修正后的声压级,核心是模拟人耳对中高频敏感、对低频不敏感的听觉特性(贴近人类日常环境中对声音的主观感受)。
人耳在较低声压级(约 40 dB)下的听觉反应。在这一曲线中,低频部分的凹陷非常明显,意味着人耳对低频非常迟钝。

“虽然大家都叫它单位,但 dB(A)其实更像是一个带了‘人耳美颜滤镜’的数值评分。”

C计权一般用于测量:语音与话音、环境噪声、职业健康。

C 计权 (C-Weighting):模拟“大声状态”

dB (C) 是通过 C 计权网络 修正后的声压级,核心是模拟高声压环境下人类的听觉特性—— 此时人耳对低频的敏感度提升,听觉响应接近线性。
大音量(>85dB)下人耳对低频更敏感(听觉变平坦了),所以 C 计权的曲线也更平直。

C计权一般用于测量:重工业噪声、音响系统、峰值冲击。

A计权与C计权衰减情况对比:

频率 (Hz) A 计权衰减 (dB) C 计权衰减 (dB) 差距(A比C多减)
31.5 -39.4 -3.0 ~36 dB
63 -26.2 -0.8 ~25 dB
125 -16.1 -0.2 ~16 dB
250 -8.6 0 8.6 dB
500 -3.2 0 3.2 dB
1000 0 0 一致
2000 +1.2 -0.2 +1.4 dB
4000 +1.0 -0.8 +1.8 dB
8000 -1.1 -3.0 -1.9 dB

行业测试注意事项:

  • 标准优先原则:某些行业标准中有自己的计权方式选择要求。如自动电话技术标准中明确指出,要使用A计权测量。
  • 数值对比前提:不同加权的声压级不可直接对比,加权不同没有可比性。例如,某个话机振铃最大声音 dB (A)=80dB、dB (C)=85dB,不能说“C计权测到的声音更大”,而是C计权计入了更多低频部分贡献。
  • 测试条件标注:撰写报告时,必须写明测试条件,否则数据没有意义。比如65dB(A)@1m ,表示 “使用A计权方式在1m处测到的声压级数值”(针对计权标注,国际标准(如 ISO 80000-8)建议的严谨写法应该是 $L_{pA}=65\text{\ dB}$)
  • 特殊情况下的灵活变通:有时我们测的产品明显有低频噪声时,我们要测量其具体情况,便可能需要补充测量C计权下的声压级数值,以备参考。

总结:

  • 声压级(SPL)不是声音大小的物理单位,它只是表示声压大小的方法。
  • dB:反映了声压相对基准的倍数(声压级),是未加权的原始值。
  • dB(A):模拟人耳常规声压级感受的 “实用指标”,多用于合规性测试、反映实际体验的测试(最常用);
  • dB(C):模拟人耳高声压下感受,因为低频衰减小,也可以认为是完整能量的测量。用于大功率设备或要关注低频部分的测试中。

BL-RM7620N折腾笔记

事情起因是这样的。公司搬家捡垃圾,捡到了一路由器,看网口四根针,确认是百兆的垃圾路由器。本想丢掉,但后面标签写的制造商不太常见,所以捡回来拆了看什么方案。拆开看了眼板号是BL-RM7620N,布线一眼就知MT7620N,但串口上焊了一枚CC2530模组,看起来与Zigbee有关。那我必须登上管理页面看看。

OpenWrt 安全模式

通过自动获取IP,获得了路由器管理页面地址,登上去看到是运行的OpenWrt 14(Barrier Breaker)。尝试使用常见的弱口令登录,发现都登不上。接下来能做的就是清除掉密码啦。

与常见的消费级路由器相比,OpenWrt不能通过长按Rest恢复默认设置(这种自定义固件恢复默认设置后,它的密码可能我也不知道)。经过一番搜索,了解到OpenWrt内置了安全模式(failsafe mode)用于在忘记密码或配置错误后进行恢复,如果编译时不取消掉,默认该模式是提供的。

进入安全模式的方式有两种:在系统的启动过程中按下物理按键不松手、通过串口在系统提示按 f 和 Enter 进入 failsafe mode时输入按键。一旦进入安全模式,OpenWrt会绕过几乎所有的配置,使用192.168.1.1作为IP地址启动必要的服务。然后手动设置计算机IP为192.168.1.2,即可无需密码使用 telnet 连接并修复某些错误。

第一种方式通过按键进入。这很难把握时机,按键过早会进入Bootloader,按键晚了进不去安全模式。笔者试了几次没成功就放弃啦。

第二种方式通过串口进入。把上面的ZigBee模组拆除,暴露串口。通过USB2TTL线连接到计算机,注意只连接GND、TXD、RXD就好,TXD与RXD要交叉连接呦。波特率57600,打开串口,路由器插电开机,没一会儿,串口开始打印SPI Flash分区布局等启动信息,然后就看到了期望的failsafe mode提示信息:

Press the [f] key and hit [enter] to enter failsafe mode
Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level

此时,通过键盘输入 f ,然后按 Enter 键,就会看到 - failsafe - 的提示信息,然后显示BusyBox shell界面,成功进入安全模式。

进入安全模式后,我们需要通过 mount_root 命令重新挂载分区才可以写入配置文件,否则就会提示要修改的文件是Read-only file system。

root@(none):/# mount_root
jffs2 is ready

然后输入 passwd 根据提示两次输入同一密码即可更改密码。

root@(none):/# passwd
Changing password for root
New password:
Retype password:
Password for root changed by root

然后通过 reboot -f 命令重启OpenWrt,即可使用新设置的密码登录。

注:通过 uci get network.lan.ipaddr命令可以获取路由器IP地址配置,通过 mtd -r erase rootfs_data命令可以恢复默认配置。

刷机

登录管理页面后大失所望,Luci的界面干净的很,没有什么好康的。考虑这玩意儿不知道里面有啥东西,打算刷个机丢公司让他继续发热。就用SNR CPE-W4N rev. M的固件,他们PCB、Flash容量一毛一样。

通过密码登录Luci后,直接固件升级新的OpenWrt sysupgrade文件就可以。或者按住RESET键上电在Bootloader里面升级也可以。

# Stable Release 版本下载地址:
https://downloads.openwrt.org/releases/
# Development Snapshot 版本下载地址:
https://downloads.openwrt.org/snapshots/targets/

SSH登录

刷完机发现打不开管理页面了,不慌,SSH上去看看。然后我丢,SSH怎么也上不去,仔细一看,是本地计算机发现对端的验证信息改变了:

C:\Users\Lexsion>ssh root@192.168.1.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.

那我们就使用 ssh-keygen -R XXX.XXX.XXX.XXX 把之前缓存的验证信息删除,XXX.XXX.XXX.XXX是对端的IP地址。

C:\Users\Lexsion>ssh-keygen -R 192.168.1.1
# Host 192.168.1.1 found: line 5
C:\Users\Lexsion/.ssh/known_hosts updated.
Original contents retained as C:\Users\Lexsion/.ssh/known_hosts.old

然后我们就成功使用 ssh USERNAME@HOST_IP命令连接路由器的shell。

C:\Users\Lexsion>ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxx.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.1' (ED25519) to the list of known hosts.


BusyBox v1.36.1 (2023-12-15 10:44:38 UTC) built-in shell (ash)

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 -----------------------------------------------------
 OpenWrt SNAPSHOT, r24661-a14240d384
 -----------------------------------------------------
=== WARNING! =====================================
There is no root password defined on this device!
Use the "passwd" command to set up a new password
in order to prevent unauthorized SSH logins.
--------------------------------------------------
root@OpenWrt:~#

安装LUCI与中文语言包

通过执行 opkg list-installed命令查看已经安装的软件包,发现果然没有Luci,那二话不说,给它WAN口插网线,装一个Luci。

root@OpenWrt:~# opkg update
Downloading https://downloads.openwrt.org/snapshots/targets/ramips/mt7620/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading https://downloads.openwrt.org/snapshots/targets/ramips/mt7620/packages/Packages.sig
Signature check passed.
······
Downloading https://downloads.openwrt.org/snapshots/packages/mipsel_24kc/telephony/Packages.sig
Signature check passed.
root@OpenWrt:~# opkg install luci
Installing luci (git-23.051.66410-a505bb1) to root...
Downloading https://downloads.openwrt.org/snapshots/packages/mipsel_24kc/luci/luci_git-23.051.66410-a505bb1_all.ipk
······
Configuring ······
······
Configuring luci.

然后网页就有了,登录后发现系统的语言只有英语,那就去system-->Software下搜索zh-cn,下载中文语言包就变成中文啦。

使用SSH连接GitHub仓库

前言:

讲一个笑话:最近给新电脑装Git工具,才意识到自己之前用SSH连接GitHub的方法居然是错的。是这样的,我配置了密钥对后依然在使用之前配置的浏览器登录。这次换新电脑,之前没有登录GitHub,新装的Git工具。跟着官方文档配置完成后,git push -u origin master 居然还弹出登录页面,然后我才意识到之前错了。使用SSH连接仓库和创建仓库时GitHub教你的方法两者协议是不一样的,网页上给的参考命令是用的HTTPS。这些其实在开始使用Git文档中有的,只是不仔细看容易忽略。官方的SSH连接操作文档半中半英可读性也不够好,第一次读的时候没看仔细。以上教训告诉我们,学习不能急于求成,基础要仔细掌握。所以鄙人在此水贴一篇,算是个基础教程吧。(看我不如通读GitHub的文档?)

前置基础:

GitHub是一个提供Git服务的网站。Git是一套版本控制工具。所以,使用GitHub除了一些网页上的设置,其主要功能就是使用Git。首次使用Git首先要下载安装,然后便是要配置用户名和邮箱,建议设置成和GitHub上相同的。配置分为全局配置和仓库配置,全局就是没有仓库配置时默认的用户信息;仓库的就是单独某个仓库生效的。下载安装程序运行,一路点击下一步,装完Git后便可以打开Git Bash啦。

# 设置全局配置:
git config --global user.name "github's Name"
git config --global user.email "github@xx.com"
# 设置仓库的配置,要在仓库目录下执行:
git config user.name "git's Name"
git config user.email "git@xx.com"
# 查看的命令,查哪在哪执行:
git config --list

Git存储内容项目的单元被称为仓库(Repository),作为一个仓库,创建的过程称之为初始化。然后创建文件,需要产生一个历史记录时,就将变更的文件按需添加到暂存区,提交(Commit)一次。有了一次Commit后,便可以为其设置远端仓库地址,将本地的仓库变化推送过去保存。大致这么个流程:

# 创建一个以仓库名称命名的目录(或者叫文件夹),并进入其中。
mkdir XX-Repository
cd XX-Repository
# 使用初始化命令
git init
# 按照实际需要,创建或从其他地方拷贝文件到目录下。惯例要创建一个README.md文件,给人看。
touch README.md
cp ../../XXX.XXX ./XXX.XXX     # 这个Linux下用的多,Win下不如直接图形界面拖拽。
# 文件写的差不多了,先按需添加到Commit暂存区,
git add XXX.XXX XXX.XXX      # 添加指定文件
git add -A      # 添加所有新增或变更的文件
# 然后执行Commit,一般惯例要带-m参数,备注本次提交的变更。
git commit -m "first commit"
# 添加远端仓库地址,地址从仓库主页的绿色Code按钮中能看到:
git remote add origin https://github.com/USERNAME/REPOSITORY.git
# 设置远端仓库的分支为master,并推送到该分支。
git push -u origin master
# 因为上面是HTTPS的连接方式,所以会弹出网页的登录页面。按提示登录即可完成推送。

到此一个Git仓库大致就在GitHub上搞起来了。那如何换用SSH方式连接仓库呢?

通过SSH连接:

这里我抄一下官方的内容,原文半英半中,写了很多注意事项,很多内容的位置却不合理。在此我缩减了一下,有问题建议看官方文档。

检查已有的SSH密钥对

首先可以检查下您电脑上有没有已经生产的可用的密钥对,他们是成对的一组文件,包含私钥和公钥。

  1. 打开Git Bash。
  2. 执行 ls -al ~/.ssh ,如果.ssh目录下有密钥对变回在回显的信息中看到文件名类似于:
    • id_rsa.pub
    • id_ecdsa.pub
    • id_ed25519.pub

这里,如果提示目录不存在,那看样子就是啥都没有了。如果有密钥对,就可以用后面的方法检查有没有密码加密,没有密码或者知道密码便可以直接用。否则就按下面的方法新建密钥对。

生成新的SSH密钥

如果您还没有 SSH 密钥,则必须生成新 SSH 密钥用于身份验证。为了安全,需要在生产的密钥对上添加密码保护。如果不想在每次使用 SSH 密钥时重新输入这个密码,您可以将密钥添加到 SSH 代理(即ssh-agent),让它管理您的 SSH 密钥并记住您的密码。

  1. 打开Git Bash。

  2. 复制下面的文本粘贴到Bash中执行(替换为您自己的 GitHub 电子邮件地址)。

    ssh-keygen -t ed25519 -C "your_email@example.com"

    注:如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. 此时将以邮箱地址为标签生成新的SSH密钥对。

    • 提示您“Enter a file in which to save the key(输入要保存密钥的文件)”时,按 Enter 键。 这密钥会存在默认文件位置。(即~/.ssh ,不存在默认位置没有积极意义且会让后面更繁琐。)
    • 在提示 Enter passphrase 时设置密码,在提示 Enter same passphrase again: 时重复密码。

在 Git for Windows 上自动启动 ssh-agent

您可以在打开 bash 或 Git shell 时自动运行 ssh-agent。并让它自动添加~/.ssh目录下新的 SSH 密钥。

  1. 复制以下内容并将其粘贴到 Git shell 的 ~/.profile 文件中保存,没有就创建一个:

    env=~/.ssh/agent.env
    
    agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
    
    agent_start () {
        (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; }
    
    agent_load_env
    
    # agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
    agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
    
    if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
        agent_start
        ssh-add
    elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
        ssh-add
    fi
    
    unset env

    ~/ 这个位置是用户的HOME目录,Windows 下就是 C:\Users\<你的用户名> 这个目录。

    如果您的私钥没有存储在默认位置之一(如 ~/.ssh/id_rsa),您需要告知 SSH 身份验证代理其所在位置。 要将密钥添加到 ssh-agent,请输入 ssh-add ~/path/to/my_key

  2. 重新开一个Git Bash窗口,ssh-agent首次被启动,自动搜索新增的密钥对,然后提示输入密码,按要求输入密码后密钥对就被加入了ssh-agent。以后运行 Git Bash 时便会自动启动 ssh-agent ,不再需要输入密码。

  3. ssh-agent 进程将继续运行,直到您注销、关闭计算机或终止该进程。

添加SSH 公钥到 GitHub 帐户

前面的操作概括来讲就是将本地的私钥添加到了本地的SSH代理中,下面要将公钥添加到GitHub上。

  1. 网页右上角点击头像,然后点击 Settings。在左侧找到 Access 部分,点击 SSH and GPG keys

  2. 点击右上方的 New SSH key,打开 SSH keys/ Add new 页面。

  3. 在 "Title"(标题)文本框中,为新公钥添加描述性标题,要求自己看到就知道是啥。 例如,如果密钥对用于枪神6笔记本上,此公钥名称可以是 "God of Gun 6"。

  4. 使用以下命令将 SSH 公钥复制到剪贴板,并粘贴到网页的"Key"(密钥)文本框中。最后点击 Add SSH key(添加 SSH 密钥),按提示输入GitHub的登录密码完成公钥的添加。

    clip < ~/.ssh/id_ed25519.pub

    提示:注意文件位置,此处是默认位置与文件名,如果前面你的位置不一样,需要灵活改变。如果 clip 命令不可用,可找到隐藏的 .ssh 文件夹,在常用的文本编辑器中打开该.pub文件,并将其内容复制到剪贴板。

这样GitHub那边有对应的公钥,我有对应的私钥,我本地的SSH便能够向GitHub证明我的身份啦。

测试 SSH 连接

测试连接时,您可能需要使用密码(即您之前创建的 SSH 密钥对的密码)验证此操作。如果密钥的密码之前没有缓存到ssh-agent中。如果是按照前面操作过来的,应该无需再次输入密码。

  1. 打开 Git Bash。

  2. 输入以下内容:

    ssh -T git@github.com

    您可能会看到类似如下的警告:

    > The authenticity of host 'github.com (IP ADDRESS)' can't be established.
    > RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    > Are you sure you want to continue connecting (yes/no)?
  3. 验证所看到消息中的指纹是否匹配 GitHub 的 RSA 公钥指纹。 如果是,则输入 yes。如果一切正常,会看到GitHub返回了一段包含您的用户名的消息。

    > Hi username! You've successfully authenticated, but GitHub does not
    > provide shell access.

将远端仓库的 URL 从 HTTPS 切换到 SSH

  1. 打开 Git Bash。

  2. 将当前工作目录切换到为您的本地仓库。

  3. 列出现有远程仓库以获取要更改的远程仓库的名称,关注一下USERNAME和REPOSITORY部分。

    $ git remote -v
    > origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
    > origin  https://github.com/USERNAME/REPOSITORY.git (push)
  4. 使用 git remote set-url 命令更改远端的 URL ,注意将上面获取的名称换到下面命令中。

    $ git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

这里也可以使用git config 命令直接调整配置处理。

git config -l # 查看配置
git config remote.origin.url git@github.com:USERNAME/REPOSITORY.git
git config -l # 再次执行,检查修改结果

参考:

J-Link V9 使用7.x工具包提示 Probe 为 Clone 产品的处理

前言:

今天找出了以前低价拍到的 STM32_F4VE 开发板,又找到了网友处以散件形式低价购得的 J-Link V9 ,去 SEGGER 官网下载了 JLink 工具包并进行了安装。到了测试连接时却出现了问题,J-Flash 弹出以下警告:

The connected probe appears to be a J-Link clone.Using the J-Link software with a clone is forbidden and illegal.Proper operation cannot be guaranteed.

翻译成中文大致如此:当前连接的探针(调试器)看起来是一个 J-Link 复制品(盗版)。在复制品上使用 J-Link 软件不被允许也不合法。我们无法保证它能正常工作。

看了一下固件版本,固件应该是还是16年的魔改版本,也没有像原版一样的自动更新功能。这样肯定不行,于是我搜索了一下该如何处理。通过一番搜索,发现出现此问题的原因貌似是因为SEGGER升级了盗版识别机制,加入了对 SN 和扩展功能方面的验证,从而导致被检测为 Clone品,具体参考该贴

注意:本文所述方法仅针对使用 STM32F205RC/RE 主控的 J-Link V9 复制品,随着厂商更新,无法保证方法一直有效。刷写固件存在设备报废的风险,请自行斟酌,谨慎操作!

处理办法:

通过网友们的帖子了解到,解决此问题的方法,无非就是刷固件、改序列号、清除掉魔改添加的功能。经过一番尝试,发现最简单的方法就是刷入某不具名大佬提供的 Bootloader ,连接电脑打开 J-Link Configurator ,等待其自动升级最新固件即可。这样的结果是 SN 值会变成 -1,当然也有办法自定义 SN ,但神奇的是,SN 值为 -1 并不影响其功能。

相关文件已存储于IPFS网络,链接在此

具体过程:

相信您已经安装了 J-Link 软件包,对此这里不再赘述。使用一个可以正常工作的 J-Link 连接此异常 J-Link 的 SWD 调试接口,J-Link V9 标准克隆版通常会在靠近 PCB 边缘有四到五个预留焊盘,一般从靠近 F205 一端开始,依次为 VCC、GND、SWDIO、SWCLK 。没有大鸡也可以用 J-Link OB ,只是需要用 OB 的 SN 在 Segger J-Link keygen 中生成一个 J-Flash 许可添加到 J-Link License Manager 中,因为 J-Link OB 默认是不具有 J-Flash 使用许可的 。注意:视情况,目标板可能需要单独供电。

保证 SWD 接口稳固连接,打开 J-Flash 。在欢迎页选择 Create new project --> Start J-Flash 。Target device 中点击 ··· 按钮,根据实际情况搜索并选择 STM32F205R* ,Target interface 选择 SWD,Speed 选择1000kHz,如果后面无法建立连接,建议减小速率。最后点击 OK

将解压后的 bootloader.bin 文件拖入 J-Flash,设置起始地址为 0x8000000 ,点击 OK。点击 Target --> Connect 建立连接,点击 Manual Programming --> Erase Chip 擦除原始固件,点击 Manual Programming --> Program&Verify 刷入 Bootloader 并校验。

如果您希望自定义 J-Link 的 SN,此时可以关闭 Bootloader 数据窗口,点击 Manual Programming --> Read back --> Entire chip 回读整个芯片数据,然后回读的数据会显示在数据窗口中。通过Go To: 功能快速跳转到地址 0x800BF00 ,通过修改0x800BF000x800BF03 四个字节可以定义 J-Link V9 的 SN 。例如:0x800BF000x800BF03 依次是 7D、C3、C0、01,则 SN 为 01C9C37D = 29999997。按自己意愿修改后参考上面步骤重新全片擦除并写入即完成 SN 的自定义。如果不需要自定义 SN,可跳过本段。

拆除固件烧录的相关连接,将刷好 Bootloader 的 J-Link V9 通过 USB 连接到计算机,打开 J-Link Configurator ,会自动弹出固件修复窗口,等待其完成最新版本固件的刷入,然后拔下 USB 重新连接,J-Link V9 即可正常使用了。如果没有自定义SN,会看到硬件SN是-1,如果有自定义SN,则会显示自定义的SN。

参考:

Arduino MKR Zero 上手笔记

前言:

笔者最近参与了 DigiKeyB站的Arduino盘点抽奖活动,有幸获得了一块Arduino MKR ZERO开发板。与复制品很常见的UNO和Mega2560不同,MKR ZERO使用的是 Microchip 的 SAMD21处理器 ,内核为32位的ARM Cortex-M0+ ,而前两者是8位的 AVR内核。这种原版的开发板我是万万买不起的,这次既然有幸得到,自然要点灯为敬。

Arduino MKR Zero——DigiKey零件页面

以上得捷页面提供了部分信息,话说看其价格也许比某宝便宜一些?(但不知道加上运费怎么样?

简介:

Arduino MKR ZERO 开发板在较小的尺寸上提供了不错的性能。MCU采用 32 位 ARM Cortex® M0+ 内核,且内有DAC。开发板提供了Micro USB & 电池双供电以及电池充电电路,且板载使用SPI接口的MicroSD连接器和一枚ECC508加密IC。如此,该开发板可以在不添加其他硬件的情况下播放音频文件。

警告:与大多数Arduino和Genuino板不同,MKRZero的运行电压为3.3V。I/O引脚可以承受的最大电压为3.3V。对任何 I/O 引脚施加高于 3.3V 的电压可能会损坏电路板。

技术信息:

技术信息
微控制器 SAMD21 Cortex‐M0+ 32bit low power ARM MCU
开发板供电电源 5V Max Micro USB
支持的电池 单节 Li-Po,3.7V ,至少700mAh容量
3.3V最大输出 600mA
5V最大输出 600mA
IO工作电压 3.3V Max
数字I/O数量 22
PWM引脚 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A2 - or 18-, A4 - or 19)
串口数量 1
SPI数量 1
I2C数量 1
模拟输入引脚数量 7 (ADC 8/10/12 bit)
模拟输出引脚数量 1 (DAC 10 bit)
外部中断引脚 8 (0, 1, 4, 5, 6, 7, 8, A1 ‐or 16‐, A2 ‐ or 17)
单个 I/O 最大电流 7 mA
容量 256K Flash (8K Bootloader),32K SRAM,NO EEPROM
时钟频率 48MHz (Main),32.768kHz(RTC)
板载LED引脚 32 (PB08) LED_BUILTIN suggested

开发资料:

开发环境部署:

Arduino MKR Zero 是Arduino官方出品的开发板,其使用的开发环境自然是Arduino IDE。

首先到 Arduino IDE下载页 下载Arduino最新的Arduino 1.8,并按提示完成安装,安装路径建议不要有空格或中文。

安装完成后打开Arduino IDE,接下来要安装SAMD Core。点击 工具 > 开发板: > 开发板管理器... , 在弹出的窗口中将显示所有可用的开发板。

在搜索框中以 samd 为关键词搜索,在搜索结果中找到Arduino SAMD Boards (32-bits ARM Cortex-M0+) 并点击安装,安装期间若有驱动安装提示请允许,否则无法正常上传固件。若安装有困难,可能需要使用代理。

点击 工具 > 开发板: > Arduino SAMD Boards (32-bits ARM Cortex-M0+ > Arduino MKRZERO 选择开发板型号,点击 工具 > 端口 > COMxx(Arduino MKRZERO) 选定开发板串口。这时点击 工具 > 取得开发板信息 可以读到开发板信息即表示通信正常。

点灯:

点击 文件 > 示例 > 01.Basics > Blink ,打开闪灯示例程序,为了与出厂预置闪灯程序区分,将delay延时函数的参数改为250(代码如下),然后点击 上传 ,此时Arduino IDE会开始编译,编译完成后自动上传。等待其成功上传后观察板载LED闪烁速度,变快了便是成功了。

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(250);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(250);                       // wait for a second
}

参考:

Freenom域名注册的常见问题与自动续期

前言:

最近突然想再注册一个Freenom域名,发现遇到一些问题,此处记录,以免日后再注册时候不记得,再次踩坑。另外记一下 Freenom 的自动续期,看到本文的人也能知道还有这种好事儿!

常见问题:

Freenom不显示注册页面

Freenom 只有登录按钮,点进去的登录页面也没有注册按钮。这个情况是因为 Freenom 页面提供了Google和Facebook 登录的选项而没提供直接的邮箱注册页面,不幸的是它们在中国大陆被屏蔽了。这个问题只需要先检查域名就可以了,选好域名最后 Checkout 时是会给出邮箱注册账号的页面的。

注册域名提示无法使用

一般出现在第一次注册时,或者是浏览器IP变化时候,Check Availability 查找域名后点击 Get it now! 时提示域名无法使用(Not available)。这种情况一个可能是没有账号先检查域名的注册流程中,这种情况填写域名时需要将域名后缀一起填入。另一个有账号的情况可能是登录失效了,如果已经注册账号,刷新重新登录即可。没有账号就前面方法注册一个账号。

注册域名提示技术错误

注册域名时遇到提示技术(Tech)错误,此问题是因为你浏览器当前的IP和你账号资料里面填写的区域国家不一致,从而触发了 Freenom 的反欺诈。可考虑修改资料中的国家地区,或更换与注册地相同的IP代理访问。(不建议使用代理注册域名)

点击 完成订单 提示不能确定你是人或没有反应

使用中国大陆网络访问 Freenom 注册域名可能会在最后一部点击 Complete Order 时网页没有反应、或是提示不能确定你是人。这是因为 Freenom 使用了 Google 的 reCAPTCHA 人机验证,而Google因为某些原因被大陆屏蔽。所以,国内无法正常连接位于 www.google.com/recaptcha 的 reCAPTCHA 服务。可以使用浏览器插件 Gooreplacer 拦截重定向到 recaptcha.net/recaptcha 就可以正常使用该服务了。

以Chrome 为例,只需要在浏览器扩展程序中搜索安装 Gooreplacer ,打开其配置页面并新增一条规则,匹配模式为 www.google.com/recaptcha ,目标地址为 recaptcha.net/recaptcha ,匹配类型为 通配符 。最后确定规则启用就可以了。

经过以上设置后,回到 Freenom 的网站,Ctrl + F5 刷新网页,重新登录,应该就可以正常注册域名了。

自动续期:

Freenom 域名可以免费注册,但是最多只能注册一年。在到期前的两个星期内为免费续订期,如果错过了这几天,域名可能就需要付费注册抑或是与你无缘了。为了保证域名一直在自己手中,我在Microsoft 日历中添加了相关的提醒事项,并且使用大佬 @luolongfei项目 进行自动续期。

因为考虑腾讯云提供了免费的云函数服务,而自动续期检查使用的资源开销很小,完全不会超出腾讯云的免费额度,所以本人使用了腾讯云的云函数运行了自动续期脚本。只需要去腾讯云注册个账号,然后十分钟左右时间部署一个云函数项目就可以了。相关的使用与部署方法大佬在README中写的非常详细了,此处提供个小建议,不必设置每天检查,一个星期检查两次就可以了。其他具体部署本文不再赘述。

参考: