From 2ebdd0db61d7cb26d3bfe9d989a9a1f1e4877129 Mon Sep 17 00:00:00 2001 From: NavinSankar Velliangiri Date: Fri, 29 Jan 2021 08:44:42 +0530 Subject: [PATCH] boards: arm: bmd_345_eval: Add BMD 345 Eval Board Support Add support for BMD 345 EVAL Board definition with PA/LNA support fixes: #31585 Signed-off-by: NavinSankar Velliangiri --- CODEOWNERS | 1 + boards/arm/bmd_345_eval/Kconfig | 8 + boards/arm/bmd_345_eval/Kconfig.board | 6 + boards/arm/bmd_345_eval/Kconfig.defconfig | 24 ++ boards/arm/bmd_345_eval/bmd_345_eval.dts | 265 ++++++++++++++++++ boards/arm/bmd_345_eval/bmd_345_eval.yaml | 21 ++ .../arm/bmd_345_eval/bmd_345_eval_defconfig | 35 +++ boards/arm/bmd_345_eval/board.c | 42 +++ boards/arm/bmd_345_eval/board.cmake | 5 + .../arm/bmd_345_eval/doc/img/bmd_345_eval.png | Bin 0 -> 53160 bytes boards/arm/bmd_345_eval/doc/index.rst | 206 ++++++++++++++ .../drivers/jesd216/boards/bmd_345_eval.conf | 5 + .../fs/littlefs/boards/bmd_345_eval.conf | 8 + .../fs/littlefs/boards/bmd_345_eval.overlay | 35 +++ 14 files changed, 661 insertions(+) create mode 100644 boards/arm/bmd_345_eval/Kconfig create mode 100644 boards/arm/bmd_345_eval/Kconfig.board create mode 100644 boards/arm/bmd_345_eval/Kconfig.defconfig create mode 100644 boards/arm/bmd_345_eval/bmd_345_eval.dts create mode 100644 boards/arm/bmd_345_eval/bmd_345_eval.yaml create mode 100644 boards/arm/bmd_345_eval/bmd_345_eval_defconfig create mode 100644 boards/arm/bmd_345_eval/board.c create mode 100644 boards/arm/bmd_345_eval/board.cmake create mode 100644 boards/arm/bmd_345_eval/doc/img/bmd_345_eval.png create mode 100644 boards/arm/bmd_345_eval/doc/index.rst create mode 100644 samples/drivers/jesd216/boards/bmd_345_eval.conf create mode 100644 samples/subsys/fs/littlefs/boards/bmd_345_eval.conf create mode 100644 samples/subsys/fs/littlefs/boards/bmd_345_eval.overlay diff --git a/CODEOWNERS b/CODEOWNERS index 3abdfef95e760f..169cde17fe244c 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -79,6 +79,7 @@ /boards/arm/96b_stm32_sensor_mez/ @Mani-Sadhasivam /boards/arm/96b_wistrio/ @Mani-Sadhasivam /boards/arm/arduino_due/ @ioannisg +/boards/arm/bmd_345_eval/ @Navin-Sankar /boards/arm/cc1352r1_launchxl/ @bwitherspoon /boards/arm/cc26x2r1_launchxl/ @bwitherspoon /boards/arm/cc3220sf_launchxl/ @vanti diff --git a/boards/arm/bmd_345_eval/Kconfig b/boards/arm/bmd_345_eval/Kconfig new file mode 100644 index 00000000000000..40ac9973286f10 --- /dev/null +++ b/boards/arm/bmd_345_eval/Kconfig @@ -0,0 +1,8 @@ +# Copyright (c) 2021 Linumiz +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BMD_345_EVAL diff --git a/boards/arm/bmd_345_eval/Kconfig.board b/boards/arm/bmd_345_eval/Kconfig.board new file mode 100644 index 00000000000000..18daf441ae2afb --- /dev/null +++ b/boards/arm/bmd_345_eval/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2021 Linumiz +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_BMD_345_EVAL + bool "BMD 345 EVAL" + depends on SOC_NRF52840_QIAA diff --git a/boards/arm/bmd_345_eval/Kconfig.defconfig b/boards/arm/bmd_345_eval/Kconfig.defconfig new file mode 100644 index 00000000000000..ed13ae2be268bd --- /dev/null +++ b/boards/arm/bmd_345_eval/Kconfig.defconfig @@ -0,0 +1,24 @@ +# EVK BMD 345 board configuration + +# Copyright (c) 2021 Linumiz +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_BMD_345_EVAL + +config BOARD + default "bmd_345_eval" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +endif # BOARD_BMD_345_EVAL diff --git a/boards/arm/bmd_345_eval/bmd_345_eval.dts b/boards/arm/bmd_345_eval/bmd_345_eval.dts new file mode 100644 index 00000000000000..8fca76295293dc --- /dev/null +++ b/boards/arm/bmd_345_eval/bmd_345_eval.dts @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2021 Linumiz + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; +#include + +/ { + model = "Ublox BMD 345 EVAL"; + compatible = "Ublox,BMD 345 EVAL"; + + chosen { + zephyr,console = &uart0; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + label = "User LD0"; + }; + led1: led_1 { + gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; + label = "User LD1"; + }; + led2: led_2 { + gpios = <&gpio0 15 GPIO_ACTIVE_LOW>; + label = "User LD2"; + }; + led3: led_3 { + gpios = <&gpio0 16 GPIO_ACTIVE_LOW>; + label = "User LD3"; + }; + }; + + pwmleds { + compatible = "pwm-leds"; + pwm_led0: pwm_led_0 { + pwms = <&pwm0 13>; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + button0: button_0 { + gpios = <&gpio0 11 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 0"; + }; + button1: button_1 { + gpios = <&gpio0 12 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 1"; + }; + button2: button_2 { + gpios = <&gpio0 24 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 2"; + }; + button3: button_3 { + gpios = <&gpio0 25 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "Push button switch 3"; + }; + }; + + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio0 3 0>, /* A0 */ + <1 0 &gpio0 4 0>, /* A1 */ + <2 0 &gpio0 28 0>, /* A2 */ + <3 0 &gpio0 29 0>, /* A3 */ + <4 0 &gpio0 30 0>, /* A4 */ + <5 0 &gpio0 31 0>, /* A5 */ + <6 0 &gpio1 1 0>, /* D0 */ + <8 0 &gpio1 3 0>, /* D2 */ + <12 0 &gpio1 7 0>, /* D6 */ + <13 0 &gpio1 8 0>, /* D7 */ + <14 0 &gpio1 10 0>, /* D8 */ + <15 0 &gpio1 11 0>, /* D9 */ + <16 0 &gpio1 12 0>, /* D10 */ + <17 0 &gpio1 13 0>, /* D11 */ + <18 0 &gpio1 14 0>, /* D12 */ + <19 0 &gpio1 15 0>, /* D13 */ + <20 0 &gpio0 26 0>, /* D14 */ + <21 0 &gpio0 27 0>; /* D15 */ + }; + + arduino_adc: analog-connector { + compatible = "arduino,uno-adc"; + #io-channel-cells = <1>; + io-channel-map = <0 &adc 1>, /* A0 = P0.3 = AIN1 */ + <1 &adc 2>, /* A1 = P0.4 = AIN2 */ + <2 &adc 4>, /* A2 = P0.28 = AIN4 */ + <3 &adc 5>, /* A3 = P0.29 = AIN5 */ + <4 &adc 6>, /* A4 = P0.30 = AIN6 */ + <5 &adc 7>; /* A5 = P0.31 = AIN7 */ + }; + + /* These aliases are provided for compatibility with samples */ + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + led3 = &led3; + pwm-led0 = &pwm_led0; + sw0 = &button0; + sw1 = &button1; + sw2 = &button2; + sw3 = &button3; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&pwm0 { + status = "okay"; + ch0-pin = <13>; + ch0-inverted; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <6>; + rx-pin = <8>; + rts-pin = <5>; + cts-pin = <7>; +}; + +arduino_i2c: &i2c0 { + compatible = "nordic,nrf-twi"; + status = "okay"; + sda-pin = <26>; + scl-pin = <27>; +}; + +&i2c1 { + compatible = "nordic,nrf-twi"; + /* Cannot be used together with spi1. */ + /* status = "okay"; */ + sda-pin = <30>; + scl-pin = <31>; +}; + +&spi0 { + compatible = "nordic,nrf-spi"; + /* Cannot be used together with i2c0. */ + /* status = "okay"; */ + sck-pin = <27>; + mosi-pin = <26>; + miso-pin = <29>; +}; + +&spi2 { + compatible = "nordic,nrf-spi"; + status = "disabled"; + sck-pin = <19>; + mosi-pin = <20>; + miso-pin = <21>; +}; + +&qspi { + status = "okay"; + sck-pin = <19>; + io-pins = <20>, <21>, <22>, <23>; + csn-pins = <17>; + mx25r64: mx25r6435f@0 { + compatible = "nordic,qspi-nor"; + reg = <0>; + /* MX24R64 supports only pp and pp4io */ + writeoc = "pp4io"; + /* MX24R64 supports all readoc options */ + readoc = "read4io"; + sck-frequency = <8000000>; + label = "MX25R64"; + jedec-id = [c2 28 17]; + sfdp-bfp = [ + e5 20 f1 ff ff ff ff 03 44 eb 08 6b 08 3b 04 bb + ee ff ff ff ff ff 00 ff ff ff 00 ff 0c 20 0f 52 + 10 d8 00 ff 23 72 f5 00 82 ed 04 cc 44 83 68 44 + 30 b0 30 b0 f7 c4 d5 5c 00 be 29 ff f0 d0 ff ff + ]; + size = <67108864>; + has-dpd; + t-enter-dpd = <10000>; + t-exit-dpd = <35000>; + }; +}; + +arduino_spi: &spi3 { + status = "okay"; + sck-pin = <47>; + miso-pin = <46>; + mosi-pin = <45>; + cs-gpios = <&arduino_header 16 GPIO_ACTIVE_LOW>; /* D10 */ +}; + +&flash0 { + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x000000000 0x0000C000>; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000C000 0x00067000>; + }; + slot1_partition: partition@73000 { + label = "image-1"; + reg = <0x00073000 0x00067000>; + }; + scratch_partition: partition@da000 { + label = "image-scratch"; + reg = <0x000da000 0x0001e000>; + }; + + /* + * The flash starting at 0x000f8000 and ending at + * 0x000fffff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@f8000 { + label = "storage"; + reg = <0x000f8000 0x00008000>; + }; + }; +}; + +&usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; diff --git a/boards/arm/bmd_345_eval/bmd_345_eval.yaml b/boards/arm/bmd_345_eval/bmd_345_eval.yaml new file mode 100644 index 00000000000000..f0f289d8f9d8bf --- /dev/null +++ b/boards/arm/bmd_345_eval/bmd_345_eval.yaml @@ -0,0 +1,21 @@ +identifier: bmd_345_eval +name: Bmd-345-Eval +type: mcu +arch: arm +ram: 256 +flash: 1024 +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - ble + - counter + - gpio + - i2c + - pwm + - spi + - usb_cdc + - usb_device + - watchdog diff --git a/boards/arm/bmd_345_eval/bmd_345_eval_defconfig b/boards/arm/bmd_345_eval/bmd_345_eval_defconfig new file mode 100644 index 00000000000000..779f99b7c4931c --- /dev/null +++ b/boards/arm/bmd_345_eval/bmd_345_eval_defconfig @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BMD_345_EVAL=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# Enable hardware stack protection +CONFIG_HW_STACK_PROTECTION=y + +# Enable RTT +CONFIG_USE_SEGGER_RTT=y + +# enable GPIO +CONFIG_GPIO=y + +# enable uart driver +CONFIG_SERIAL=y + +# enable console +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +# additional board options +CONFIG_GPIO_AS_PINRESET=y + +# PA GPIO Pin +CONFIG_BT_CTLR_GPIO_PA=y +CONFIG_BT_CTLR_GPIO_PA_PIN=37 + +# LNA GPIO Pin +CONFIG_BT_CTLR_GPIO_LNA=y +CONFIG_BT_CTLR_GPIO_LNA_PIN=38 diff --git a/boards/arm/bmd_345_eval/board.c b/boards/arm/bmd_345_eval/board.c new file mode 100644 index 00000000000000..de544c927f4137 --- /dev/null +++ b/boards/arm/bmd_345_eval/board.c @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Linumiz + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include + +#define MODE_PIN 36 /* P1.04 */ +#define A_SEL_PIN 34 /* P1.02 */ + +static int bmd_345_eval_pa_lna_init(const struct device *dev) +{ + ARG_UNUSED(dev); + + int ret; + const struct device *mode_asel_port_dev; + + mode_asel_port_dev = device_get_binding(DT_LABEL(DT_NODELABEL(gpio1))); + if (!mode_asel_port_dev) { + return -EIO; + } + + ret = gpio_pin_configure(mode_asel_port_dev, MODE_PIN, + GPIO_OUTPUT_INACTIVE); + if (ret < 0) { + return ret; + } + + ret = gpio_pin_configure(mode_asel_port_dev, A_SEL_PIN, + GPIO_OUTPUT_INACTIVE); + if (ret < 0) { + return ret; + } + + return 0; +} + +SYS_INIT(bmd_345_eval_pa_lna_init, POST_KERNEL, + CONFIG_KERNEL_INIT_PRIORITY_DEVICE); diff --git a/boards/arm/bmd_345_eval/board.cmake b/boards/arm/bmd_345_eval/board.cmake new file mode 100644 index 00000000000000..386517c02893ef --- /dev/null +++ b/boards/arm/bmd_345_eval/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=nrf52" "--speed=4000") +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/arm/bmd_345_eval/doc/img/bmd_345_eval.png b/boards/arm/bmd_345_eval/doc/img/bmd_345_eval.png new file mode 100644 index 0000000000000000000000000000000000000000..289c4156f178e7051d6af96470efce2bbb4b860c GIT binary patch literal 53160 zcmZs>b8x0X*X|qJ*2Fd@wkEc1O){}<+qP}nPA0Z(JI`}w@Ao_Vyme~#s#Se;b+5j= z`j4((-E}ET{rZ(Z2LhrYE~2Qe$fXGf0s?~aFEzkGnm|E>Wfdi}AwfVu^Zmbp2hH!x z+uPecYohg?ZAP_jItyCc+c8}p+uM*?cCbzwrZ@P(p23*bU3Xc*U6TVqzdjZKDhnv_ z7t{YG3LYKPYLEeHU_3xS%iKLotx~&JMAib|H*-b>rY{r~2s2xBcq9ykY-{CJr z`tvcMJS)*KbesfVJ556ltg{VslQ4x%W;oqff6i;)I*mHGLC&Ol_dYAB$)Q|YWCi6v zviGw8XkMK*#Lvnd(XC=ug}yS+GV;7R)W+sH)0$Czb!2d(;=f$`wZfKXtrxT4l>Eo_ z(j&oo-|+{cpHWuRbu;4hvCi)5>I-!v;?1h+vG~!}oaIIG1W&uH=yA+=SJa91*&Pcj z^35e$xdNEuooEl3YTvDeDKTHyDu?$lnMBX{h*Ki=Iu(CXEQNc7aU(ns_CHbkL_ud# z0cZY85z|?#9IlhJ9M1e-Z?5wn-8uMgPC^-T8m^4?EHa<=tnokV{@*p`hy}FiLh1(- zlNFAddhdp-i(LZkvI?=GYEb@@MiSu@%N2@W#dO7{jFvfaQu=lI6@f|d!+|gN;-*K= zCO;5$O^<@$c=q^NA1Ke{NXX9BTvX*L$U3&2oqNT8*;mAdNJ`8$FD`Lp#T!cNA-WJq zO5I%pMxK1otzbV|V=Y&Ux9=DPiYdd-TssoJ-!X_V0H4VIE~=RRNEj5F+g+Z^AKrmr z^JK76g{b}BnG1#1U1L_0v3z!na@_u^_a~bgC!gXEr&0nb2pVcSTZzH^}ht)u2N(&~MX`GS6W$2DnGP%rFMm%U~c z%&?eBuJg#8N-i7K5vwva}nZ;CR3Zb-}(CsU5{Gtg3-#zauRi3G=YACyt z*EKbsJU<4KHq1##1}L;gj}p;zcgYn~q_`zz?mmx|erzCTKQOX#Ad5bAF=3E8J+g3M z159GKrgytBju)-IGdV6?Z)KK_CL6U;>IZ#Jr6T-TEu%XmrCb9}Bw!=DqFOKV<`W?1 zJK|&M7uc%9qxlM{%HyMDSJ53(qHPvUL|Gs7^nOsC!^kgSrOHUoJ}oN)`N_%OS%ccizlCmgseVsls2TYc=X(*+94HuVGAUMX7KN?~CLux}ISS(}(UvZev z1}x+R=5Uy=&e%$GE$DIH_Sh(My?)|&PIE8LvSA?zm|vdA>3V&~aSmf&a;9`|{t8_G zyg+O~r#`{w9QKV=dLJ%UqN|&WTVc6ijAU_V=wG{h#1#6jK|B*L!5jjyotf*(%~J!{ zM3Z3(28R4!VhSAL->Xf$GXVlJKMk4#N~;Oh3@RW_5Gh(%P=E`3f}w^GYvlBW%C2rfs`sCcMD+OGCe=a{JermlS?*J|QqTXY_+pa7QIem5>0cC*GH=rD$1<(gT_fU1} z_hI)AJnftNA_6o4cmaOzecOKdM9T`VyL*C@zO&ziz!+fJ7j~!L4bg+&t?#@y7{Kj& z46yp<_iFIrYbdw@JOL7Y0w0(@6+Ys=1uy+(z5Rg#fL&nRBk&{)zy!E;th)eS^<4q{ zzCrz%0VBYm$HU`W01?pOx$jC4_>B!T1v&tSzUMv#fxuURLB9%M6mS#Z^xX%X`}7kc z`TznyLHt&MK;YaK_$zP&*dVyvN8GddW&J#N>9^Bo*4OQ+@>VwOX9Ji4aDHRI05=6A zh)%i#Ji{LS?)(-$vc8h8?e_axff>N8@7v9|CxdMuQ4h_V%$M7n!j|CmE^%KRkRAyB zUG}8`K)&lk??VNWePe&*fkoeboqonW`VJ5lde42mz5t(hzXd0~3cXf8{OWUMb5Pej#zBw9W;Hvn@rwL5o-8qK6E{drR=8i z)qXV`yNnNlGF1y__!uKhU80y9Xa=!<4CAK#ZP}Lc`yahRJl)#>W%eA-##Ch8nF#nF z{a;1DrlU;H)lNs>ZK^>u80H?Amxw$73_@S4s}utX1OV{8nF>0!jC(6_!-E;CK$xor z8Sxa;mE?P}N2REO#r1}aF44KtwA2!|Je^E%X`SY8cd5_cZYkqqtC)y1qx_EhTw_zx zy%8wBoiTiiwG(X>_JRcGhM971gJHW)OX=cD8};i6oNNR3`TWvfiXvavyE{wpn8!wKEm^5ijH142Do--mJGIPLk9dKoC{K7WqAtYsPR`&QJMt zuS|O{k9siK_SiDnm(bZ|oV}BdU|Z5{K#sI*6kLn5CVMi=*ejgcoYApp)+q{Ju}w#N z2^lwV-2vN$#FV|;umOEiKVNf9HSVQ(wT12<5LxgbfEYaWxlq7n@J_+%V&m^X{CgVzU2;xEIu44g-I%?nyQhi$7fun1_*UY>rtN9|oOojP5~mdxRrtfsaE2s|+o z4kI43$SB5yAZtUUEC|h?uGzgU$W9JtF73(%ag@p+W{(fv#?XJ*KJ0kd?Xx8k&r7xG zjYwpEL8fHkm4?VU07*Cspdo}Y1oni++cDIs;~GA5Th{f7CY4_<*8?8fOfG`|GNYCu zehD}$B>ctOs>gtP&jo>cSSja?LXAYaKVLO1dLk#(9?j>#yvW4FN5WDOt8_gvoEm6<(WJe{?` zwiX&;Ty-GPc(i{QN#7>JHD?oso3xF+&JLS|Pmj!Cd%uLJP8SD=jbu=He~e$e#0u{x z0)=pM^xgiu)AaP``ifmNpgW5@vln1lD))1vzw9{fQ9|U=gX>Gg0LV13DWkk)#!P!W z$R`4&TbRtRb;Y*ct9z^r@5oahB=cv?el@0`Hy0}XjKvHrqrV*6@113GZgUe5hXx;F zuh1Mj)7{eibUhGDRjvgUGKk{vMIJ4`uit#7W$j#zvTdne}qGr;NPi{!{T6+Q+I2vQb z;ngGs)j;3i8Vhh)aB7lr-PwFiA!G=;k4#=cw=LPlM&rZ%w= zdFVa&7T4j)K?yz&Bsq+xV+Gi~_E($6NHet*$+4QTlw z54N?1eWhcD(V(^#{hBf)JSXO4!?om~(d^n`GMcVY;AF+7XbOWFC}k0rD?Yh&<}fPP zLu)AEx-z%N7G(0?yabBHJ~KOIEa^a@5$BN9xFjBD?s{ri<@#$>OaAIfs*%RZ;WG!; z%quUoERprYX~snxXG>ZXh5xTY=#Q`2EZy}6j-k!;70i@dmsw=|fm?T9KGH=8qs}c8 z6-cM4i}EX$#%|sjRQ{f=A72N0rRnL6AvhoVvuf#u`$=5)hdZi0%o>s|Hh^Uhn z7=uc*?V%BZhf(vqgBJs{LvLJtEh zROmB|Wyp%h^Nlei_xKjGEUmUr+Y|}_{kKHz?iWd?`P4@PswB#OC%Ej2cEdQ6qIcPu zyg|IowXYy?5IX0E>=)~5vfWa@ji*2N_i|LLv!r$X&<26eTV>&Cl3Mmzn)4%BB(q~= z6>RPy_F~g%u-mUWLadUwYsT>on>&%g8)W}6ic*D{*~K&*;XFh5W6&@29=Eh6Ox)^B%nH>; zi+B@4cY7<#;#(3Br5Zt8t%uZg7?eyf0U|Hg-jc_lHZ2gucqC9ttieE~KkjCc9_5^V zBjd;@vs1P$S7_*DM}c+WeQ~~2Rl5tIEz6JF$g&M1g38Oz5+IH8Bl~A@vdE+`S*gG-9H@+Iun7spt}YxNn% zB4RaC$QN^&^gg2Q01>uQZw)10s{jk}q7HGn(Yf8gfc59!%UP6qxm|D24nc~Rkm}?0 zx&aL|;2#kr6%Y!H-3bdcN(=P9SMpP_tZis*VwF7tQEhK@)Tr;ytvc*P=b*2jyWmqz zHPTKsxHtPCv)z5e#m4XrziFk{)m3=yZVYKkd=Z(rEQglb*oWFz%==3jNshlu!1B_k zw<^ybh#YRD$1W<*PeR>m*0Vxhf*;s?=bsxyiUQ~>XL*EP%6l#InwyuIV$?DqlOtuO zn*%HRYTSeJ*TD*%^Kvx6%#f5)`Fyzv_LqMnLCN})L@y=w%1bKiC65`BfLLsn$m&>Rs5@n6jvIZfFa8Xw!^Lpoby5ne*j2gx%LYv#l$ch;Q~^e!+2;s4T<_;gHp}x;fZ~ z@$uMScpA6;Z3# zb231Hmk2*PC`Tp(Vb7ilBc6$iIKA$3K$xO^D$tw)LX^F5`{LBaa$yI1ah|lucu10*s7_hF4^0pV8uBafb;3e<;JCU`DQAIt-EldAdgL zTvX{lW7ga4!dtH_YN@BhES|N2rZ2nYb!@bK?P;s4jX0e8_=Y^JZ%{tMfN zHA;vgXFCNSok>F5LB;+F$`9RsvgmW8mM1K=SkV}9eL8(=s2Y*bz&DV{AK58R_M3V# zD<>epc}s^*B8SUbNxypqb#gx>+*A$FFBAk_@zjVvD7Lh?ugBWeN^AnFJC{MK1M3z( z#qISv{IpFhqIyt0TpMo*meqK4H+sl#sM<&=ty|BX5?P1<#c}RVbyevzNbeS@PrS4o zqH!OLXHA#{K$r^_WGs=F;xOkQzxXtQ+E}XSG-sY3z+W+3Fk>H2=4IXc9yn&Yl_1ZA zd%OgW__!2@7zmAeqB0Ha(_^Ovgt>NtbT{OI09-wxiCf7q=uC?2CFiGn1{AV z7JlL-geN29(dN@&)w z#q?<8n$C^`o^VTLM_rC}3xJiLN5>40Nzzq zS;4=}8{?x)_#se&@~E3l}z%Z z#h2O5%eVwC`%XAC1fGnkdCeb;qqg0azso#;xqF>mh8w6|!^oU<3ns~~xEb9bi8ocu ztS|PIxuz)~ow!hCsQPTXD}Dt@bR`VJK}^2O*efXON0(1XBctG%ad~}=jznsc?ZUYq z&8!~my)uF|MY0;pcbP}#Kvqr8?G#IR-J*mOK1hzQwH%Lu#ccf#TdE_cK@YvH9Ak*VFCNwsongIZO3c2fN+@Xd;r? zgw<@zaNIl}2XCUYmw7jp_|-AY$N3XnPJqS7L4A;4`)1$-@#uM2nkAp^W#td4 zvYBq1`zcl?G~vEmPyibsgngJF z0GjSqF+bX86DVT^{v$o0*TMYfcojmg?>c#+=(Szj+0tsiXWS{b9{Wgn3kR8FI2p8S zD-C1%tSYMsji(*OYzrMltxuhZ%KW|Wh8Y=+BemVZuBUW-({h-~0}2%&K;CLO#lr?% zZ#39EL<%93RNgkGk#)>engng&2R!5n6^VmkoVx0RzKvrvylgsdA({jWe9Ly3n z1%*X%%aO3O+J&ReBI^gF73m{SR_npHxhkz^>SvHX3x?@o^L1;W=4N%=lr7QN@@>l- zO{BJO4;-&T5EW}BF=kQV$oK8m82p!`l1XJ9jYhZ;_r0DtO0PsyJ*e`xFZ_Xja*(O$ zR%7Mj9e|H`(xa1hE=7o*5RhROLREwM1TGkjux$Xpk1M+8rMhe&0POkobApq1w!}wq z4lWy3d=+-6pp)7vDZ#X~lUe$OnR4(u^2K{S7yVv8r$wossYVimt-y@INjsR4)EgCJ z(}mGmkrFlpd5R<&Rjx09iS`BODY;A5vRim`V?^x)s(aCWPfMhKA7c+b5nOX%7vz9q zl!C3m03y&GU%$yRO{Kh~I*VW0l&XH$s$gCo-_S!3EOIf38b7UdD)EHcf(tJ~STT;u zmS{A<8BHi|+E#FKyTT;7el>If&i9p7RY?zZHR?Gte`=T=+|K| zG1<9swT$QOm1iCKwR^qQ4mV5P=d*c(^aYBon}Cab-|`&fLM)?>?Xsv)wI3s0wW${> z%vtXg4o6}M-t zDLF-b8}(jr>-yS!{Uqa9-$By8ahadsi^JwiQLeJW3qOTyM%twCZp zucS00VBn#byK}cB$?L!k7+u?O(p?!WkAi^9K3FLX)}mVwrs_e3z!~^yC?fiWcF3jz zT6*LBz66QVN6sY>fw4+0_r_%|t7od9^g?eBt}?rSd-+~iy<#Yq(G3k+ZH8nEl6WIj z?eqA&@SMRStlM1;Fo8nt;dzufE!EI72LdD?SU(fo9J24IKM++k!i2jzorZlT86PyJ z4u>@*Sa+}co3PUtt>?o?vK2cc>}1J^BPb(?lbaXTxB5HV)d_n88{}`v(ic=QsyDUc z6yaYS3yS<}NX8>$I<}x%Uz?ok zR6J02a^zf6PRS0~n6IXOl57acO@mWn5NNxIJTC|*t)+Cy+W8oO5im?}6me`yU1sD7 zMPxeJT&K-c+W{<>U2jdfc%C7#Wn|~&NGxOg&)tYd~2uh4w z1Ww{9-|dhxN0+QdNZ+MAS9o<@{Dp3aRvh@nKXl;c-NtO(LH?fO+(HP3$=HXch!_l4 z=rN#bm6NlNUOR=~C5yfsEKBsBtn7T_b;nbQ`a_jf*9La(>1>&BVhnFwfVM2Y21FKx z-Ary_$>zwSm(fe40wgOy3e@(_@p%ix(YY9I=IdJNT-W&g?!vJHy`*{g4Z0xMZltwS zIUcHyi?Yx2Je^14%QER@9pOe7fh+Nk$?y@qdc<2vw`fnlgo=OUpV<|x+`mRr>N|Fv z=7}$R26~=ukROihF$)mYV1p1)W{ptNjdbCwxH~S$-X`>YkGoajs zj6La~_@g*x_-|X zRjMMH6Wr?VT^hvf2@qt5lCob%T*1>T8A`q}*rQ$CSkU)?&-5LB5nv9l<3N!7zz*LT z!I;Ht4(&DjU0$Bj4%)XMTg0Gq?;Ac55t!CIG0TE*9X4(IT?=jR-AAJmaD%}>8=TDu_0Is`yV;(V|@3#7syckKfj*>7^R?I)vkgpE0R(3 zP+xAYB4TmsU*q;EdK?et9sTnR&UO~A%%a|918^Ygdf-Hiw4Jf;)v(557A*^@qXvAE zNA1S$@iRx(OkGQ1#V_aAWd7nr=DH!GA~E1y{hTTngp^O!eAXn$we{8dDM4p2#45^m zC!6?ARI}nHiN6|szgh6Xkg3!#sgFO?&i(W_b;|(##xu!@h=C^5d3?(-RXGT(donNn zEedTWIcM`pv^)Pt^ho{e4smAuJY?uS{p9b|TzU?CMKMph-E9dkwRts9svd`?Q@!wq zEu_Zc5F7+JpETUraPUy@N||J5?{I0KsTkm1Y2)XHPX6&e)~q|U18->ssc-AJFf)y` zvgBqS{cb<8glOixA2ynkhlt)b@97PS zXxr)dfMv1vgZC|Z-1Q92BEa)t zC?$c|-Y5i`EN@>2A8tQee#UYOcSyY-A+dxe3S#O`Q7R)k6*M+(LE<+pz8WA`!RoS3&6!ni2Lm8d9<`!;pWnePIo(edY`6kf8?3r|Nc^ zSa)1LP3TQdb5lcMTjWA0H3(O3hcQ$I6s@^=)MuVyZtX*=Cy~4R60##MwJZ>WVx(C1 zR6+P>MnLcA;Y!h0eR9BJhE@OA%Cz*qtZViAO1D2LM~+3U90R_)GZzHdM7v)pQh3qL zjd_^quv|M9Rg!sPKls<}4p+$J!B@|)rw{(o+30&zxSG>{=cRwF?rpM?oYV{~-Sex1 zBSMU)y8lZ`#>D}$%5r)W%-F7h1@=>;>d-_msCy(_>aXoOt{3lo6gBV{nODPu_(pNU z$`VOj|F7NkYGf|J%~$;219n`V*Kp~O6NwVC)W0Dq$)UV3T$2s7_E;gU#>c<<&A9n9 z>a;{1>a$X+WpTyel2>nHt(-;Mu#eyyEfj;<1hgJc((A>lO-6D*E@_4l=Y(xln8~Tw z(FwG-FKbz58?y)TS>Vq0+{jc#mFDHnX+4M}B;lF`REY<56{vi8Is-zwzgg4BdaZEq zstlQm>~5-K+isVkkk0Hb8E9+T)aMfUP$7zsrkgfHHgNGRG~-8C3xb$-48|)CX&dD5 z4wx-H!I`@!5qeK#gtd9E_>OC2e1$GAjUe2QFtgL@KCeCrRqX}@BGQVF>tw5DjH09y zzR@pm7X$0IQ04)z_3MaYt5PBlJ-SL24pJ=I%LxcNZ-KX? zW>ez;*|zT7D)%WB#JT_uuG6SsUeBZw2zE-RnDa-fB9&^77Z3NRnvu78uDY}1n5MMi zhYCJiEiMXsQ9g#CB3}{GqXE>B9K>B~e}11@&kRs4y*A8zdEHVjw%b>o-|Dq9=U9D| zYy^CU(PQtX?Q)aHX%{M8Lz8;DTOo%#cdVe&S=bUq4q8rZV6Jb?2j$Gj+x$j@&!}RS z3`f^4>Oss{K3$^LWBu6WmJGp?+b=iE_^U&b716zYQo?AlO!81Y0F*Fd}W4kf<)aObJejR(|jJm zy)JNKYzOW8H7=B!h~rK^-fNwapg**9vhIa1T|iq9g1*TDhg{jvE>1`~uyICTXjCDD zbE3;ON94G)EA8AUf46&oVh583Ne1|>npGwno|kSXU6F_lBD41P7FY3jInNT!LtIJ5 z7v21a{oZnTY5IqrbYE&+KH}}yLj|gU)=!aMat7Jb(6_auQ~;8QvL`9|V{bav zDKKC~ROPK?XJ*xq3M-Lsmg4L6}uTjZkf&YPbBA8g{`|D1&Fb_18~+I|m%xziIG>woh#w&qlJX?|3j{EV-d?wFMw^ z6l(W0Yv<_*-Y%2{lC<)Iqe~-fQ_hlxsio8~e9v){ZL+>5iQuPhk|ZTvC6;W9GitCn zY&Vf?GHxp~_UQo36+@X4pJSzPvCX1Xxn*!N?DPRGT=jDC3bL792-9{>t*(%l`rFqt zg>lL8Vkrrgt+tTL5(z7B**Pv!OK9nl4$ii;vi(hak4B5(Io6k&q zz`1w-fiPfv(K)$>kuo}WJ3{ch%WOdi`@Ix7mLh8PuzyRNw}h|Sj`K?xT( z$Jt4|J$^x(g*dP;z~>(nK|vl*HYoJ z1}PWq0I~fb+o;!cE4>veAHSb{2OU9T3q1w)ZS=u_iPUq}k3cZl%~sraKQl)aYXr)y z4_H`6hH(6snUbHH{dy4GvC8%ONvVYqo^tgilye2Tp>S#a``~C*&|iQ3?k6fstm2~h zNO%>e*a};1R?gM@niijV2^{Uln>hEa{7rm+lojdUIB^W+A)Ka;5P5AE-S{Yec99Fd z8lb%I(dSU@BJY?jC<$kVc6=2W&7XO6`|lCHk&c1G+7US%22NHeq~RJ1kK?EzK@DOI z)F9_ZkZzb+Aa(X5incmG?|}kSSb6$*LGr4AUv2aZ0Z^rFfW6)?Y3S@#Yh_+Q(t@~q#a8w zqUJA1#t+5PeEu3=2cAhwZ6A9sEbG2$ZgC!^UW!3y@sxg=K%riMNhoFHXW>YOXKoW1 zOU^O)fo4Ph{y3crA|^SY`*91+e;DSbBN4ubp`+4#6|oz1K|(N5I+* zA>KDhP;n)8xW4l_qv@wPCX_G=RrM+cX85`YC;o$2e*h7IdBf42zcLXLzh}_o-+S}jEuV^&{s!? zO11IB6>PRcl<_ytah;r>^WIU%IxYDlVG_ckDc>&4`Z>E~40N8@G#&lTGf(suU@s$h z!Fj`*msTiEUi`Lfd(=OOCh2@Zvy95pW7EN&>`G{8CpV!wyPp$Vls3Y}5v@H@q%fR< zHfPBcAc5hB!+GIi4_)V+cD7PZsT!hQZz8^~E78FN+LN10b)eh2AoO}I5dvo@nVLo! zzhZQqNB>0HFS1Y`L(BT}J+tZzgeB(Bnq$ZrSQ80hHmbJ#Q{(KZy#fx^=qv=DsB8Ob z5P$q&5DVkVse;b(%l#~YoVlCVS_^EHNYIkbDbW~HDDF#3e~dDkGS^T_%P#Ky5`=eY zfJ)ds+DL`iabT~yevJO#xP+Rjpto?E6uclm4Ey60g z;!A}vWMqP;#hM#81BAJZXj0RmLnP&ZGA;byXFAw2BFRcgb2xM7+hrX9dN{cJs-1IN zBUEpTFlau(0GqVN>O&m*vlN@RtG&XAJq=FZ#^?`%9f?Hr2LQa~9WJ+>Z zQCTqV__K!;kr-3LSdpwd#azc^RSv7E-ksN1OF>p;KnM0u-b7_tiGyWX0x{LnI;rKw zBP!f2Q15-xxXFFZ@Jg^uxGwWs9Og^Ur!F@Ipac~R*)WY!@!H3^q;}WXEN4ElfI4{h z4**9VU3qpBGCpvm?AI|7Nf#qN2;CQ_FY@u#4?gzA%z?;IglCw_OgWJ6$o@GuZCZjb zuE_}+XH?)z&YyYEe$PN?SzSG1xH2Eqi0HEdR_sTHPXq3ngyg$KH;>|UN2y4S3Qt8r zj1cXbq6%kBIbX;*-L$cImEhwR4=R6t?$)1Zf+@3Cgf^^}2%u}r%j|H+)U#u@%%b$|D6}%gi zkY5U0#g3q1DOo_!#_PozEytGNcP24?2e9#a*+O+yiaY$AUkUIb=r~si$sN zA&pAe1TZ~7FZV+R`*smUjxK*Fy$ z)l^^peb(a+2L`Z0`TWoA6?B*&87-M+da#n%tgo67hT2ZL#!|SMgyPPBh?Aw2+Uzf1)8B%XjhV4_BE~y;A>;&7k zE2*RG!+y)r{tA=1u69WHlA_w-gRx<(41;^lH|kbJ@=OWN7XluRcos%+_5Or5#9Id0 z5EQcn7kf|aYgzau#uk)nniC5@W6*6!Fy28W^eyK>C+HaZls~0{^U=$1%IB9JEyhvH zpWg%JS8KP7;h#wHHvx{lynLd_%iNjR`GwZB4c_3Pc4~%+S2$q5T&4{aX?xRJ z`L5CoJ`f6k`=`yhE@aWdAZU)q7Zj0JQwGGCxP0~emoa#<0z%<3pvV}872CElrcgmM zuaZQRw3y3c=(KCzAy|&xk1A3ceA1}yE=Dr7ik0OhQ-NS7bSpOsL7ow2b4K|az=TCp z6c2h@C?f=ZP`}&rO^djh5#LBqMcO^)XYbOnT_QXX0qX1*O$Q|FM_##mW4?!vnWV-m z-FWp<-ytsvTnN>koY~qF)rTi5q9DfoZPvHCIZTh$BhnDdk=;+4HakAVt9N*8 znuzhfm`g@JPGG#9LIt>-5BCz)zVF%DN{NGSEm>GR?j}DIy_r|ZjJ|I9by_P`7R9I> zgc-`j1(e3m8n700A-kk1$e@CNM=AR>K)|eA4@LM}N*w0=;%KBrR^cX?q%*4tQ7g7; zF5+W@aF=Af#Wecy)~mZ3d>~MCyn*dbT1(=On;@0``=VE3Sn<<6+}D01lyAN#&=UOB z{OKU@wbbw`RQB{79QrlXh*G*nrDJe-3m5s8Wy96k_wx^Th`5eoX*Fyv5~eoPC?$$x z8-%olVjmPQACv=2^5cjUUSvExI+zx(gs183f&&yFc6F@(!qxG4XFHkJMkS39oXmgf%K|4vmk> zgq%HlYi}KRr)l?4u`Bk7K|A*0+-9)K6ae>mR+Ig29T7XA5pc7V9~l*Ge%MWA3~~vU zYvgl-Z^GD8y0BY=Ch{J5E=4m`AlmuR-V+ z6R40xpGb2T#$-$CIwskbt&rW4$o2HkVMwX{&iREwFi*xzNN*7OY4k3Ta()%*KJ9|`sQ=hT|p)w*XoRFSn$!S-5d{C_nt)5Bdu_5N+`#tu31Nr_3-~?0pI3M0@*}SRx$6w;VPedCbzf2ep^w%3)ZYc}mVahh6%IA=xBSR&L^k8;Q1~Ob zUGIBv3dY#jkkPX{zo9dt5xdsK?4D_tU8|LhkTS)pw-662!48oHz};WYY+{V31{t9w zv3`UezzsZ1K<%+op6U*^!c9^$W}#6cEDh>UT?YJLBF9Lt-Ipo|lWurF2cKiSs7-~P z1GtphaT1mo3pfv8;zCrGyspXMbNW^0U=9T&ILk}SQ_`AswkktBoYfD+a*Iq6L_xlP zmW*JLXp8K#8Isml&(jZmH|-v=j^gCn3x-+XVw4v=yLG#wfC68k27fJ--%VawU_)iburO7gXU(Cbv*mZ{WY-b3CDt)K! z@-DOm3|UX0zFMX_pGvwqCFu6!(_@vI*J*G32?a;y_ zr=XH-$(NqU2{6nU_|h{=95F;nY&0%#*3FQ%isi~u5VP3zJOz&^rh-Q`s=%Ars|kS* zvnxt@Ti{+h*kkY%hx+CWCy$kEBKEvWT*Wmb33hd??YfT$sO|e|N8X((wS~r$ZaQC> zC%v7~irRvEA#hi_E3yq5FHx;WG)Lg-J>|u8>Gh1_8%#Jw|QjjcpbO z#4esXdWXdxJ0YA-T{2Rj$8VfXkTv6`E-g6LhC`u4KDjC(DQHpPEs5{IgLU7;y1u)p zgQaw(1FBzm+G?e+HHD2whxYZ962h8rjp~%;9LB7{QZ%5+j482)F07LmkEq{y^%k@? z9RtZ08Ftq~%maC-=ik+2KF*LWnxgpOeE8qPP=CKNdfX7AZ4`fzmyIG;9`Mx)ZuWS- zQ!bIX6!QiJx_#Gidv`d#qpvmb3CO`p^)JUATR8m2{rhc&Me!PyG|?v9_?*zWEs6=x z9Fs>^&EH&DgRcPtg&e z>U;MIvebu$4ud2q&z$l%nsyulUl8@24n}wE*O*#ck~*|wGoOH{ep*F!<(#5H7db0K zMgr|?ta#7n`?%Endv)(sS&}*qt1?!gV%`*IFgSc*Mh;@2hS#tWL6ZZC?^`>RQ259qSh2g^PQpspY(z`;TXbxJ)>A@vRBh?hH{v^i!5viC zTZc4IO^}*q*YKrOEji*3#R>YH*fVFDYK`X~kP0#mBsP`8IiT_zm>RCkk2Ia#>_v}k3%_e<&Ah*yIFn{75m7wM*!XuA}%%)0apmyeL`!dwJ*s*=4 zdh{j?y|K-OSa>SAG)*p74~F-EbA=ssg5nly`XtBny{>?3hSJ~%v!!(T4@ban|0M*S&ZPu)TY$L))C*`?ZYy|j+eTc0x`FJuHF)^LOAc|AEaD%Sw z^rqfRu-d=(e@wK)u-IBbGKRm(3D7xnpu*=F=++_~P^GXJ@+mg|>ClvzcDpE4fkzrH z@H=jW_Lf-vNKNHd;4Pczn&7U9V3sCWR#JWE-`(B7WX^O*BAP7GhWV7dx6JbLp%OS- zX2#j+GOIkx6A&HGn@5v0glZ6fjtQ7$DtG*-KBZbE!M${0h!b=*<^`1@K#S${vhx6e z%I#1{kKuTA(UrtfMe5th`p6UhW98W1bkUWc+{Tq?YW!Cq^9OaP6Gz6u6f z=TQ3zuun3L$I$^LXS89xX6A&__)B!lgGbvgt{+V4`2gxkIaP#e{aKJ}c`5T*eP5PD z)O?P4`ZtZ_l&#yZFz}2N+;=_MH{E}>uV71?m$>SA6^H7-+5!R>Vtpc%?_)&2(q+sE zhu!|jYD@l&)23M`UJHB*$p!^*)r2N#JoZ^VnC+u#q+{_^wdID%LfD3aYJIA z#AdME{h&f3_#W{OqH4zaf|jFBa)=^5<53bDbyGT-3&0sdDneya!6x?8Ml`%>XF93Nd|k_isZQv(>}i>=8udLX_M;O%3;5Z%yM96DOH!E z{n%Rux&BoY2Fb@^1b&#K=3%vS!^=7pzOzJ)aXK9r;BH!1SXc_+xx=yR!d5pH7vUo( z`<9{)V!Rs|H({rO>0%tpRApES&m<-Pdt{RZt%S`xsUP`0RYBVwY;D93A>sN1(>BEm zAJrPvFcp~}1O4eDVZr1eRl!^^;+L9ovbz@BY~81JUS*lr6kF>%dF1xc5| ztns6m978$~(a6lWS~f`B2ZA)cDZk!d>>@#!F;lO9p`ZluB=Qf*htftx*rz=+P-(K_ zG@LIX@%cB>1TwiRD@%M)D=Y0GAMsBDqo|`IOI#Q2HSpgN`(Hf9x|4jvcf#UksT-a; z>d+SGGpu#`d%V+o89o3v^oIE5jIZU|W`qXsJP zvPtTSBvwzbuXi47uCMM@bU4M3aG*mmG}G$(4e0(=gBu$boW=;bUN9=Rzp7SFSeTA^ zhFi&R^dr7l(r99y7I>^fFyMW9W?88Gh0WECMZxYI2O-+e<@ z=piNLF7TPZ!yL@Ys|2*MOu?AT>)PnuIOnD6!2Sj>kQoUw_566-(&d#rLZ^9z# zjzYZf9VURjdGWO4xSB!2(xM8u;R#@??gjZeVIT|TD^HCaJ-HD6=&)oE{RX{D=*JN@ghI+qP+K~!DX?4hsui+uyGOkXJ+RpN;rHxN6fqMrCzheCdM1~+_`nj(p|3f z0+vz?>7bZ9k>pDfDrBr<0-W^uE+bifo>5w&@cAl{^4Q47XUoktRrQ0+I%ywa%d50@ zu$(gFc2bWtKb{3RXdk;6-1c)Uff5dOX=n)7Zt;PF(1eO<{TmTe=O|p*?al%>hMp!6P`$bufS`wt%;R2K7 z1r2S_8&ZNxG7PWRjBZ_Ag7sf>YX9+3cXhxkVEsQ*!^f!6J zU@e^l~FkF7XHV&g%0k?fy7>s!o8x}n+` z2h;pUAO7F6U}*76zB(@^htX+e=xbld_^6e1Z0&sbLeUu^fM5hV2p&3#J`8q=<~E@M zjE-vujJR_pG$&ZSyM|B}1E!EZ90UL7GqXPP!kK4QCK8+JByK2gPumjkf|Cupbdc_d zU1XJ-Wd37J`-TiPA#zM2=XOo_G=E_N$$bfn`X5Z#Qa|4sXcZ)_)QS^&!>CF>)Z7%h z5qg?Ms)&lF#C-6FQLopMs}2S}DjT5SWZz$WDCWYL6WYpKQa@HB5%wh{a~Blt$z7>A zrfm4S{&+3Q&!+$LCS4)@W1BK}9eAXF-hauw>q)2E>gYFFRtvheo<`J z3x2-RvB?8H?qQgv7MEd|g|$LhQqC~jLUXzsZtRrIN*Y_mJ&9gs_8qVr7Xq){D+cg3 zPHVSSa?x?p%6+LGR(VA-2|EP(q5Wy{89db%j#nE#ascHbAHpAi2h-$Sye}389F763 zJ;hImSyNb;)6P!dBGHxA%E@0{@d_ zVv(60Wc2n>c~QZZO2mV2wlddzuP`UZ7H>Q=X$7#gOJmOmN}UQ5HcB1`o!33uojUXi ztTPw&u*WabMwbtM;7n}%+-k^T##|8*F77yd%u1@l{~$X^Gn`l>av5S9i% zX0;mnsfo;Ry?S6!%i99Mb!QDUTD-~?`;uX{#%)Fr@^K?T#!8kM2w|$#Xf$=$ zDk|xcQu2tgif83zwHnlb(Rs7;2pG!Wwe@&+&C;ss>dQp80rgqstOCM5oKuMOUKly9 z=@8Z)f|l1Ked5L_yc<=dsQmb@{YYDv;6hnO(p|gu>nIJ>7n9Jem46&w&+~HpXCTdm zbwvx0q{*_`D6zeN@(iw8)iv-NY=DJDzqfH3cd8t*G0zu*P8Min&hNG4Bp<>2idG>u z{L+%E*1EfHijztj7C<|^hpoq(O2!KYsClEKUk}jt&H>BrL)NLzQjiQblaL@l1QTMZ z2F1SW8lxd4n+)A!jEsMK)8W*5jWwikf*t>As#Tf6nKQ zm8?l*gbyAaK{mZ;!Bggi1LhU0;GCg=0#}>tsj`Z>mlHBz1xK)E_*+I$0l*_;PJ9QD z01AReM8HEjV%aUr;2)@+v^}92pC++N`+n2NmFCDi%qX#=XCcbpN>mw!h9yQ42iuw` zn(KvKE($ZYQ;8XBnhp8LX7_kFD3(U0IV%^e?7Jl(63SjHn;|JrcSW$^z*vWsCTSuc zN+C|%qt*g7K4gH2Vmnt_o&YHex<8Iv#+xHRGiT%vnaT9354z{n-Me3vNJZ86qhBGY zLq=JOFO)kP^GBwiVaX$c(d|8m^^@LZ6oCr1<&2I;cj^+$J18AX(w~V7@y;1AZ@TwBcAA5>ocf9QV|I zY^ms0-mFKpPAfGij=J%lg3q7Ub|5O+bi@lVru#Fj$_(OYdueV^ia(Ak-gS})?BM?+ zHZlN8ae-w`*r(NtkFfF?q0z18h?MFpoF^`M!DiWIi1#^B&BMPs6)Zttyv|%5+f=ED z*$|V^Yn>3ZPQS+J)2-*yT#`!vyIoP_6==-5hOBg8a`z&%T6hqEtKmjKpL(LA<@Fl#AlxOWk>OR7y zt571Gsl}h=v3w*u;s8QN#X-(v9%Fj`+O90rHU*zvu6`Gr(G`F0w0{f9prJG+px`vL1NTigH4P@Q#$O7i6NiX_eBA!b z*32(At>FCz3BNb?uIN<2_z>~ED+8WJibWVKXtIBBZ=`eR*y1Faiuz+t$ zc;f4?xhi8`JQ6_<)yw&nlD2uKm3spq-5p1u+v59wf0=sH#sTqIdX~l(7-_eu89v|z zCtL$Lru>Lo3C0yKf!mBZv&4hQHa*5UbH(dz22-7t9{*9Em`Z5{hwK8bk_M|GfMe!>o*g0Q6*5d~`mm=V0q6A~-QTIqOqWs4or{vrF=u znmWjc^5;8t&jo<%Rpu;C9rqIY3FZzYQe5lS(TEL0n5baOSc)+`|6Cu*Ku7pl%U)I2 zcaH%6KRp4Mwk1Q$mQ=z;3iuE?T9#p{gO>HbGCVosl@v_?I=82O>&1E|BCt9kpIVQl zJJP`kFOfS(9D9ef=3wp3SXWtz7(EV2oyFZ@W5b@kL9~G;Jex3ql1TqWdbBZP;{7l0S8N=*;M4s&qtQrQ zzVHJFbIMW{-1eP1c{BMK}%M%~fG>VrE|dyF3G|_4arfBEUvO$=#9-O{~(MTX8(iPb}ETDVmt7^Hd5l;5bx& z;RkUMB2EE1Z&jRGN`*tQCvpdyt5^a&7Q+6WOy9rn=9(#~l-=7H7*$)j2nB$>+{aWX zUZNd4dcjki|93+;caC&v3Qr|SFKkz=_x?~P9*LF~_9w$oC~o4xZbbfVZjzRkWHgpX zah7Pl>688;n_Y&1QjWv*!-X?p1SLRb**fVv)o9Yg?HuUA;+xbirXgA@n5MBVJqrwG zW854HC;}{ugmgJ_K;L&<+{zklWwT zu=i5U>x~ztL)ZfNYMV!(pNQpY0slz@6$CPG2Bq2r_|C4j)cSli3FtgXwTmFDRz$`- z>d?soL2D~Pb?)3+#VD_4tBvjil}N1^c%Ia7XMcHhb65oTx9fM8lw$8V_&U(<`N%w$ z5=SrI7nl2w-Cq1C=kB!CzlT0Rt^C+k5%DbZ@bxK}<1G{a{?(BOSAgkUl?@KnVh*rn zWVa7t2HSI*(k;{pG|qILM%v}VyQqk29PTRAP(e}+rnwgAZ6=0}opvu5nRm4-_T;fU zlL)6v63cDTD6OasqVEPa-p`kKdzr#(cNc)kdIfg&m}kdEyqNC8QK77yP8_VD7ffq| zUx1QhpaGpiX8$K7*5h%?QFzr%nMVgEaNSroT>VaE;5Yc zp9l|=PHIY;BxUM+WrO8?mr4mTWJL{V%*m)cM~?=H4FQ&4r`c4?x=%LnRNjV79UOI} z(E;y9#pOZ@}Z?()rZgQ=arf zf??!2%|le3#yN zu_DN2E^mw@Q%GnYA*nXY1!#((Vt?L;XzNWJEkK4I9CcBm>LcWa$GfOolN=xgGfEhn z<8r-`r3~B5{iOPTAQWfh@4A zk|t)MOk#`f1SOJXa?`+_mD7r6!AXo*LEc=zT@9fAKQ+jJ?8VVx-$a2^y|9$?r z$&iWlO+`$W8v+Ju@t(8#Cg?WMikdE#TLX!yAZ7=ZQX@HR36(c7^fQU0Jb1~27sKm! zY9?nuAI9eQAbeB&VW}D5ocQk15bH0v3(Z%gV#-^uWc+Q=@SZOZ;?%Pf00{k?Yam2A z$RE-1_4lfTTgS*mOms7FGB$VYi<>@vB5zJrL=?MzRVZ-cW*nD80EjXYYxfzgiAoFa z5rFO(qF(BC!|m8pZVZ+--BUy&EOnegN~j*ZjM{^bMo{D8j?<^pCVD2g#hp){<#Q}cO zzv&GQWT7Nn^09!qXQ%@eT(o+%=Sz4lI2B@j0b!)TX$Vl0Kw%z>l3k`tch5UM_i4VI zV}!Wv$dkByMG#cnQp2>7d^53e0S}t}m)vWd4RTA%NyRv|%i{9r>n{Gz^m*w7v{BYu z;a)*+%@|~#e;E7gSc4us3qy1B^}G4*Bt}G4ZZxhiM`+}`$Jy$?kTHN~%)9Z*srW!K z#BH{9vWk4~M~Dj~=3hiKj-aw1Fz-~&m=O&p1LzKHF>ipV0C+d$4w@QTj9gV>n7*GR zI>^6c9AS+|Gd+jexBdaEf$Wm}|BQ>yk)axmN-=e0qn4iHl<^-dFw)k%Bu4*H5lwlG z1?`kzk$wYL?Y|$ayJ}Q|qZzKTM9tR7oVCvTY4MEF??Gag=%K6Es~0G(IhmVb=4qCq zt*$33Z4GME>^Ub5eov$^k@`eFd3dzh4E0Ud46k5cAcz0Mndu;ZDKMTu6JZga1ao!$ zQlhK<H*jFKu`;FXImr-A9{((D3YMt(%nj?s zN7AXc(QqLwdTc7XGUKXik}imGgq;}BO%4*li45V3Q8!fLRM9=?_YgL{H-E6C zi~Dj?71h}j-<=tlai3XZEK(`y)+T_X0y>=cdVmSunuL^t5KC~tn7B|Tr!8i~8TYR_qHf)RJ8#{+kxEI&Mb`QaReq{y6Vqu>1C3Su*9}FIJc2f6L ztzXQ8M?76JD*$eq zZ9Jb%X@5b7>8X{gj3I;=D7FTL7oSQ>LuzA<{+NRAs+BQKzcg9?p}&+DRh8plkd;LJ zP5>f~R8d=v@>)RTntW62#j2EFT_P>wSKg0u6K#M2H#Dojl)rYm7Jnh5f{EjQDJ9T` zpsY(DX_FK`Gea%K&Hs5hzSmn+6;!T&$JndIV@2(dn}Zj^G);QQi^qw64;Fw0zq-wP zwUISWpFUB5*^2!Em2>h7%!@}XAvTvv;hm)=i*f8R9z`?`80j|2mEf>`xz!6a)=&{M za>(ONr{b4awWJ^*#u)Vo;?>@&xyXOI?kp^~eyrJQ?6bqDQL-c3mfWp=HQpfzoBd^fzl9SSA@}44qZLpjzKDn7b?g zKx9e19^m`{ZRRfo9=Wl|@zMppY)L)a05%010d{3jPF!V7ztE9A^4nL5l|AX?8|HM{ zWbGiCR^EyfX>jM9tOnO60ES>uzEq6I1XmBm6l`Q>dRESZDf~6<&7itan;T$Cduu|$`I2JPbmkjB1$O&NrZH#GvSg$ zv4vIv2X^3rF%a)AhX4FV$Z-I9DHL|}ZKqiF-n9T&5Qn-{0)8~06W#gnOD2WY_X>*c z3m*Lwg6e6aALf@hm~qTA&b;yMfO;7|H=aTOW^MMu)d9EKF3f(6I-%kwH8I>bkC0z` zK&_a=1n=9`h+ z09@y-_Jv)0sy45aN#Q(-`**~p)OgDLqKX7T`H)U3-BZ039~-Dk%=W%`$rZcib01Cj z;NR~g^M1DWN$%-``>z2YY(`n_^&qbky&^Lq^@^)23~*taJ7$_OA8z(xC+Np2N;MH$ z#T6;CB{YyW#X0+w$qoY;gYmQaz}fRCxjM#^GQ7xufgpa)OXZP*yS!z1*-_%_L$_8P zM18k)c3=~kN54cxoP-%k%Nx93jJlN#dCS#4svUJ@DyO&Q&On!vIgJ|ILwgbfBbHFR7K}t3E!~JWfB17RDQ2Vl;65bc~IzM zr_kj1=@_?!xqP8C@F%4oi_wy}S39!;)1RNpqdo#GPWR6RCLXWRyG6FTIV2oUOrDBY z47LZn&);SZqcWkLG0%GfIY}GfZaBmGD*DiRU-AM-D2$$rrqkgHgXJw(5g6<)6Swb) z3QyX#bHHRO1&<;LUy)XDCMp#^4$#XL;nD4-Q+@z2%KSkaL@f>Ob8>NMbpH{7N}(>7 zf?N-XL{;AbTaqaxSG|>Rt#KVAL-@3qe}40|TGcJ>r8DOlaBZ#F!+|WC>xlgx7NSeW zk`{bv*5hQogKeca%;0{`I+oUYokX65YeA10Pnfm#_AFnMxen$^*l626{w+U_$Z?2w ze>F6h_Y8Q|!u;?Vc|g-+CdAS%*B$p6n)P(YgG{FT#q}#KRw)Ip&j7^{Z&Cmw0_)jQ z?(+HP!db#AKD~bWYce#WC?@Uo9ZOf06CfVf%o*m?k7T#|oCV>%J?8qHA>p02PBowPN=A02e#v2e|9$}~R@Rb~7XWr?r ztn=%+Ys!|nJE3j$a-)xS2mwR_ElGgwlZF^UN)xy2rJz-I>XfTHu=H35mu5i*{4{?f zR&2|Qxh28{;iGSbGoT^=@jS>Mz29}}91}fxXET{$LXj(XQ?`6`{UEWUq1h=<$>SML z-S|M*n8|ysa1Gfj?%>$e4>od#uyuZZ@HH&5ktV1ZXJxS6Gknlg{GD9cR9Ile5Law% zlZ12O?0O(6#(pQZSND3Z5u@5bkMHZQW6iRLbO<9q?7#KTY=gJ^hh1@tQD7}IX!y<- zFA4(N*@Y;@{u9#hLxiT{ILQmHY74W!x$QdD$vqz_LcE;Bg2<2y%hJclFR|>Ys-mC# ziiR8ig+Ukdwudy1Hj)`|5ZS!rIM$SP3oW-92>>5vA=~AUHcI)8B|@6p(@yY68RG6& zW~t)CG4&g&l%rFO$#+zQP2{>kB8MZ~1s^N_*Xzoy%+18sEL{ zeIMUxgd7%N?U@6e2W7&J(Y0-QZqec?A_8RWCd46CJ7{e?yBSsGOT!=pgA!+)(b}ZS z!_#;Wn0h3QTcXdwxw}GGW5z3#{Yn9~iTU4pL^WwgQNA_M_S2Tr3AJWlS|Vh46`Kq3 znTx1WFfdV%WZ1`MlmEc->rqR5UU(~Mn^!@p&h!dUh4udD5v$tTPxp>ajh#Bq$h!G6 zAZY?9H_GaKmxPMIT+CRp?tjd{AD$RWUctZ?b&!*V$F9}qj!EhMT)dWly$kEtAbQgl z&Zw1bo!B{SXLdQ^GB2_;0}^?K7%X}PO|`35P` z+Uk$Pln(^=MsT_TD4$Rd%$Kfkk`3+X|gYcg= z%&&e~(Fxg}VLA2AE{?)H`o1~qbxEnJ>UZkKbJBM`2_tTjv*a)z(5|N3aE2jDWm%Vp zEbPFxBG~}VMmCB~k1TJ!@&r*6L=%MzLX$`H!4*5?@QSiev{n;)`b8Kis>7{xIZD2Fmvvwenf@&_ToBG@M-mg(Lf%I z)g}Gu?J~5}89)Nj5h-rV^pUZcjr+c6vA&=rHL>aNcpWL^|IaC) zn5wN4qY1LqU_WC=JadIIae+BR3C~0)0Z~(t7*{b)bNEFjt=q~?#r19ez&F&dD;M@9 z9&6agZep^4Nn!VNw!V3p^PGq_7_29X4BiG6Y2tO|_QY59L4CQHWh)=k&)%SFhK5}P zPPJA&2G=M3tbJlNOXJr4zzyz9#&`ijCN+9Y?b9xUv8MR*p5;&(3dGb@TzI7;d^-|H zr2X;GhwgyIow#nQjG>#i~rB2Dc@rcoYDwWFueL3=Z!J z4k>XyLZugA_h-ZCfdg4`DN<88QYS6rMOXUavb+q2^$otUEjhiHsY}Nf%Ktd*3Vl&y zs`hl*lmPV-t48xstA#U5ywt!RlI;VhsGm=%QAOTv5ySWXvnW3ee=m4+thWqCh#7vG z`Vu$n5TNzb9HY{V%pkRNv~kvA8Ne$w6FAY-=B`?-;D_% z9YzjQhKxzFK(TW=ZjG!hgFe2HXQU3pk$At2FUN*+N*IR(0-vl0naF3jX9L}pqC0zL zF+4MTHT_?LANWL~JZBc0?KK#%>$USCV3}44^_X=3`sjMah|Zm zl=45$DLSKBm~MB>Ye~v^55CCapySK}w}yNMLf-F9zn7%{@)MMaMHnS0 zaqOz#dk`*S*4#OGD(%w=NqaL6 zhq7O4{jR@eoFfO{%o{6QJrYRPgPmRd2KfO$xAtoGJiryb+1Hq`XQCQ%3CB`(6LBL4 zdM`PQ6;MKo8acXdmGjd-@VGzo!_&(%5D9*CEIvKoCU)HCs@)#Xx;8Bt8fB{6??YPH zmgxTYu@1)j7QBI%Ds~Qor-K`@MKEGh{zA3fbPs=<3>z0UKyMYl&zAM?ZBdc0{%*Xu z5|aLuepCzrUIylg>SbHxnV`RJ!jklZ61Ypx_+zR##-Ml~q9S5Ze}```yaV5NT10^T z4t`fb)R$1^(SE6T8H6!he~*A{dwrDY=ZA9{o+y7k7KT6UQ?oTsH73Sdy&u=L<{#$7 zuN|orL!&xtfxsbX(Wd;_b!YC^Z-%qG#k3myqE}JBE0AlR)LrGwF7tz5$?R>+EQe)S zYDN+-N@b=U-;YbWmS>)e`@1-HijS-3qj*c$(3R_;UZ=RRb1r=Mx>H*Py(`;Z6g79rdFUvm7e>dcj6T=VYAc^Vy?5 z#5^uD*XvbjQA_0~SAMG0WrLHyzLdJ|b|0LU5KSABBYnu}^!FSYrAQ#qz=I~-LR)Df zu!y7O7!7&%jzcuBO!>|v%) zY#$I^0MCjHHTsKVRbp(g%ewJKiTxxx_Cn%Q{z4|L{kSV((4t zcl73qX_?T9neKSgUWq&{41*XnSy=uW?3N&~*LdGzvv`C5ja#MBAA5e}H=uJPDs(b- zK(hPmNyUX0U*DyRd(lF77B95()8hp-X7`T-(&EfHkZt8f=WU?Uf4_>AV981kOa@F9 z4pot5?7yS`iNnK{F_@M@{V!{)`?NxnMY7S&N6#>Ru%kj^Gre=gJJh>&4~g7 z*pG`i?Ilwr^M{6^GiU+(Gp#{LA7KCBz=soWlnpTy5Ha$7*q_NoN$PlvfhwMxl1qhJ z1A9J#`)rDUwnIo$OG5_2^pCBQg~jK+i7z^AThstHd5Nfo><|(^ux7C0B=f4bNJEia zT;qMe>aO+)EVUic2BCv<967M|%Bg-G4Yn}#T?Y~~k9v288jaakOs%^j3Gsl!+3(C^ z%hbumLl+C=KNPdT7|kpmw9CbExoWjsh)FDHcBC2hD@Vcq_$=TpukB`dnmDZH5ps># zioeH|Ya}PF)+PQ5k6>A~m`xzVXV9kC4+pjLInA(Zs!8?L=aTel=x4dxx{<-&)rL^~ z;R+)a;}#ZmM1U_SXWKi8qy4A~q4FXvZJlMOZ8hR+x-9%xkq8+-mf>LZ_rr0itt1am zOJ#bkV89pPY!l5DY_CQe7E48I*H~Eo5`6o=3qO)g^1=xc$taWjHrq;eoN$m9-}#3b z6DJS3;>=7ICH=Z7@}VjM;n`OlHBwW6_AA_y`2CTw5H~G2qVGfie^zWQnMT5j;p)sGoA&OB?3kjlz`x%7DT>5!GJ65}d zsqv0y=#R&3Nln`8e+*D%ogkL~Y|8xpzki1nCGAB^)oY`Xg2i9q%Cj(xP<4P_eiBaf zB>}m>z#&ui&bY&--Yh=m06`}MXCZj&a9AnStm1Z$K*IbR0jpVS@!4(;V-x~^PeNVR1wqI;P~&(PAprT1ej2Z|OtA>l zKg@WqGr%;@KRI|;@a9EQORmz49V~y2`d0DMYq+LY-Le>HgCwq8)mAyg4G)O8HDj^8 zB6u?E=|*oS;{v6cd^%ubxR*O7pvwiiR-yU-D7nkotB66kjb12} zCK~&|fC#TgCz3ZQ{xm>qfi{^8;`eL$cK4(M{MEN9J-C!jQ6QIP+F_o=nKis5pS;T1 z@Q=8rJ-fI)_GC;%v9zymTn$93B6y?2+KQU-236jWDjizSNy zb!N)U#YXf4><8bhdum7^(6&N{WbxfJ1RkjKU|Gpnq424j-fHufSEnO*9Z~A7BV%@s zCO2qIJLm`p7X=K2?T^ELkzfS)hhQ<<2j`v60j|<$g!45E2%t4@6@$Agg09C(8(kW! z&zl6P@g-2to8aQl*xgUg(**Codgf@|xIS)7!K(?p(VSb`N3&AAW1;mChIC7cuL1>- znhS#3w{fujHpJQC;s2wM^*}`hN`R95Wy|bD zUZ*van90_A>*jf3hRh>i*IQ?5x9gkSP&YThM1k=aEoaYqX8MN%bPGC9cB^3eO|;p` zRLZlnT+5Ffmf1%TGiB_8va-#fIesI*-o+d?meIux@WIKv{*_nyZSaiKJ1cvcyFZf~^{O z`@nR$)=fcGM7E3Atxd_FfrA&U2j3qI8 zqw+VZ9}7h__z+oo71kX<2cLy{*dEd?I{E=Ok&fH@6AgnA0{`0BT+wj∨7aI902k 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�EUsV9!eMrB%&Q5MgbA`Hre`asB!A~L)` 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 literal 0 HcmV?d00001 diff --git a/boards/arm/bmd_345_eval/doc/index.rst b/boards/arm/bmd_345_eval/doc/index.rst new file mode 100644 index 00000000000000..3a59d0baebe6c9 --- /dev/null +++ b/boards/arm/bmd_345_eval/doc/index.rst @@ -0,0 +1,206 @@ +.. _bmd_345_eval: + +BMD 345 EVAL +############ + +Overview +******** + +The BMD 345 Evaluation kit provides support for the Nordic Semiconductor +nRF52840 ARM Cortex-M4F CPU and the following devices: + +* :abbr:`ADC (Analog to Digital Converter)` +* CLOCK +* FLASH +* :abbr:`GPIO (General Purpose Input Output)` +* :abbr:`I2C (Inter-Integrated Circuit)` +* :abbr:`MPU (Memory Protection Unit)` +* :abbr:`NVIC (Nested Vectored Interrupt Controller)` +* :abbr:`PWM (Pulse Width Modulation)` +* RADIO (Bluetooth Low Energy) +* :abbr:`RTC (nRF RTC System Clock)` +* Segger RTT (RTT Console) +* :abbr:`SPI (Serial Peripheral Interface)` +* :abbr:`UART (Universal asynchronous receiver-transmitter)` +* :abbr:`USB (Universal Serial Bus)` +* :abbr:`WDT (Watchdog Timer)` + +.. figure:: img/bmd_345_eval.png + :width: 442px + :align: center + :alt: BMD 345 EVAL + +Supported Features +================== + +The bmd_345_eval board configuration supports the following +hardware features: + ++-----------+------------+----------------------+ +| Interface | Controller | Driver/Component | ++===========+============+======================+ +| ADC | on-chip | adc | ++-----------+------------+----------------------+ +| CLOCK | on-chip | clock_control | ++-----------+------------+----------------------+ +| FLASH | on-chip | flash | ++-----------+------------+----------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+----------------------+ +| I2C(M) | on-chip | i2c | ++-----------+------------+----------------------+ +| MPU | on-chip | arch/arm | ++-----------+------------+----------------------+ +| NVIC | on-chip | arch/arm | ++-----------+------------+----------------------+ +| PWM | on-chip | pwm | ++-----------+------------+----------------------+ +| RADIO | on-chip | Bluetooth | ++-----------+------------+----------------------+ +| RTC | on-chip | system clock | ++-----------+------------+----------------------+ +| RTT | Segger | console | ++-----------+------------+----------------------+ +| SPI(M/S) | on-chip | spi | ++-----------+------------+----------------------+ +| UART | on-chip | serial | ++-----------+------------+----------------------+ +| USB | on-chip | usb | ++-----------+------------+----------------------+ +| WDT | on-chip | watchdog | ++-----------+------------+----------------------+ + +Other hardware features are not supported by the Zephyr kernel. +See `bmd345eval_datasheet`_ datasheet for a complete list of +BMD 345 EVAL board hardware features. + +Connections and IOs +=================== + +LED +--- + +* LED1 (green) = P0.13 +* LED2 (green) = P0.14 +* LED3 (green) = P0.15 +* LED4 (green) = P0.16 + +Push buttons +------------ + +* BUTTON1 = SW1 = P0.11 +* BUTTON2 = SW2 = P0.12 +* BUTTON3 = SW3 = P0.24 +* BUTTON4 = SW4 = P0.25 +* BOOT = SW5 = boot/reset + +Programming and Debugging +************************* + +Applications for the ``bmd_345_eval`` board configuration can be +built and flashed in the usual way (see :ref:`build_an_application` +and :ref:`application_run` for more details); however, the standard +debugging targets are not currently available. + +Flashing +======== + +Follow the instructions in the :ref:`nordic_segger` page to install +and configure all the necessary software. Further information can be +found in :ref:`nordic_segger_flashing`. Then build and flash +applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +Here is an example for the :ref:`hello_world` application. + +First, run your favorite terminal program to listen for output. + +.. code-block:: console + + $ minicom -D -b 115200 + +Replace :code:`` with the port where the board nRF52840 DK +can be found. For example, under Linux, :code:`/dev/ttyACM0`. + +Then build and flash the application in the usual way. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: bmd_345_eval + :goals: build flash + +Debugging +========= + +Refer to the :ref:`nordic_segger` page to learn about debugging Nordic boards with a +Segger IC. + + +Testing the LEDs and buttons in the BMD 345 EVAL +************************************************ + +There are 2 samples that allow you to test that the buttons (switches) and LEDs on +the board are working properly with Zephyr: + +.. code-block:: console + + samples/basic/blinky + samples/basic/button + +You can build and flash the examples to make sure Zephyr is running correctly on +your board. The button and LED definitions can be found in +:zephyr_file:`boards/arm/bmd_345_eval/bmd_345_eval.dts`. + +Using UART1 +*********** + +The following approach can be used when an application needs to use +more than one UART for connecting peripheral devices: + +1. Add devicetree overlay file to the main directory of your application: + + .. code-block:: console + + $ cat bmd_345_eval.overlay + &uart1 { + compatible = "nordic,nrf-uarte"; + current-speed = <115200>; + status = "okay"; + tx-pin = <14>; + rx-pin = <16>; + }; + + In the overlay file above, pin P0.16 is used for RX and P0.14 is used for TX + +2. Use the UART1 as ``device_get_binding(DT_LABEL(DT_NODELABEL(uart1)))`` + +See :ref:`set-devicetree-overlays` for further details. + +Selecting the pins +================== +To select the pin numbers for tx-pin and rx-pin: + +.. code-block:: console + + tx-pin = + +Open the `nRF52840 Product Specification`_, chapter 7 'Hardware and Layout'. +In the table 7.1.1 'aQFN73 ball assignments' select the pins marked +'General purpose I/O'. Note that pins marked as 'low frequency I/O only' can only be used +in under-10KHz applications. They are not suitable for 115200 speed of UART. + +Translate the 'Pin' into number for devicetree by using the following formula:: + + pin_no = b\*32 + a + +where ``a`` and ``b`` are from the Pin value in the table (Pb.a). +For example, for P0.1, ``pin_no = 1`` and for P1.0, ``pin_no = 32``. + +References +********** + +.. target-notes:: + +.. _bmd345eval_datasheet: https://www.u-blox.com/sites/default/files/BMD-345_DataSheet_%28UBX-19039908%29_C1-Public.pdf +.. _J-Link Software and documentation pack: https://www.segger.com/jlink-software.html +.. _nRF52840 Product Specification: http://infocenter.nordicsemi.com/pdf/nRF52840_PS_v1.0.pdf diff --git a/samples/drivers/jesd216/boards/bmd_345_eval.conf b/samples/drivers/jesd216/boards/bmd_345_eval.conf new file mode 100644 index 00000000000000..5983fc0f78c0e6 --- /dev/null +++ b/samples/drivers/jesd216/boards/bmd_345_eval.conf @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_SPI=n +CONFIG_SPI_NOR=n +CONFIG_NORDIC_QSPI_NOR=y diff --git a/samples/subsys/fs/littlefs/boards/bmd_345_eval.conf b/samples/subsys/fs/littlefs/boards/bmd_345_eval.conf new file mode 100644 index 00000000000000..296e9ce30b32dd --- /dev/null +++ b/samples/subsys/fs/littlefs/boards/bmd_345_eval.conf @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +# Need this when storage is on flash +CONFIG_MPU_ALLOW_FLASH_WRITE=y + +# Need this when storage is on MX25R64 +CONFIG_NORDIC_QSPI_NOR=y +CONFIG_NORDIC_QSPI_NOR_FLASH_LAYOUT_PAGE_SIZE=4096 diff --git a/samples/subsys/fs/littlefs/boards/bmd_345_eval.overlay b/samples/subsys/fs/littlefs/boards/bmd_345_eval.overlay new file mode 100644 index 00000000000000..783e0064fd8a0a --- /dev/null +++ b/samples/subsys/fs/littlefs/boards/bmd_345_eval.overlay @@ -0,0 +1,35 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + */ + +/delete-node/ &storage_partition; + +/ { + fstab { + compatible = "zephyr,fstab"; + lfs1: lfs1 { + compatible = "zephyr,fstab,littlefs"; + mount-point = "/lfs1"; + partition = <&lfs1_part>; + automount; + read-size = <16>; + prog-size = <16>; + cache-size = <64>; + lookahead-size = <32>; + block-cycles = <512>; + }; + }; +}; + +&mx25r64 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + lfs1_part: partition@0 { + label = "storage"; + reg = <0x00000000 0x00010000>; + }; + }; +};