前言

  公司产品涉及相关方面,需加强了解。目前项目使用的射频芯片为ST25R501,开发板使用的为ST25R391b(模拟前端),自购的是nNRF52840。

NRF52840

  核心板使用的是nice!nano,支持蓝牙、NFC-A,它比较出名的是用于客制化键盘的构建,支持ZMK、BlueMicro固件,由于此芯片的SDK并不开源,所以并未适配QMK,否则会违反其GPL协议
  使用它进行开发,目前有三大环境:

  • nRF Connect SDK(NCS),vscode插件予以支持
  • Arduino
  • nRF5 SDK(已过时)

  现使用Arduino框架,ini文件配置为:

1
2
3
4
5
6
7
[env:adafruit_feather_nrf52840]
platform = nordicnrf52
board = adafruit_feather_nrf52840
framework = arduino

upload_protocol = nrfutil
monitor_speed = 115200

Project

To be continue:正在验证其作为手表主控的能力,用于复刻SCA-B。

显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SCREEN_ADDRESS 0x3C

// 在 Feather nRF52840 的 variant.cpp 中:
// P0.17 (NiceNano SDA) 被定义为引脚索引 29
// P0.20 (NiceNano SCL) 被定义为引脚索引 28
// 我们必须使用这两个“隐藏”的编号,而不是 NiceNano 丝印上的 2 和 3
#define PIN_SDA_HACK 28
#define PIN_SCL_HACK 29

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
Serial.begin(115200);

// 1. 强制重映射 I2C 引脚
Wire.setPins(PIN_SDA_HACK, PIN_SCL_HACK);

// 2. 初始化 OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println("SSD1306 allocation failed");
for(;;);
}

display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);

display.println(F("nRF52840"));
display.display();
}

void loop() {
display.invertDisplay(true);
delay(500);
display.invertDisplay(false);
delay(500);
}