feat: 添加Atguigu键盘板支持和IP5306电源管理驱动
添加了两个新的键盘板支持: - atguigu_keyboard_dongle (基于nrf52833) - atguigu_mini_keyboard (基于nrf52840) 同时添加了完整的IP5306电源管理芯片驱动,包括: - 支持充电状态检测 - 提供软硬件保活脉冲功能 - 硬件后端利用nRF的RTC+GPIOTE+GPPI实现低功耗保活 - 软件后端作为备用方案
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
config BOARD_ATGUIGU_KEYBOARD_DONGLE
|
||||
select SOC_NRF52833_QDAA
|
||||
@@ -0,0 +1,2 @@
|
||||
&pinctrl {
|
||||
};
|
||||
@@ -0,0 +1,42 @@
|
||||
/dts-v1/;
|
||||
#include <nordic/nrf52833_qdaa.dtsi>
|
||||
#include "atguigu_keyboard_dongle-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Keyboard Dongle";
|
||||
compatible = "atguigu,atguigu-keyboard-dongle";
|
||||
|
||||
chosen {
|
||||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zephyr,code-partition = &slot0_partition;
|
||||
};
|
||||
};
|
||||
|
||||
&flash0 {
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
boot_partition: partition@0 {
|
||||
label = "mcuboot";
|
||||
reg = <0x00000000 DT_SIZE_K(48)>;
|
||||
};
|
||||
|
||||
slot0_partition: partition@c000 {
|
||||
label = "image-0";
|
||||
reg = <0x0000c000 DT_SIZE_K(220)>;
|
||||
};
|
||||
|
||||
slot1_partition: partition@43000 {
|
||||
label = "image-1";
|
||||
reg = <0x00043000 DT_SIZE_K(220)>;
|
||||
};
|
||||
|
||||
storage_partition: partition@7a000 {
|
||||
label = "storage";
|
||||
reg = <0x0007a000 DT_SIZE_K(24)>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
identifier: atguigu_keyboard_dongle/nrf52833
|
||||
name: Keyboard Dongle
|
||||
vendor: atguigu
|
||||
type: mcu
|
||||
arch: arm
|
||||
ram: 128
|
||||
flash: 512
|
||||
toolchain:
|
||||
- zephyr
|
||||
supported: []
|
||||
@@ -0,0 +1,2 @@
|
||||
CONFIG_ARM_MPU=y
|
||||
CONFIG_HW_STACK_PROTECTION=y
|
||||
9
boards/atguigu/atguigu_keyboard_dongle/board.cmake
Normal file
9
boards/atguigu/atguigu_keyboard_dongle/board.cmake
Normal file
@@ -0,0 +1,9 @@
|
||||
set(OPENOCD_NRF5_SUBFAMILY "nrf52")
|
||||
board_runner_args(jlink "--device=nRF52833_xxAA" "--speed=4000")
|
||||
board_runner_args(pyocd "--target=nrf52833" "--frequency=4000000")
|
||||
|
||||
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
|
||||
5
boards/atguigu/atguigu_keyboard_dongle/board.yml
Normal file
5
boards/atguigu/atguigu_keyboard_dongle/board.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
board:
|
||||
name: atguigu_keyboard_dongle
|
||||
vendor: atguigu
|
||||
socs:
|
||||
- name: nrf52833
|
||||
@@ -0,0 +1,2 @@
|
||||
# Suppress "unique_unit_address_if_enabled" to handle some overlaps
|
||||
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
|
||||
@@ -0,0 +1,2 @@
|
||||
config BOARD_ATGUIGU_MINI_KEYBOARD
|
||||
select SOC_NRF52840_QFAA
|
||||
@@ -0,0 +1,73 @@
|
||||
&pinctrl {
|
||||
qdec_default: qdec_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(QDEC_A, 0, 10)>,
|
||||
<NRF_PSEL(QDEC_B, 1, 6)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
qdec_sleep: qdec_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(QDEC_A, 0, 10)>,
|
||||
<NRF_PSEL(QDEC_B, 1, 6)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
|
||||
led_spi_default: led_spi_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(SPIM_MOSI, 0, 20)>;
|
||||
};
|
||||
};
|
||||
|
||||
led_spi_sleep: led_spi_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(SPIM_MOSI, 0, 20)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
|
||||
lcd_spi_default: lcd_spi_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(SPIM_SCK, 1, 13)>,
|
||||
<NRF_PSEL(SPIM_MOSI, 0, 28)>;
|
||||
};
|
||||
};
|
||||
|
||||
lcd_spi_sleep: lcd_spi_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(SPIM_SCK, 1, 13)>,
|
||||
<NRF_PSEL(SPIM_MOSI, 0, 28)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_default: i2c1_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 1, 0)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 24)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_sleep: i2c1_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 1, 0)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 24)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
|
||||
pwm0_default: pwm0_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(PWM_OUT0, 1, 11)>;
|
||||
};
|
||||
};
|
||||
pwm0_sleep: pwm0_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(PWM_OUT0, 1, 11)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
};
|
||||
240
boards/atguigu/atguigu_mini_keyboard/atguigu_mini_keyboard.dts
Normal file
240
boards/atguigu/atguigu_mini_keyboard/atguigu_mini_keyboard.dts
Normal file
@@ -0,0 +1,240 @@
|
||||
/dts-v1/;
|
||||
#include <nordic/nrf52840_qiaa.dtsi>
|
||||
#include "atguigu_mini_keyboard-pinctrl.dtsi"
|
||||
#include <zephyr/dt-bindings/pinctrl/nrf-pinctrl.h>
|
||||
#include <zephyr/dt-bindings/led/led.h>
|
||||
|
||||
/ {
|
||||
model = "Mini Keyboard, 17 keys";
|
||||
compatible = "atguigu,atguigu-mini-keyboard";
|
||||
|
||||
chosen {
|
||||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zephyr,code-partition = &slot0_partition;
|
||||
zephyr,display = &st7789v3;
|
||||
};
|
||||
|
||||
aliases {
|
||||
backlight = &backlight;
|
||||
};
|
||||
|
||||
mode_sense: mode-sense {
|
||||
compatible = "voltage-divider";
|
||||
io-channels = <&adc 5>;
|
||||
output-ohms = <1>;
|
||||
full-ohms = <1>;
|
||||
};
|
||||
|
||||
battery_sense: battery-sense {
|
||||
compatible = "voltage-divider";
|
||||
io-channels = <&adc 7>;
|
||||
output-ohms = <100000>;
|
||||
full-ohms = <200000>;
|
||||
power-gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
|
||||
power-on-sample-delay-us = <100>;
|
||||
};
|
||||
|
||||
pwm_leds: pwm_leds {
|
||||
compatible = "pwm-leds";
|
||||
status = "okay";
|
||||
backlight: pwm_led_0 {
|
||||
pwms = <&pwm0 0 PWM_MSEC(10) PWM_POLARITY_INVERTED>;
|
||||
};
|
||||
};
|
||||
|
||||
led_0: led_0 {
|
||||
compatible = "gpio-leds";
|
||||
status = "okay";
|
||||
|
||||
chan0 {
|
||||
gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
led_1: led_1 {
|
||||
compatible = "gpio-leds";
|
||||
status = "okay";
|
||||
|
||||
chan0 {
|
||||
gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
mipi_dbi: mipi_dbi {
|
||||
compatible = "zephyr,mipi-dbi-spi";
|
||||
status = "okay";
|
||||
spi-dev = <&spi3>;
|
||||
dc-gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
|
||||
reset-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
|
||||
write-only;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
st7789v3: st7789v@0 {
|
||||
compatible = "sitronix,st7789v";
|
||||
status = "okay";
|
||||
reg = <0>;
|
||||
mipi-max-frequency = <32000000>;
|
||||
width = <320>;
|
||||
height = <172>;
|
||||
x-offset = <0>;
|
||||
y-offset = <34>;
|
||||
vcom = <0x2b>;
|
||||
gctrl = <0x35>;
|
||||
vrhs = <0x11>;
|
||||
vdvs = <0x20>;
|
||||
mdac = <0xA0>;
|
||||
lcm = <0x2c>;
|
||||
colmod = <0x55>;
|
||||
gamma = <0x01>;
|
||||
porch-param = [ 0c 0c 00 33 33 ];
|
||||
cmd2en-param = [ 5a 69 02 01 ];
|
||||
pwctrl1-param = [ a4 a1 ];
|
||||
pvgam-param = [ d0 00 02 07 0a 28 32 44 42 06 0e 12 14 17 ];
|
||||
nvgam-param = [ d0 00 02 07 0a 28 31 54 47 0e 1c 17 1b 1e ];
|
||||
ram-param = [ 00 f0 ];
|
||||
rgb-param = [ c0 02 14 ];
|
||||
mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE";
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&spi2 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&led_spi_default>;
|
||||
pinctrl-1 = <&led_spi_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
cs-gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
|
||||
|
||||
led_strip: ws2812@0 {
|
||||
compatible = "worldsemi,ws2812-spi";
|
||||
supply-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
|
||||
reg = <0>;
|
||||
spi-max-frequency = <8000000>;
|
||||
chain-length = <17>;
|
||||
color-mapping = <LED_COLOR_ID_GREEN LED_COLOR_ID_RED LED_COLOR_ID_BLUE>;
|
||||
spi-one-frame = <0xFC>;
|
||||
spi-zero-frame = <0xC0>;
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&i2c1_default>;
|
||||
pinctrl-1 = <&i2c1_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
clock-frequency = <400000>;
|
||||
|
||||
ip5306: pmic@75 {
|
||||
status = "okay";
|
||||
compatible = "injoinic,ip5306";
|
||||
reg = <0x75>;
|
||||
keepalive-gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
|
||||
keepalive-interval-ms = <10000>;
|
||||
keepalive-offload;
|
||||
};
|
||||
};
|
||||
|
||||
/* 编码器 */
|
||||
&qdec {
|
||||
status = "okay";
|
||||
/* 引用上面定义的标签 */
|
||||
pinctrl-0 = <&qdec_default>;
|
||||
pinctrl-1 = <&qdec_sleep>;
|
||||
/* 指定 pinctrl-0 为默认,pinctrl-1 为睡眠 */
|
||||
pinctrl-names = "default", "sleep";
|
||||
|
||||
/* 别忘了 QDEC 必须的两个属性 */
|
||||
steps = <40>;
|
||||
led-pre = <0>;
|
||||
};
|
||||
|
||||
&flash0 {
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
boot_partition: partition@0 {
|
||||
label = "mcuboot";
|
||||
reg = <0x00000000 DT_SIZE_K(48)>;
|
||||
};
|
||||
|
||||
slot0_partition: partition@c000 {
|
||||
label = "image-0";
|
||||
reg = <0x0000c000 DT_SIZE_K(472)>;
|
||||
};
|
||||
|
||||
slot1_partition: partition@82000 {
|
||||
label = "image-1";
|
||||
reg = <0x00082000 DT_SIZE_K(472)>;
|
||||
};
|
||||
|
||||
storage_partition: partition@f8000 {
|
||||
label = "storage";
|
||||
reg = <0x000f8000 DT_SIZE_K(32)>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&spi3 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&lcd_spi_default>;
|
||||
pinctrl-1 = <&lcd_spi_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
cs-gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
&adc {
|
||||
status = "okay";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
channel@5 {
|
||||
reg = <5>;
|
||||
zephyr,gain = "ADC_GAIN_1_6";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 20)>;
|
||||
zephyr,input-positive = <NRF_SAADC_AIN5>;
|
||||
zephyr,resolution = <12>;
|
||||
};
|
||||
|
||||
channel@7 {
|
||||
reg = <7>;
|
||||
zephyr,gain = "ADC_GAIN_1_6";
|
||||
zephyr,reference = "ADC_REF_INTERNAL";
|
||||
zephyr,acquisition-time = <ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 20)>;
|
||||
zephyr,input-positive = <NRF_SAADC_AIN7>;
|
||||
zephyr,resolution = <12>;
|
||||
};
|
||||
};
|
||||
|
||||
&pwm0 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&pwm0_default>;
|
||||
pinctrl-1 = <&pwm0_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpiote {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usbd {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&uicr {
|
||||
nfct-pins-as-gpios;
|
||||
gpio-as-nreset;
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
identifier: atguigu_mini_keyboard/nrf52840
|
||||
name: Mini Keyboard, 17 keys
|
||||
vendor: atguigu
|
||||
type: mcu
|
||||
arch: arm
|
||||
ram: 256
|
||||
flash: 1024
|
||||
toolchain:
|
||||
- zephyr
|
||||
supported: []
|
||||
@@ -0,0 +1,2 @@
|
||||
CONFIG_ARM_MPU=y
|
||||
CONFIG_HW_STACK_PROTECTION=y
|
||||
9
boards/atguigu/atguigu_mini_keyboard/board.cmake
Normal file
9
boards/atguigu/atguigu_mini_keyboard/board.cmake
Normal file
@@ -0,0 +1,9 @@
|
||||
set(OPENOCD_NRF5_SUBFAMILY "nrf52")
|
||||
board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000")
|
||||
board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000")
|
||||
|
||||
include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
|
||||
5
boards/atguigu/atguigu_mini_keyboard/board.yml
Normal file
5
boards/atguigu/atguigu_mini_keyboard/board.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
board:
|
||||
name: atguigu_mini_keyboard
|
||||
vendor: atguigu
|
||||
socs:
|
||||
- name: nrf52840
|
||||
2
boards/atguigu/atguigu_mini_keyboard/pre_dt_board.cmake
Normal file
2
boards/atguigu/atguigu_mini_keyboard/pre_dt_board.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
# Suppress "unique_unit_address_if_enabled" to handle some overlaps
|
||||
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
|
||||
Reference in New Issue
Block a user