From 110c81f2f7a9fbd8e82781ed0be3373416e7d6f4 Mon Sep 17 00:00:00 2001 From: Henrik Brix Andersen Date: Tue, 5 Nov 2024 21:15:36 +0000 Subject: [PATCH] boards: others: add candleLight USB to CAN 2.0B adapter board Add support for the open-hardware candleLight USB to CAN 2.0B board. Signed-off-by: Henrik Brix Andersen --- boards/others/candlelight/Kconfig.candlelight | 5 + boards/others/candlelight/board.cmake | 8 ++ boards/others/candlelight/board.yml | 6 ++ boards/others/candlelight/candlelight.dts | 96 ++++++++++++++++++ boards/others/candlelight/candlelight.yaml | 15 +++ .../others/candlelight/candlelight_defconfig | 1 + .../others/candlelight/doc/candlelight.webp | Bin 0 -> 36286 bytes boards/others/candlelight/doc/index.rst | 65 ++++++++++++ 8 files changed, 196 insertions(+) create mode 100644 boards/others/candlelight/Kconfig.candlelight create mode 100644 boards/others/candlelight/board.cmake create mode 100644 boards/others/candlelight/board.yml create mode 100644 boards/others/candlelight/candlelight.dts create mode 100644 boards/others/candlelight/candlelight.yaml create mode 100644 boards/others/candlelight/candlelight_defconfig create mode 100644 boards/others/candlelight/doc/candlelight.webp create mode 100644 boards/others/candlelight/doc/index.rst diff --git a/boards/others/candlelight/Kconfig.candlelight b/boards/others/candlelight/Kconfig.candlelight new file mode 100644 index 00000000000..e941cb7a473 --- /dev/null +++ b/boards/others/candlelight/Kconfig.candlelight @@ -0,0 +1,5 @@ +# Copyright (c) 2024 Henrik Brix Andersen +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_CANDLELIGHT + select SOC_STM32F072XB diff --git a/boards/others/candlelight/board.cmake b/boards/others/candlelight/board.cmake new file mode 100644 index 00000000000..c383530f74c --- /dev/null +++ b/boards/others/candlelight/board.cmake @@ -0,0 +1,8 @@ +# Copyright (c) 2024 Henrik Brix Andersen +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F072CB") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/boards/others/candlelight/board.yml b/boards/others/candlelight/board.yml new file mode 100644 index 00000000000..aaea4c39edb --- /dev/null +++ b/boards/others/candlelight/board.yml @@ -0,0 +1,6 @@ +board: + name: candlelight + full_name: candleLight + vendor: others + socs: + - name: stm32f072xb diff --git a/boards/others/candlelight/candlelight.dts b/boards/others/candlelight/candlelight.dts new file mode 100644 index 00000000000..ae1d7208615 --- /dev/null +++ b/boards/others/candlelight/candlelight.dts @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2024 Henrik Brix Andersen + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include + +/ { + model = "candleLight"; + compatible = "candlelight"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,code-partition = &slot0_partition; + zephyr,canbus = &can1; + }; + + aliases { + led0 = &led_rx; + led1 = &led_tx; + }; + + leds { + compatible = "gpio-leds"; + led_rx: led_rx { + gpios = <&gpioa 0 GPIO_ACTIVE_LOW>; + label = "LED RX"; + }; + led_tx: led_tx { + gpios = <&gpioa 1 GPIO_ACTIVE_LOW>; + label = "LED TX"; + }; + }; + + transceiver0: can-phy0 { + compatible = "nxp,tja1051", "can-transceiver-gpio"; + enable-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; + max-bitrate = <1000000>; + #phy-cells = <0>; + }; +}; + +&clk_hsi { + status = "okay"; + clock-frequency = ; +}; + +&pll { + prediv = <1>; + mul = <6>; + clocks = <&clk_hsi>; + status = "okay"; +}; + +&rcc { + clocks = <&pll>; + clock-frequency = ; + ahb-prescaler = <1>; + apb1-prescaler = <1>; +}; + +zephyr_udc0: &usb { + pinctrl-0 = <&usb_dm_pa11 &usb_dp_pa12>; + pinctrl-names = "default"; + status = "okay"; +}; + +&can1 { + pinctrl-0 = <&can_rx_pb8 &can_tx_pb9>; + pinctrl-names = "default"; + phys = <&transceiver0>; + status = "okay"; +}; + +&flash0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + boot_partition: partition@0 { + label = "mcuboot"; + reg = <0x00000000 DT_SIZE_K(48)>; + read-only; + }; + slot0_partition: partition@c000 { + label = "image-0"; + reg = <0x0000c000 DT_SIZE_K(80)>; + }; + }; +}; diff --git a/boards/others/candlelight/candlelight.yaml b/boards/others/candlelight/candlelight.yaml new file mode 100644 index 00000000000..aaf11b3f977 --- /dev/null +++ b/boards/others/candlelight/candlelight.yaml @@ -0,0 +1,15 @@ +identifier: candlelight +name: candleLight +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb +ram: 16 +flash: 128 +supported: + - can + - gpio + - usb_device + - usbd +vendor: others diff --git a/boards/others/candlelight/candlelight_defconfig b/boards/others/candlelight/candlelight_defconfig new file mode 100644 index 00000000000..91c3c15b37d --- /dev/null +++ b/boards/others/candlelight/candlelight_defconfig @@ -0,0 +1 @@ +CONFIG_GPIO=y diff --git a/boards/others/candlelight/doc/candlelight.webp b/boards/others/candlelight/doc/candlelight.webp new file mode 100644 index 0000000000000000000000000000000000000000..e54d14a48314a3f082e1f5e0e60392d8c0292a74 GIT binary patch literal 36286 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 literal 0 HcmV?d00001 diff --git a/boards/others/candlelight/doc/index.rst b/boards/others/candlelight/doc/index.rst new file mode 100644 index 00000000000..ac61b2a5eed --- /dev/null +++ b/boards/others/candlelight/doc/index.rst @@ -0,0 +1,65 @@ +.. zephyr:board:: candlelight + +Overview +******** + +The candleLight is an open-hardware USB to CAN 2.0B adapter board available from a number of +sources. + +Hardware +******** + +The candleLight board is equipped with a STM32F072CB microcontroller and features an USB connector, +a DB-9M connector for the CAN bus, and two user LEDs. Schematics and component placement drawings +are available in the `candleLight GitHub repository`_. + +Supported Features +================== + +The ``candlelight`` board configuration supports the following hardware features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| PINMUX | on-chip | pinmux | ++-----------+------------+-------------------------------------+ +| FLASH | on-chip | flash memory | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| USB | on-chip | USB | ++-----------+------------+-------------------------------------+ +| CAN1 | on-chip | CAN controller | ++-----------+------------+-------------------------------------+ + +The default configuration can be found in the defconfig file: +:zephyr_file:`boards/others/candlelight/candlelight_defconfig`. + +Other hardware features are not currently supported by the port. + +System Clock +============ + +The STM32F072CB PLL is driven by the internal RC oscillator (HSI) running at 8 MHz and +configured to provide a system clock of 48 MHz. + +Programming and Debugging +************************* + +Build and flash applications as usual (see :ref:`build_an_application` and +:ref:`application_run` for more details). + +If flashing via USB DFU, short resistor ``R203`` when applying power to the candleLight in order to +enter the built-in DFU mode. + +Here is an example for the :zephyr:code-sample:`blinky` application. + +.. zephyr-app-commands:: + :zephyr-app: samples/basic/blinky + :board: candlelight + :goals: flash + +.. _candleLight GitHub repository: + https://github.com/HubertD/candleLight