Nordic_Sidework

前言

记录使用 Nordic nrf52840 + Semtech sx1262 跑通 sidework 的过程

摘要

sidework 也叫 Amazon Sidework,使用 Amazon 的服务器 配合 Amazon Sidewalk Gateways (网关中有支持 ble lora fsk 通信的硬件),使用 ble 进行近距离通信,使用 900Mhz 的 LoRa 和 FSK 进行远距离通信,从而实现低带宽的远程连接。目前 Amazon Sidework 仅可以在美国使用,在美国以外使用 Sidewalk 网关功能仅限于 Amazon Sidework 的开发和调试。注意在美国以外使用 Amazon Sidework 可能会违反当地法规。

前期准备

配置

将设备添加到 AWS

添加 Destinations

这一步也可以使用 AWS CLI aws 命令行工具,这里不详细介绍
登录 AWS 账号后进入 sidework 配置界面,添加 Destinations
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

添加 sidework device

  • 点击 Provision device
    在这里插入图片描述
  • 添加设备的 profile
    在这里插入图片描述
    随便起个名字点击确认即可
    在这里插入图片描述
    点击 Next
    在这里插入图片描述
    点击 Next
    在这里插入图片描述
    点击 Create 即可配置成功,配置成功如下
    然后下载 Json 文件
    在这里插入图片描述
    下载后的文件叫 certificate.json 保存下,这个是配置生成 hex 文件使用的

生成 nordic_aws_nrf52840.hex

  • 在 E:\ncs\ncs_v2.6.1\v2.6.1\sidewalk\tools\provision 路径下打开 cmd
    根据实际来,我的路径是这个
    我这里已经生成了 bin 和 hex 文件
    在这里插入图片描述
  • 将 certificate.json 拷贝到此文件夹下输入以下命令生成 bin 和 hex 参考链接

python provision.py nordic aws --output_bin mfg.bin --certificate_json certificate.json --addr 0xFF000

在这里插入图片描述

sidework 作为 ncs 的存储库

参考链接

  • 打开命令行
    在这里插入图片描述
  • 进入 sidework 文件夹
    这个时候有人会有对 v2.6.0-rc2 版本有疑问,这个是到后面 west update 后自动切换到了这个路径
    实际我下载的是 v2.6.1 版本
    在这里插入图片描述
    在这里插入图片描述
    为了方便叙述我这里切回到 V2.6 版本
    在这里插入图片描述
  • 确保清单路径指向 nrf 中的 west.yml, 输入以下命令

west manifest --path
在这里插入图片描述

  • 如果清单路径指向不同的文件,用下面命令指向 nrf 中的 west.yml

west config manifest.path nrf

  • 启用 sidework 组过滤器

west config manifest.group-filter “+sidewalk”
在这里插入图片描述

  • 检查 sidework 是否存在

west list sidewalk

这里已经指向了 V2.6.0-rc2 分支了
在这里插入图片描述
在这里插入图片描述

  • 更新存储库
    这里有看到分支直接切换,不用怀疑

west update
在这里插入图片描述
在这里插入图片描述

  • 安装 sidework 的 python 要求
    注意使用这个命令关闭科学上网

pip install -r sidewalk/requirements.txt
在这里插入图片描述

设置使用内部 flash 升级

由于历程使用了 mcuboot 并使用外部 flash 升级这会导致即使修改了引脚 minewsemi 的模块也无法使用,所以我们这里先修改为内部 flash 升级

  • 删除 boards/nrf52840dk_nrf52840.overlay 和 child_image/mcuboot/boards/boards/nrf52840dk_nrf52840.overlay 中 下面的配置
	chosen {
		 nordic,pm-ext-flash = &mx25r64;
	};

在这里插入图片描述

  • 修改 configuration/nrf52840dk_nrf52840/pm_static_dfu.yml
    代码如下
EMPTY_0:
  address: 0xfc000
  end_address: 0xfd000
  placement:
    after:
    - mcuboot_secondary
  region: flash_primary
  size: 0x1000
app:
  address: 0x7200
  end_address: 0x84000
  region: flash_primary
  size: 0x7ce00
mcuboot:
  address: 0x0
  end_address: 0x7000
  placement:
    before:
    - mcuboot_primary
  region: flash_primary
  size: 0x7000
mcuboot_pad:
  address: 0x7000
  end_address: 0x7200
  placement:
    align:
      start: 0x1000
    before:
    - mcuboot_primary_app
  region: flash_primary
  size: 0x200
mcuboot_primary:
  address: 0x7000
  end_address: 0x84000
  orig_span: &id001
  - mcuboot_pad
  - app
  region: flash_primary
  sharers: 0x1
  size: 0x7d000
  span: *id001
mcuboot_primary_app:
  address: 0x7200
  end_address: 0x84000
  orig_span: &id002
  - app
  region: flash_primary
  size: 0x7ce00
  span: *id002
mcuboot_secondary:
  address: 0x84000
  end_address: 0xfc000
  placement:
    after:
    - mcuboot_primary
    align:
      start: 0x1000
  region: flash_primary
  share_size:
  - mcuboot_primary
  size: 0x78000
mfg_storage:
  address: 0xff000
  end_address: 0x100000
  region: flash_primary
  size: 0x1000
settings_storage:
  address: 0xfd000
  end_address: 0xff000
  placement:
    align:
      start: 0x1000
    before:
    - end
  region: flash_primary
  size: 0x2000
sram_primary:
  address: 0x20000000
  end_address: 0x20040000
  region: sram_primary
  size: 0x40000
  • 编译烧录
    编译后的内存分配
    在这里插入图片描述
  • 烧录 nordic_aws_nrf52840.hex

nrfjprog --sectorerase --program nordic_aws_nrf52840.hex --reset

在这里插入图片描述
在这里插入图片描述

  • 烧录应用程序
    在这里插入图片描述
    由于没有配置 sidework 网关设备到这一步你只能显示到下面的 log,会有时间同步失败的标识
    在这里插入图片描述
    我这里有网关设备,所以后面后增加如下 log 显示时间同步成功
    在这里插入图片描述

配置 sidework 网关

这里不再介绍
由于国内只能用于测试,国外这些国外友人可以轻松搞定的,但是需要每个月 $100
就像配置小爱音箱一样配置联网就行,只不过多了一步打开 sidework

数据传输

短按一下 button1 是发送数据到服务器,默认使用 ble 的方式
在这里插入图片描述

在这里插入图片描述
短按 button3 切换数据传输方式到 fsk
再次短按切换到 lora
在这里插入图片描述
在这里插入图片描述
按下 button1 通过 lora 方式发送到服务器
在这里插入图片描述

修改引脚

不使用 dk 板而使用其他的板子(minewsemi ms24 系列) 就需要修改引脚
修改的 overlay 如下(boards/nrf52840dk_nrf52840.overlay)

在这里插入图片描述

/*
 * Copyright (c) 2023 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

&spi3 {
	status = "disabled";
};

sid_semtech: &spi2 {
	compatible = "nordic,nrf-spim";
	status = "okay";
	pinctrl-0 = <&spi2_default>;
	pinctrl-1 = <&spi2_sleep>;
	pinctrl-names = "default", "sleep";
	clock-frequency = <DT_FREQ_M(8)>;
};

/{
	semtech_sx1262_gpios{
		compatible = "gpio-keys";
		semtech_sx1262_cs: cs {
			gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
			label = "semtech_sx1262 CS";
		};
		semtech_sx1262_reset_gpios: reset {
			gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
			label = "semtech_sx1262 Reset";
		};
		semtech_sx1262_busy_gpios: busy {
			gpios = <&gpio0 19 GPIO_ACTIVE_HIGH>;
			label = "semtech_sx1262 Busy";
		};
		semtech_sx1262_antenna_enable_gpios: antena_enable {
			gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
			label = "semtech_sx1262 Antena Enable";
		};
		semtech_sx1262_dio1_gpios: dio1 {
			gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
			label = "semtech_sx1262 DIO1";
		};
	};
};

&spi2_default {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 0, 21)>,
		        <NRF_PSEL(SPIM_MISO, 0, 17)>,
		        <NRF_PSEL(SPIM_MOSI, 0, 20)>;
	};
};

&spi2_sleep {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 0, 21)>,
		        <NRF_PSEL(SPIM_MISO, 0, 17)>,
		        <NRF_PSEL(SPIM_MOSI, 0, 20)>;
		low-power-enable;
	};
};

&button0 {
	gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
	label = "Push button switch 0";
	zephyr,code = <INPUT_KEY_0>;
};
&button1 {
	gpios = <&gpio0 3 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
	label = "Push button switch 1";
	zephyr,code = <INPUT_KEY_1>;
};
&button2 {
	gpios = <&gpio0 4 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
	label = "Push button switch 2";
	zephyr,code = <INPUT_KEY_2>;
};
&button3 {
	gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
	label = "Push button switch 3";
	zephyr,code = <INPUT_KEY_3>;
};

&led0 {
	gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
	label = "Green LED 0";
};
&led1 {
	gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
	label = "Green LED 1";
};
&led2 {
	gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
	label = "Green LED 2";
};
&led3 {
	gpios = <&gpio0 29 GPIO_ACTIVE_LOW>;
	label = "Green LED 3";
};


&qspi_default {
	group1 {
		psels = <NRF_PSEL(QSPI_SCK, 1, 10)>,
			<NRF_PSEL(QSPI_IO0, 1, 11)>,
			<NRF_PSEL(QSPI_IO1, 1, 12)>,
			<NRF_PSEL(QSPI_IO2, 1, 13)>,
			<NRF_PSEL(QSPI_IO3, 1, 14)>,
			<NRF_PSEL(QSPI_CSN, 1, 15)>;
		nordic,drive-mode = <NRF_DRIVE_H0H1>;
	};
};

&qspi_sleep {
	group1 {
		psels = <NRF_PSEL(QSPI_SCK, 1, 10)>,
			<NRF_PSEL(QSPI_IO0, 1, 11)>,
			<NRF_PSEL(QSPI_IO1, 1, 12)>,
			<NRF_PSEL(QSPI_IO2, 1, 13)>,
			<NRF_PSEL(QSPI_IO3, 1, 14)>;
		low-power-enable;
	};
	group2 {
		psels = <NRF_PSEL(QSPI_CSN, 1, 15)>;
		low-power-enable;
		bias-pull-up;
	};
};

&spi1_default {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 1, 7)>,
			<NRF_PSEL(SPIM_MOSI, 1, 6)>,
			<NRF_PSEL(SPIM_MISO, 1, 8)>;
	};
};

&spi1_sleep {
	group1 {
		psels = <NRF_PSEL(SPIM_SCK, 1, 7)>,
			<NRF_PSEL(SPIM_MOSI, 1, 6)>,
			<NRF_PSEL(SPIM_MISO, 1, 8)>;
		low-power-enable;
	};
};

但是切换 ble fsk 和 lora 会出现错误
这里偷了个懒,修改了dts,没有自己建板子,只要删除 nrf52840dk_nrf52840.dts 红框部分就可以了

在这里插入图片描述

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值