From d25ce14130d2d4be65e7030abc216f14d3eb6394 Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Fri, 18 Jun 2021 22:06:36 -0300 Subject: [PATCH 1/5] soc: atmel: sam4l: Enable RC32K osc Enable sam4l internal factory calibrated RC32K clock source. The RC32K was used as source for Generic Clock 5 using 32 as divider. The output is a 1024 Hz clock that can be used by GLOC and TC0 peripherals. Signed-off-by: Gerson Fernando Budke --- soc/atmel/sam/sam4l/soc.c | 33 ++++++++++++++++++ soc/atmel/sam/sam4l/soc.h | 70 ++++++++++++++++++++++++++++++++------- 2 files changed, 91 insertions(+), 12 deletions(-) diff --git a/soc/atmel/sam/sam4l/soc.c b/soc/atmel/sam/sam4l/soc.c index fbc939842f34..ae34131515a5 100644 --- a/soc/atmel/sam/sam4l/soc.c +++ b/soc/atmel/sam/sam4l/soc.c @@ -56,6 +56,19 @@ static inline bool osc_is_ready(uint8_t id) } } +/** + * Enable Backup System Control Oscilator RC32K + */ +static inline void osc_priv_enable_rc32k(void) +{ + uint32_t temp = BSCIF->RC32KCR; + uint32_t addr = (uint32_t)&BSCIF->RC32KCR - (uint32_t)BSCIF; + + BSCIF->UNLOCK = BSCIF_UNLOCK_KEY(0xAAu) + | BSCIF_UNLOCK_ADDR(addr); + BSCIF->RC32KCR = temp | BSCIF_RC32KCR_EN32K | BSCIF_RC32KCR_EN; +} + /** * The PLL options #PLL_OPT_VCO_RANGE_HIGH and #PLL_OPT_OUTPUT_DIV will * be set automatically based on the calculated target frequency. @@ -153,6 +166,8 @@ static inline void flashcalw_issue_command(uint32_t command, int page_number) */ static ALWAYS_INLINE void clock_init(void) { + uint32_t gen_clk_conf; + /* Disable PicoCache and Enable HRAMC1 as extended RAM */ soc_pmc_peripheral_enable( PM_CLOCK_MASK(PM_CLK_GRP_HSB, SYSCLK_HRAMC1_DATA)); @@ -224,6 +239,24 @@ static ALWAYS_INLINE void clock_init(void) PM->UNLOCK = PM_UNLOCK_KEY(0xAAu) | PM_UNLOCK_ADDR((uint32_t)&PM->MCCTRL - (uint32_t)PM); PM->MCCTRL = OSC_SRC_PLL0; + + /** Enable RC32K Oscilator */ + osc_priv_enable_rc32k(); + while (!osc_is_ready(OSC_ID_RC32K)) { + ; + } + + /** Enable Generic Clock 5 + * Source: RC32K + * Div: 32 + * Clk: 1024 Hz + * The GCLK-5 can be used by GLOC, TC0 and RC32KIFB_REF + */ + gen_clk_conf = SCIF_GCCTRL_RESETVALUE; + gen_clk_conf |= SCIF_GCCTRL_OSCSEL(GEN_CLK_SRC_RC32K); + gen_clk_conf |= SCIF_GCCTRL_DIVEN; + gen_clk_conf |= SCIF_GCCTRL_DIV(((32 + 1) / 2) - 1); + SCIF->GCCTRL[GEN_CLK_TC0_GLOC_RC32] = gen_clk_conf | SCIF_GCCTRL_CEN; } void soc_reset_hook(void) diff --git a/soc/atmel/sam/sam4l/soc.h b/soc/atmel/sam/sam4l/soc.h index ca91575ad1f2..09180c6e2b6a 100644 --- a/soc/atmel/sam/sam4l/soc.h +++ b/soc/atmel/sam/sam4l/soc.h @@ -208,18 +208,64 @@ * 10- ADCIFE * 11- Master generic clock. Can be used as source for other generic clocks. */ -#define GEN_CLK_DFLL_REF 0 -#define GEN_CLK_DFLL_DITHER 1 -#define GEN_CLK_AST 2 -#define GEN_CLK_CATB 3 -#define GEN_CLK_AESA 4 -#define GEN_CLK_GLOC 5 -#define GEN_CLK_ABDACB 6 -#define GEN_CLK_USBC 7 -#define GEN_CLK_TC1_PEVC0 8 -#define GEN_CLK_PLL0_PEVC1 9 -#define GEN_CLK_ADCIFE 10 -#define GEN_CLK_MASTER_GEN 11 +#define GEN_CLK_DFLL_REF 0 +#define GEN_CLK_DFLL_DITHER 1 +#define GEN_CLK_AST 2 +#define GEN_CLK_CATB 3 +#define GEN_CLK_AESA 4 +#define GEN_CLK_TC0_GLOC_RC32 5 +#define GEN_CLK_ABDACB 6 +#define GEN_CLK_USBC 7 +#define GEN_CLK_TC1_PEVC0 8 +#define GEN_CLK_PLL0_PEVC1 9 +#define GEN_CLK_ADCIFE 10 +#define GEN_CLK_MASTER_GEN 11 + +/** + * 0- System RC oscillator + * 1- 32 kHz oscillator + * 2- DFLL + * 3- Oscillator 0 + * 4- 80 MHz RC oscillator + * 5- 4-8-12 MHz RC oscillator + * 6- 1 MHz RC oscillator + * 7- CPU clock + * 8- High Speed Bus clock + * 9- Peripheral Bus A clock + * 10- Peripheral Bus B clock + * 11- Peripheral Bus C clock + * 12- Peripheral Bus D clock + * 13- 32 kHz RC oscillator + * 15- 1 kHz output from OSC32K + * 16- PLL0 + * 17- High resolution prescaler + * 18- Fractional prescaler + * 19- GCLKIN0 + * 20- GCLKIN1 + * 21- GCLK11 + */ + +#define GEN_CLK_SRC_RCSYS 0 +#define GEN_CLK_SRC_OSC32K 1 +#define GEN_CLK_SRC_DFLL 2 +#define GEN_CLK_SRC_OSC0 3 +#define GEN_CLK_SRC_RC80M 4 +#define GEN_CLK_SRC_RCFAST 5 +#define GEN_CLK_SRC_RC1M 6 +#define GEN_CLK_SRC_CLK_CPU 7 +#define GEN_CLK_SRC_CLK_HSB 8 +#define GEN_CLK_SRC_CLK_PBA 9 +#define GEN_CLK_SRC_CLK_PBB 10 +#define GEN_CLK_SRC_CLK_PBC 11 +#define GEN_CLK_SRC_CLK_PBD 12 +#define GEN_CLK_SRC_RC32K 13 +#define GEN_CLK_SRC_CLK_1K 15 +#define GEN_CLK_SRC_PLL0 16 +#define GEN_CLK_SRC_HRPCLK 17 +#define GEN_CLK_SRC_FPCLK 18 +#define GEN_CLK_SRC_GCLKIN0 19 +#define GEN_CLK_SRC_GCLKIN1 20 +#define GEN_CLK_SRC_GCLK11 21 #endif /* !_ASMLANGUAGE */ From 11597e0f047cb99383ba96e190f409099fb45226 Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Fri, 18 Jun 2021 22:32:01 -0300 Subject: [PATCH 2/5] drivers: counter: sam: tc: Update sam4l freq idx 0 The Atmel sam4l have generic clock 5 enabled at 1024Hz. Update sam4l sam_tc_input_freq_table index 0 to reflect right value. signed-off-by: Gerson Fernando Budke --- drivers/counter/counter_sam_tc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/counter/counter_sam_tc.c b/drivers/counter/counter_sam_tc.c index 69c2e2ddd9eb..57ae3c6dd676 100644 --- a/drivers/counter/counter_sam_tc.c +++ b/drivers/counter/counter_sam_tc.c @@ -81,7 +81,7 @@ static const uint32_t sam_tc_input_freq_table[] = { SOC_ATMEL_SAM_MCK_FREQ_HZ / 128, 32768, #elif defined(CONFIG_SOC_SERIES_SAM4L) - USEC_PER_SEC, + 1024, SOC_ATMEL_SAM_MCK_FREQ_HZ / 2, SOC_ATMEL_SAM_MCK_FREQ_HZ / 8, SOC_ATMEL_SAM_MCK_FREQ_HZ / 32, From 0b681fad826e3df6ec83d76113e8f01c5efb7cae Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Sun, 22 Dec 2024 17:27:01 +0100 Subject: [PATCH 3/5] dts: bindings: Add Peregine vendor prefix Add Peregrine Consultoria e Servicos board vendor. Signed-off-by: Gerson Fernando Budke --- dts/bindings/vendor-prefixes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/dts/bindings/vendor-prefixes.txt b/dts/bindings/vendor-prefixes.txt index aed12fa9adbd..70cbb8fbc2a5 100644 --- a/dts/bindings/vendor-prefixes.txt +++ b/dts/bindings/vendor-prefixes.txt @@ -506,6 +506,7 @@ parade Parade Technologies Inc. parallax Parallax Inc. particle Particle.io pda Precision Design Associates, Inc. +peregrine Peregrine Consultoria e Servicos pericom Pericom Technology Inc. pervasive Pervasive Displays, Inc. phicomm PHICOMM Co., Ltd. From 737b51f7915691df74eb8c6379511de775132b7d Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Tue, 18 Feb 2020 20:40:21 -0300 Subject: [PATCH 4/5] boards: arm: atmel: Add sam4l_wm400_cape board Initial Version. Signed-off-by: Gerson Fernando Budke --- boards/peregrine/index.rst | 10 + .../sam4l_wm400_cape/Kconfig.defconfig | 22 ++ .../sam4l_wm400_cape/Kconfig.sam4l_wm400_cape | 5 + boards/peregrine/sam4l_wm400_cape/board.cmake | 12 ++ boards/peregrine/sam4l_wm400_cape/board.yml | 6 + .../doc/img/wm-400-pin-out.webp | Bin 0 -> 48598 bytes .../peregrine/sam4l_wm400_cape/doc/index.rst | 153 ++++++++++++++ .../sam4l_wm400_cape-pinctrl.dtsi | 60 ++++++ .../sam4l_wm400_cape/sam4l_wm400_cape.dts | 189 ++++++++++++++++++ .../sam4l_wm400_cape/sam4l_wm400_cape.yaml | 24 +++ .../sam4l_wm400_cape_defconfig | 11 + 11 files changed, 492 insertions(+) create mode 100644 boards/peregrine/index.rst create mode 100644 boards/peregrine/sam4l_wm400_cape/Kconfig.defconfig create mode 100644 boards/peregrine/sam4l_wm400_cape/Kconfig.sam4l_wm400_cape create mode 100644 boards/peregrine/sam4l_wm400_cape/board.cmake create mode 100644 boards/peregrine/sam4l_wm400_cape/board.yml create mode 100644 boards/peregrine/sam4l_wm400_cape/doc/img/wm-400-pin-out.webp create mode 100644 boards/peregrine/sam4l_wm400_cape/doc/index.rst create mode 100644 boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape-pinctrl.dtsi create mode 100644 boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.dts create mode 100644 boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.yaml create mode 100644 boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape_defconfig diff --git a/boards/peregrine/index.rst b/boards/peregrine/index.rst new file mode 100644 index 000000000000..a14270121da6 --- /dev/null +++ b/boards/peregrine/index.rst @@ -0,0 +1,10 @@ +.. _boards-peregrine: + +Peregrine +######### + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/peregrine/sam4l_wm400_cape/Kconfig.defconfig b/boards/peregrine/sam4l_wm400_cape/Kconfig.defconfig new file mode 100644 index 000000000000..1f95ae349d08 --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/Kconfig.defconfig @@ -0,0 +1,22 @@ +# Copyright (c) 2020-2025 Gerson Fernando Budke +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_SAM4L_WM400_CAPE + +if NETWORKING + +config IEEE802154_RF2XX + default y + depends on IEEE802154 + +endif # NETWORKING + +# By default the board uses BOSSA bootloader and require that to zephyr relocate +# the code_partition. This should be disabled when using the whole flash without +# bootloader. +config USE_DT_CODE_PARTITION + default y + +source "boards/common/usb/Kconfig.cdc_acm_serial.defconfig" + +endif # BOARD_SAM4L_WM400_CAPE diff --git a/boards/peregrine/sam4l_wm400_cape/Kconfig.sam4l_wm400_cape b/boards/peregrine/sam4l_wm400_cape/Kconfig.sam4l_wm400_cape new file mode 100644 index 000000000000..44f81df5d32d --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/Kconfig.sam4l_wm400_cape @@ -0,0 +1,5 @@ +# Copyright (c) 2020-2025 Gerson Fernando Budke +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_SAM4L_WM400_CAPE + select SOC_SAM4LC4B diff --git a/boards/peregrine/sam4l_wm400_cape/board.cmake b/boards/peregrine/sam4l_wm400_cape/board.cmake new file mode 100644 index 000000000000..1b805dc8c9f9 --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/board.cmake @@ -0,0 +1,12 @@ +# Copyright (c) 2020-2025 Gerson Fernando Budke +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=atsam4lc4b") +board_runner_args(jlink "--speed=4000") +board_runner_args(jlink "--reset-after-load") +board_runner_args(jlink "-rtos GDBServer/RTOSPlugin_Zephyr") +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) + +board_runner_args(bossac "--bossac-port=/dev/ttyACM0") +board_runner_args(bossac "--erase") +include(${ZEPHYR_BASE}/boards/common/bossac.board.cmake) diff --git a/boards/peregrine/sam4l_wm400_cape/board.yml b/boards/peregrine/sam4l_wm400_cape/board.yml new file mode 100644 index 000000000000..ded0ab037ae9 --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/board.yml @@ -0,0 +1,6 @@ +board: + name: sam4l_wm400_cape + full_name: SAM4L WM-400 Cape Board + vendor: peregrine + socs: + - name: sam4lc4b diff --git a/boards/peregrine/sam4l_wm400_cape/doc/img/wm-400-pin-out.webp b/boards/peregrine/sam4l_wm400_cape/doc/img/wm-400-pin-out.webp new file mode 100644 index 0000000000000000000000000000000000000000..28bfe30e3b42467096e407a63e22607735665989 GIT binary patch literal 48598 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 literal 0 HcmV?d00001 diff --git a/boards/peregrine/sam4l_wm400_cape/doc/index.rst b/boards/peregrine/sam4l_wm400_cape/doc/index.rst new file mode 100644 index 000000000000..95ed6d6db5ed --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/doc/index.rst @@ -0,0 +1,153 @@ +.. zephyr:board:: sam4l_wm400_cape + +Overview +******** + +The SAM4L WM-400 Cape is a full featured design to enable IEEE 802.15.4 low +power nodes. It is a Beaglebone Black cape concept with an Atmel AT86RF233 +radio transceiver. User can develop Touch interface and have access to many +sensors and conectivity buses. + +Hardware +******** + +- ATSAM4LC4B ARM Cortex-M4 Processor +- 12 MHz crystal oscillator +- 32.768 kHz crystal oscillator +- 1 RS-232 interface +- 1 RS-485 full duplex interface +- Micro-AB USB OTG host/device +- 1 user touch button and One user pushbutton +- 4 user LEDs +- 1 AT86RF233 IEEE 802.15.4 transceiver +- 1 MPL115A2 I²C Barometric Pressure/Temperature Sensor +- 1 VCNL4010 Proximity/Light Sensor +- 1 CC2D33S Advanced Humidity Temperature Sensor +- 1 NCP18WF104J03RB NTC Temperature Sensor +- 1 TEMT6000X01 Ambient Light Sensor + +Supported Features +================== + +The ``sam4l_wm400_cape`` board supports the following hardware features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| SYSTICK | on-chip | systick | ++-----------+------------+-------------------------------------+ +| COUNTER | on-chip | counter | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| HWINFO | on-chip | Unique 120 bit serial number | ++-----------+------------+-------------------------------------+ +| RADIO | on-chip | ieee802154 | ++-----------+------------+-------------------------------------+ +| SPI | on-chip | spi | ++-----------+------------+-------------------------------------+ +| TRNG | on-chip | entropy | ++-----------+------------+-------------------------------------+ +| TWIM | on-chip | i2c master port-interrupt | ++-----------+------------+-------------------------------------+ +| USART | on-chip | serial port | ++-----------+------------+-------------------------------------+ +| USB | on-chip | USB device | ++-----------+------------+-------------------------------------+ + +Other hardware features are not currently supported by Zephyr. + +The default configuration can be found in the Kconfig +:zephyr_file:`boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape_defconfig`. + +Connections and IOs +=================== + +For detailed information see `SAM4L WM-400 Cape`_ Information. + +System Clock +============ + +The SAM4L MCU is configured to use the 12 MHz internal oscillator on the board +with the on-chip PLL to generate an 48 MHz system clock. + +Serial Port +=========== + +The ATSAM4LC4B MCU has 4 USARTs. One of the USARTs (USART3) is shared between +RS-232 and RS-485 interfaces. The default console terminal is available at +RS-232 onboard port or via USB device. + +Programming and Debugging +************************* + +The SAM4L WM-400 Cape board has a 10-pin header to connect to a Segger JLink. +Using the JLink is possible to program and debug the SAM4LC4B chip. The board +came with a SAM-BA bootloader that only can be used to flash the software. + +Flashing +======== + +#. For JLink instructions, see :ref:`jlink-debug-host-tools`. + +#. Run your favorite terminal program to listen for output. Under Linux the + terminal should be :code:`/dev/ttyACM0`. For example: + + .. code-block:: console + + $ minicom -D /dev/ttyACM0 -o + + The -o option tells minicom not to send the modem initialization + string. Connection should be configured as follows: + + - Speed: 115200 + - Data: 8 bits + - Parity: None + - Stop bits: 1 + +#. Connect the SAM4L WM-400 Cape board to your host computer using the + USB debug port. Then build and flash the :zephyr:code-sample:`hello_world` + application. + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: sam4l_wm400_cape + :goals: build flash + + You should see ``Hello World! sam4l_wm400_cape`` in your terminal. + +#. For SAM-BA bootloader instructions, see :ref:`atmel_sam_ba_bootloader`. + +#. Connect the SAM4L WM-400 Cape board to your host computer using the + USB debug port pressing the S1 button. Then build and flash the + :zephyr:code-sample:`hello_world` application. After programming the board + the application will start automatically. + + .. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: sam4l_wm400_cape + :goals: build flash + :flash-args: -r bossac + + +Debugging +========= + +You can debug an application in the usual way. Here is an example for the +:zephyr:code-sample:`hello_world` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/hello_world + :board: sam4l_wm400_cape + :maybe-skip-config: + :goals: debug + +References +********** + +.. target-notes:: + +.. _SAM4L WM-400 Cape: + https://gfbudke.wordpress.com/2014/04/30/modulo-wireless-ieee-802-15-4zigbee-wm-400-e-wm-400l-bbbs diff --git a/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape-pinctrl.dtsi b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape-pinctrl.dtsi new file mode 100644 index 000000000000..e1b81485b5bd --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape-pinctrl.dtsi @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022-2025 Gerson Fernando Budke + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + spi0_default: spi0_default { + group1 { + pinmux = , + , + , + , + ; + }; + }; + + twi1_default: twi1_default { + group1 { + pinmux = , + ; + }; + }; + + usart0_default: usart0_default { + group1 { + pinmux = , + ; + }; + }; + + usart0_hw_ctrl_flow: usart0_hw_ctrl_flow { + group1 { + pinmux = , + ; + bias-pull-up; + }; + + group2 { + pinmux = , + , + ; + }; + }; + + usart1_default: usart1_default { + group1 { + pinmux = , + ; + }; + }; + + usbc_default: usbc_default { + group1 { + pinmux = , + ; + }; + }; +}; diff --git a/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.dts b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.dts new file mode 100644 index 000000000000..5f1811003449 --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.dts @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2020-2025 Gerson Fernando Budke + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include "sam4l_wm400_cape-pinctrl.dtsi" +#include + +/ { + model = "Atmel SAM4L WM-400 Cape Board with an Atmel SAM4LC4B SoC"; + compatible = "peregrine,sam4l_wm400_cape", "atmel,sam4lc4b", "atmel,sam4l"; + + aliases { + i2c-0 = &twim1; + led0 = &red_mod_led; + led1 = &green_mod_led; + led2 = &blue_mod_led; + led3 = &red_cape_led; + sw0 = &sw0_dfu; + }; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition= &code_partition; + }; + + leds { + compatible = "gpio-leds"; + + red_mod_led: led_0 { + gpios = <&gpioa 8 GPIO_ACTIVE_LOW>; + label = "LED_0"; + }; + + green_mod_led: led_1 { + gpios = <&gpiob 6 GPIO_ACTIVE_LOW>; + label = "LED_1"; + }; + + blue_mod_led: led_2 { + gpios = <&gpiob 7 GPIO_ACTIVE_LOW>; + label = "LED_2"; + }; + + red_cape_led: led_3 { + gpios = <&gpioa 24 GPIO_ACTIVE_LOW>; + label = "LED_3"; + }; + }; + + gpio_keys { + compatible = "gpio-keys"; + + sw0_dfu: button_1 { + gpios = <&gpiob 3 (GPIO_ACTIVE_LOW)>; + label = "SW0_DFU"; + zephyr,code = ; + }; + }; +}; + +&cpu0 { + clock-frequency = <48000000>; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "sam-ba"; + reg = <0x000000000 0x00004000>; + }; + + code_partition: partition@4000 { + label = "image"; + reg = <0x00004000 0x0003c000>; + }; + }; +}; + +&spi0 { + status = "okay"; + + pinctrl-0 = <&spi0_default>; + pinctrl-names = "default"; + + cs-gpios = <&gpioa 13 (GPIO_PULL_UP | GPIO_ACTIVE_LOW) + &gpioa 14 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + + rf2xx@0 { + compatible = "atmel,rf2xx"; + reg = <0x0>; + spi-max-frequency = <6000000>; + irq-gpios = <&gpioa 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>; + reset-gpios = <&gpioa 10 GPIO_ACTIVE_LOW>; + slptr-gpios = <&gpioa 9 GPIO_ACTIVE_HIGH>; + status = "okay"; + }; + + at45db: at45db081d@1 { + compatible = "atmel,at45"; + reg = <1>; + spi-max-frequency = <8000000>; + jedec-id = [1f 25 00]; + size = <8388608>; + sector-size = <65536>; + block-size = <2048>; + page-size = <256>; + enter-dpd-delay = <3000>; + exit-dpd-delay = <35000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + storage_partition: partition@0 { + label = "storage"; + reg = <0x00000000 0x00100000>; + }; + }; + }; +}; + +&tc0 { + clk = <4>; + status = "okay"; +}; + +&twim1 { + status = "okay"; + + pinctrl-0 = <&twi1_default>; + pinctrl-names = "default"; + + std-clk-slew-lim = <0>; + std-clk-strength-low = "0.5"; + std-data-slew-lim = <0>; + std-data-strength-low = "0.5"; + + hs-clk-slew-lim = <0>; + hs-clk-strength-high = "0.5"; + hs-clk-strength-low = "0.5"; + hs-data-slew-lim = <0>; + hs-data-strength-low = "0.5"; + + hs-master-code = <0>; + + eeprom1: eeprom@57 { + compatible = "atmel,at24"; + reg = <0x57>; + size = <32768>; + pagesize = <64>; + address-width = <16>; + timeout = <5>; + }; +}; + +&usart0 { + status = "okay"; + current-speed = <115200>; + + pinctrl-0 = <&usart0_default>; + pinctrl-names = "default"; +}; + +&usart1 { + status = "okay"; + current-speed = <115200>; + + pinctrl-0 = <&usart1_default>; + pinctrl-names = "default"; +}; + +zephyr_udc0: &usbc { + status = "okay"; + + pinctrl-0 = <&usbc_default>; + pinctrl-names = "default"; +}; + +#include <../boards/common/usb/cdc_acm_serial.dtsi> diff --git a/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.yaml b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.yaml new file mode 100644 index 000000000000..ac9516c9431f --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape.yaml @@ -0,0 +1,24 @@ +# Copyright (c) 2020-2025 Gerson Fernando Budke +# SPDX-License-Identifier: Apache-2.0 + +identifier: sam4l_wm400_cape +name: SAM4L WM-400 Cape +type: mcu +arch: arm +flash: 256 +ram: 32 +toolchain: + - zephyr +supported: + - counter + - gpio + - entropy + - hwinfo + - i2c + - ieee802154 + - spi + - uart + - usart + - usb_device + - watchdog +vendor: peregrine diff --git a/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape_defconfig b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape_defconfig new file mode 100644 index 000000000000..623c83b1e063 --- /dev/null +++ b/boards/peregrine/sam4l_wm400_cape/sam4l_wm400_cape_defconfig @@ -0,0 +1,11 @@ +# Copyright (c) 2020-2025 Gerson Fernando Budke +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_ARM_MPU=y +CONFIG_HW_STACK_PROTECTION=y +CONFIG_CORTEX_M_SYSTICK=y +CONFIG_WDT_DISABLE_AT_BOOT=y + +CONFIG_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_UART_CONSOLE=y From 6579c5c9d53fd7ae647979b57e4632dc008720d8 Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Tue, 28 Jan 2025 16:25:35 +0100 Subject: [PATCH 5/5] MAINTAINERS.yml: Add Peregrine platform Add Peregrine platform related to boards/peregrine. Signed-off-by: Gerson Fernando Budke --- MAINTAINERS.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS.yml b/MAINTAINERS.yml index e08fe8de0041..7ed10b75ee86 100644 --- a/MAINTAINERS.yml +++ b/MAINTAINERS.yml @@ -5565,6 +5565,15 @@ Random: labels: - "area: Random" +Peregrine Platforms: + status: maintained + maintainers: + - nandojve + files: + - boards/peregrine/ + labels: + - "platform: Peregrine" + # This area is to be converted to a subarea Testing with Renode: status: odd fixes