让文件“脱离”版本控制
@[toc] 文章:深入理解 git rm --cached:如何优雅地让文件“脱离”版本控制在日常使用 Git 进行版本控制的过程中,我们有时会遇到这样的情况:不小心将一个本不应该提交的文件添加到了版本库中。这可能是编译生成的二进制文件、包含敏感信息的配置文件、或是体积庞大的日志文件。当你意识到这个问题时,你希望 Git 停止跟踪它,但又想在本地保留这个文件以供使用。这时,git rm --cached 命令就派上了用场。 问题的根源:当 .gitignore “为时已晚”许多开发者都知道,可以通过配置 .gitignore 文件来告诉 Git 哪些文件或目录应该被忽略。但 .gitignore 只能忽略那些从未被跟踪过的文件。如果一个文件已经被 git add 和 git commit 过,那么即使你后来在 .gitignore 中添加了它,Git 仍然会继续跟踪它的变化。 例如,命令 git rm -r --cached .\bl_lib\qboot\tools\patch.rbl.bin 很可能就是在处理一个类似 patch.rbl.bin 的二进制文件,这种文件通常...
LoRaWAN EndNode Study
LoRaWAN EndNode Study[TOC] 1. SUBGHZ1.1 介绍 Sub-GHz是指工作频率低于1ghz12的无线网络技术。它因无线电频率低于1 ghz而得名。Sub-GHz 无线电是一种超低功耗 Sub-GHz 无线电,在 150 - 960 MHz ISM 频段运行。 1.2 ST-SUBGHZ 模拟前端收发器,能够在其 RFO_LP 引脚上输出高达 + 15 dBm 的最大功率,在 RFO_HP 引脚上输出高达 + 22 dBm 的最大功率 .半双工 150 - 960 MHz ISM sub-GHz 无线电收发器支持. LoRa Rx/Tx,带宽 (BW) 为 7.8 - 500 kHz,扩频因子 (SF) 5 - 12,比特率 (BR) 为 0.013 至 17.4 Kbit/s(实际比特率) Sub-GHz 无线电提供了一个内部处理单元来处理与系统 CPU 的通信。通信通过 SPI 接口发送的命令进行处理,并使用一组中断来发出事件信号。 BUSY 信息表示操作活动,并用于指示何时无法接收 sub-GHz 无线电命令 1...
README
LoRaWAN-Specification_ZH_CN项目介绍这是《LoRaWAN-Specification》的中文译本。 《LoRaWAN-Specification》是 LoRa 联盟规范的核心协议,由于国内LoRa从业者数量众多,难免有不少伙伴需要中文译本,所以诞生了这个小项目。 项目采用 gitbook 进行编写,地址在 https://www.gitbook.com/book/twowinter/lorawan-specification_zh_cn。 由于这是民间自发的翻译,一些地方翻译可能不够恰当。如果觉得协议的某处比较晦涩,请不要怀疑自己,大概率是翻译的问题。 非常欢迎朋友们反馈翻译问题,争取给行业伙伴们提供一份相对可靠的译本。 项目进展LoRaWAN_V1.0.2 的中文版本经过1年半时间断断续续的调整,现已优先发布。 其他版本待整理后,新建分支来跟进。大家可持续关注github 仓库地址。 贡献者介绍 IoT小能手 twowinter 厦门四信的小伙伴 厦门四信的几个小伙伴在业余时间对协议的部分内容做了校对,尤其是 kevin 同学贡献了 CLASS...
SUMMARY
Summary 前言 [第1章 介绍](chapter/1 Introduction.md) [1.1 LoRaWAN Classes](chapter/1 Introduction.md#1.1) [1.2 文档约定](chapter/1 Introduction.md#1.2) [第2章 LoRaWAN Classes 类型介绍](chapter/2 Introduction on LoRaWAN options.md) [2.1 LoRaWAN Classes](chapter/2 Introduction on LoRaWAN options.md#2.1) [2.2 文档范围](chapter/2 Introduction on LoRaWAN options.md#2.2) [CLASS A - ALL END-DEVICE 所有终端](chapter/CLASS A - ALL END-DEVICE.md) [第3章 PHY 帧格式](chapter/3 Physical...
1 Introduction
第1章 介绍本文档描述了LoRaWAN网络协议,是针对电池供电的终端设备(不管移动还是固定位置)进行优化的一套网络协议。 LoRaWAN网络通常采用星型拓扑结构,由拓扑中的网关来转发终端与后台网络服务器间的消息。网关通过标准IP连接来接入网络服务器,而终端则通过单跳的 LoRa 或者 FSK 来和一个或多个网关通讯。虽然主要传输方式是终端上行传输给网络服务器,但所有的传输通常都是双向的。 终端和网关间的通讯被分散到不同的信道频点和数据速率上。数据速率的选择需要权衡通信距离和消息时长两个因素,使用不同数据速率的设备互不影响。LoRa的数据速率范围可以从 0.3kbps 到 50kbps。为了最大程度地延长终端的电池寿命和扩大网络容量,LoRa网络使用速率自适应(ADR)机制来独立管理每个终端的速率和RF输出。 每个设备可以在任意可用的信道,任意时间,使用任意数据速率发送数据,只要遵守如下规定: 终端的每次传输都使用伪随机方式来改变信道。频率的多变使得系统具有更强的抗干扰能力。 终端要遵守相应频段和本地区的无线电规定中的最大发射占空比要求。 终端要遵守相应频段和本地区的无线电规定中...
10 Uplink frame in Class B mode
第10章 Class B 模式的上行帧Class B 模式的上行帧和 Class A 的基本一样,除了帧头Fctrl字段的RFU位域有所不同。在 Class A 上行帧中这个位没有使用(RFU),而在 Class B 中有使用。 Bit# 7 6 5 4 [3..0] FCtrl bits ADR ADRACKReq ACK Class B FOptsLen 上行帧中的 Class B 位域置为1,用于通知network server设备已切换到 Class B 模式,准备好接收下行ping包。 下行帧的FPending位域的定义是不变的,仍然和Class A的定义一样,表示server有多个下行帧要下发,设备应当继续接收。
11 Downlink Ping frame format
第11章 Class B 模式的下行帧(Class B选项)11.1 物理层帧格式下行 Ping 帧使用和 Class A 下行帧相同的格式,但可能会采用不同的信道频率规划。 11.2 单播和多播 MAC消息信息的传播方式可以是“单播”或者“多播”。单播是指将信息传递给一个指定的终端,多播是指将信息传递给多个终端。多播组内的所有终端都必须共享一个相同的多播地址和相关的加密密钥。LoRaWAN Class B 协议中并没有明确规定如何去建立这样的多播组,以及如何安全地分配多播密钥。这必须通过 节点个性化设置 或者 应用层 来实现。 11.2.1 单播 MAC 消息格式单播下行 Ping 帧的 MAC 载荷格式和 Class A 的定义一样。终端的处理也采用相同的方式。同时也采用相同的帧计数,在收到 Class B ping 时隙或者 Class A 应答时隙时都进行递增处理。 11.2.2 多播 MAC 消息格式多播帧和单播帧大部分都一样,仅有一些区别: 不允许携带 MAC 命令,既不能在 FOpt 字段里,也不能 port 0 时的载荷里携带,因为多播下行不像单播帧那样具备认证...
15 Beaconing[Class B option]
第15章 信标(Class B选项)15.1 信标物理层所有网关除了可以为终端和网络服务器转发消息,还可以通过在可配置的固定时间间隔上发送信标(BEACON_INTERVAL)来参与提供一个时间同步机制。所有信标都以无线分组隐式模式进行发送,即没有 LoRa 物理帧头和 CRC 校验。 PHY Preamble BCNPayload 信标的 Preamble 开始于(长于默认)10个未调制符号。这允许终端实现低功耗占空比信标搜索。 信标的帧长度与无线电物理层紧密耦合。因此实际的帧长度可能从一个区域实现变为另一个区域实现。更改字段在下面的部分以粗体显示。 15.1.1 欧盟 863-870MHz ISM 频段信标使用下面的设置进行传送: DR 3 对应于125kHz带宽的SF9扩频因子 CR 1 编码率=4/5 frequency 869.525MHz 这是推荐的允许+27 d...
16 Class B unicast & multicast downlink channel frequencies
第16章 Class B单播/多播下行信道频率16.1 欧盟 863-870MHz ISM 频段所有的 Class B 的下行单播和多播都使用由 “PingSLotChannelReq” MAC 命令所定义的单频信道。默认的频率是 869.525MHz。 16.2 美国 902-928MHz ISM 频段默认的,Class B的下行使用最后一个信标(鉴信标帧格式内容)的 Time 字段的信道函数和 DevAddr。 Class B downlink channel = [DevAddr + floor(Beacon_Time/Beacon_period)] modulo 8 其中 Beacon_Time 是当前信标周期的 32 位 Time 字段。 Beacon_period 是信标周期的长度(协议中定义的是128s) Floor 指的是四舍五入到临近的较低整数值。 DevAddr 是终端的32位网络地址。 因此 Class B 的下行在 ISM 频段的 8 个信道进行跳跃并且所有的 Class B 终端平等地使用 8 个下行信道...
17 Class C Continuously listening end-device
第17章 持续接收的终端具备Class C 能力的终端,通常应用于供电充足的场景,因此不必精简接收时间。 Class C 的终端不能执行 Class B 。 Class C 终端会尽可能地使用 RX2 窗口来监听。按照 Class A 的规定,终端是在 RX1 无数据收发才进行 RX2 接收。为了满足这个规定,终端会在上行发送结束和 RX1 接收窗口开启之间,打开一个短暂的 RX2 窗口,一旦 RX1 接收窗口关闭,终端会立即切换到 RX2 接收状态; RX2 接收窗口会持续打开,除非终端需要发送其他消息。 注意:没有规定节点必须要告诉服务端它是 Class C 节点。这完全取决于服务端的应用程序,它们可以在 join 流程通过协议交互来获知是否是 Class C 节点。 17.1 Class C 的第二接收窗口持续时间Class C 设备执行和 Class A 一样的两个接收窗口,但它们没有关闭 RX2 ,除非他们需要再次发送数据。因此它们几乎可以在任意时间用 RX2 来接收下行消息,包括MAC命令和ACK传输的下行消息。另外在发送结束和 RX1 开启之间还打开了一个短暂的...