boards: introduce bytesatwork byteSENSI-L
The byteSENSI-L is a fun LoRa device based on nRF52 MCU that integrates many sensors. Signed-off-by: Rico Ganahl <rico.ganahl@bytesatwork.ch> Signed-off-by: Guy Morand <guy.morand@bytesatwork.ch>
This commit is contained in:
parent
a9be65bec5
commit
45795d35b6
14 changed files with 449 additions and 0 deletions
8
boards/bytesatwork/bytesensi_l/Kconfig
Normal file
8
boards/bytesatwork/bytesensi_l/Kconfig
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
config BOARD_ENABLE_DCDC
|
||||||
|
bool "DCDC mode"
|
||||||
|
select SOC_DCDC_NRF52X
|
||||||
|
default y
|
||||||
|
depends on BOARD_BYTESENSI_L
|
||||||
6
boards/bytesatwork/bytesensi_l/Kconfig.bytesensi_l
Normal file
6
boards/bytesatwork/bytesensi_l/Kconfig.bytesensi_l
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
config BOARD_BYTESENSI_L
|
||||||
|
bool "bytesatwork bytesSENSI-L nRF52832"
|
||||||
|
select SOC_NRF52832_QFAA
|
||||||
9
boards/bytesatwork/bytesensi_l/Kconfig.defconfig
Normal file
9
boards/bytesatwork/bytesensi_l/Kconfig.defconfig
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
if BOARD_BYTESENSI_L
|
||||||
|
|
||||||
|
config BT_CTLR
|
||||||
|
default BT
|
||||||
|
|
||||||
|
endif # BOARD_BYTESENSI_L
|
||||||
5
boards/bytesatwork/bytesensi_l/board.cmake
Normal file
5
boards/bytesatwork/bytesensi_l/board.cmake
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
board_runner_args(jlink "--device=nRF52832_xxAA" "--speed=4000")
|
||||||
|
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||||
7
boards/bytesatwork/bytesensi_l/board.yml
Normal file
7
boards/bytesatwork/bytesensi_l/board.yml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
board:
|
||||||
|
name: bytesensi_l
|
||||||
|
vendor: bytesatwork
|
||||||
|
socs:
|
||||||
|
- name: nrf52832
|
||||||
151
boards/bytesatwork/bytesensi_l/bytesensi_l.dts
Normal file
151
boards/bytesatwork/bytesensi_l/bytesensi_l.dts
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
/*
|
||||||
|
* Copyrigtt (c) 2024 bytesatwork AG
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include <nordic/nrf52832_qfaa.dtsi>
|
||||||
|
#include "bytesensi_l_pinctrl.dtsi"
|
||||||
|
|
||||||
|
#include <zephyr/dt-bindings/gpio/gpio.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "bytesatwork BLE/LORA sensor board";
|
||||||
|
compatible = "bytesatwork,bytesensi-l";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
zephyr,console = &uart0;
|
||||||
|
zephyr,sram = &sram0;
|
||||||
|
zephyr,flash = &flash0;
|
||||||
|
zephyr,code-partition = &slot0_partition;
|
||||||
|
};
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
/* Alias for lora samples */
|
||||||
|
lora0 = &lora;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&flash0 {
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
boot_partition: partition@0 {
|
||||||
|
label = "mcuboot";
|
||||||
|
reg = <0x00000000 0xc000>;
|
||||||
|
};
|
||||||
|
slot0_partition: partition@c000 {
|
||||||
|
label = "image-0";
|
||||||
|
reg = <0x0000C000 0x32000>;
|
||||||
|
};
|
||||||
|
slot1_partition: partition@3e000 {
|
||||||
|
label = "image-1";
|
||||||
|
reg = <0x0003E000 0x32000>;
|
||||||
|
};
|
||||||
|
scratch_partition: partition@70000 {
|
||||||
|
label = "image-scratch";
|
||||||
|
reg = <0x00070000 0xa000>;
|
||||||
|
};
|
||||||
|
storage_partition: partition@7a000 {
|
||||||
|
label = "storage";
|
||||||
|
reg = <0x0007a000 0x00005000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpiote {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio0 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
/* Enable 1-wire to enable i2c bus as well */
|
||||||
|
one-wire-gpio {
|
||||||
|
gpio-hog;
|
||||||
|
gpios = <7 GPIO_ACTIVE_HIGH>;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
compatible = "nordic,nrf-twi";
|
||||||
|
status = "okay";
|
||||||
|
clock-frequency = <I2C_BITRATE_STANDARD>;
|
||||||
|
pinctrl-0 = <&i2c0_default>;
|
||||||
|
pinctrl-1 = <&i2c0_sleep>;
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
|
||||||
|
light_sensor: apds9960@39 {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "avago,apds9960";
|
||||||
|
reg = <0x39>;
|
||||||
|
int-gpios = <&gpio0 25 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature_sensor: tmp116@4a {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "ti,tmp116";
|
||||||
|
reg = <0x4a>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
eeprom: ti_tmp116_eeprom@0 {
|
||||||
|
compatible = "ti,tmp116-eeprom";
|
||||||
|
reg = <0x0>;
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gas_sensor: ccs811@5a {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "ams,ccs811";
|
||||||
|
reg = <0x5a>;
|
||||||
|
irq-gpios = <&gpio0 28 GPIO_ACTIVE_LOW>;
|
||||||
|
wake-gpios = <&gpio0 27 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pressure_sensor: lps22hb-press@5c {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "st,lps22hb-press";
|
||||||
|
reg = <0x5c>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&spi1 {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "nordic,nrf-spi";
|
||||||
|
pinctrl-0 = <&spi1_default>;
|
||||||
|
pinctrl-1 = <&spi1_sleep>;
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
cs-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>,
|
||||||
|
<&gpio0 5 GPIO_ACTIVE_LOW>;
|
||||||
|
|
||||||
|
lora: lora@0 {
|
||||||
|
status = "okay";
|
||||||
|
compatible = "semtech,sx1276";
|
||||||
|
reg = <0>;
|
||||||
|
reset-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
|
||||||
|
dio-gpios =
|
||||||
|
<&gpio0 19 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
|
||||||
|
<&gpio0 20 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
|
||||||
|
<&gpio0 22 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>,
|
||||||
|
<&gpio0 23 (GPIO_PULL_DOWN | GPIO_ACTIVE_HIGH)>;
|
||||||
|
spi-max-frequency = <1000000>;
|
||||||
|
power-amplifier-output = "pa-boost";
|
||||||
|
};
|
||||||
|
|
||||||
|
nor_flash: mx25r6435f@1 {
|
||||||
|
status = "okay";
|
||||||
|
compatible ="jedec,spi-nor";
|
||||||
|
size = <0x4000000>;
|
||||||
|
reg = <1>;
|
||||||
|
spi-max-frequency = <8000000>;
|
||||||
|
status = "okay";
|
||||||
|
jedec-id = [c2 28 17];
|
||||||
|
};
|
||||||
|
};
|
||||||
18
boards/bytesatwork/bytesensi_l/bytesensi_l.yaml
Normal file
18
boards/bytesatwork/bytesensi_l/bytesensi_l.yaml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
identifier: bytesensi_l
|
||||||
|
name: bytesatwork byteSENSI-L
|
||||||
|
type: mcu
|
||||||
|
arch: arm
|
||||||
|
toolchain:
|
||||||
|
- zephyr
|
||||||
|
- gnuarmemb
|
||||||
|
ram: 64
|
||||||
|
flash: 512
|
||||||
|
supported:
|
||||||
|
- ble
|
||||||
|
- gpio
|
||||||
|
- i2c
|
||||||
|
- lora
|
||||||
|
- spi
|
||||||
|
vendor: bytesatwork
|
||||||
16
boards/bytesatwork/bytesensi_l/bytesensi_l_defconfig
Normal file
16
boards/bytesatwork/bytesensi_l/bytesensi_l_defconfig
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
# Enable MPU
|
||||||
|
CONFIG_ARM_MPU=y
|
||||||
|
|
||||||
|
# enable GPIO
|
||||||
|
CONFIG_GPIO=y
|
||||||
|
|
||||||
|
# Enable hardware stack protection
|
||||||
|
CONFIG_HW_STACK_PROTECTION=y
|
||||||
|
|
||||||
|
# enable console over segger RTT
|
||||||
|
CONFIG_CONSOLE=y
|
||||||
|
CONFIG_RTT_CONSOLE=y
|
||||||
|
CONFIG_USE_SEGGER_RTT=y
|
||||||
54
boards/bytesatwork/bytesensi_l/bytesensi_l_pinctrl.dtsi
Normal file
54
boards/bytesatwork/bytesensi_l/bytesensi_l_pinctrl.dtsi
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*
|
||||||
|
* Copyrigtt (c) 2024 bytesatwork AG
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
&pinctrl {
|
||||||
|
uart0_default: uart0_default {
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(UART_TX, 0, 11)>,
|
||||||
|
<NRF_PSEL(UART_RX, 0, 12)>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
uart0_sleep: uart0_sleep {
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(UART_TX, 0, 11)>,
|
||||||
|
<NRF_PSEL(UART_RX, 0, 12)>;
|
||||||
|
low-power-enable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_default: i2c0_default {
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(TWIM_SDA, 0, 16)>,
|
||||||
|
<NRF_PSEL(TWIM_SCL, 0, 15)>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c0_sleep: i2c0_sleep {
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(TWIM_SDA, 0, 16)>,
|
||||||
|
<NRF_PSEL(TWIM_SCL, 0, 15)>;
|
||||||
|
low-power-enable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi1_default: spi1_default{
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(SPIM_SCK, 0, 2)>,
|
||||||
|
<NRF_PSEL(SPIM_MOSI, 0, 3)>,
|
||||||
|
<NRF_PSEL(SPIM_MISO, 0, 4)>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
spi1_sleep: spi1_sleep{
|
||||||
|
group1 {
|
||||||
|
psels = <NRF_PSEL(SPIM_SCK, 0, 2)>,
|
||||||
|
<NRF_PSEL(SPIM_MOSI, 0, 3)>,
|
||||||
|
<NRF_PSEL(SPIM_MISO, 0, 4)>;
|
||||||
|
low-power-enable;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
BIN
boards/bytesatwork/bytesensi_l/doc/img/byteSENSI-L.jpg
Normal file
BIN
boards/bytesatwork/bytesensi_l/doc/img/byteSENSI-L.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
157
boards/bytesatwork/bytesensi_l/doc/index.rst
Normal file
157
boards/bytesatwork/bytesensi_l/doc/index.rst
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
.. _bytesensi_l:
|
||||||
|
|
||||||
|
bytesatwork byteSENSI-L
|
||||||
|
#######################
|
||||||
|
|
||||||
|
Overview
|
||||||
|
********
|
||||||
|
|
||||||
|
The byteSENSI-L is a fun LoRa device based on nRF52 MCU that integrates many
|
||||||
|
sensors.
|
||||||
|
|
||||||
|
.. image:: img/byteSENSI-L.jpg
|
||||||
|
:width: 800px
|
||||||
|
:align: center
|
||||||
|
:alt: byteSENSI-L
|
||||||
|
|
||||||
|
Hardware
|
||||||
|
********
|
||||||
|
|
||||||
|
Supported Features
|
||||||
|
==================
|
||||||
|
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| Interface | Controller | Driver/Component |
|
||||||
|
+===========+============+======================+
|
||||||
|
| 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 |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| RADIO | on-chip | Bluetooth |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| RADIO | Semtech | LoRa |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| RTC | on-chip | system clock |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| RTT | Segger | console |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
| WDT | on-chip | watchdog |
|
||||||
|
+-----------+------------+----------------------+
|
||||||
|
|
||||||
|
Connections and IOs
|
||||||
|
===================
|
||||||
|
|
||||||
|
External Connectors
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
External Supply @ X1
|
||||||
|
|
||||||
|
+-------+--------------+---------------------------------------+
|
||||||
|
| PIN # | Signal Name | Function |
|
||||||
|
+=======+==============+=======================================+
|
||||||
|
| 1 | VBAT | Power input instead of CR2477 battery |
|
||||||
|
+-------+--------------+---------------------------------------+
|
||||||
|
| 2 | GND | Ground |
|
||||||
|
+-------+--------------+---------------------------------------+
|
||||||
|
|
||||||
|
Programming Connector @ SL1
|
||||||
|
|
||||||
|
+-------+--------------+
|
||||||
|
| PIN # | Signal Name |
|
||||||
|
+=======+==============+
|
||||||
|
| 1 | VBAT |
|
||||||
|
+-------+--------------+
|
||||||
|
| 2 | SWDIO |
|
||||||
|
+-------+--------------+
|
||||||
|
| 3 | GND |
|
||||||
|
+-------+--------------+
|
||||||
|
| 4 | SWDCLK |
|
||||||
|
+-------+--------------+
|
||||||
|
| 5 | GND |
|
||||||
|
+-------+--------------+
|
||||||
|
| 6 | NC (SWO) |
|
||||||
|
+-------+--------------+
|
||||||
|
| 7 | NC (Key) |
|
||||||
|
+-------+--------------+
|
||||||
|
| 8 | NC |
|
||||||
|
+-------+--------------+
|
||||||
|
| 9 | GND |
|
||||||
|
+-------+--------------+
|
||||||
|
| 10 | nReset |
|
||||||
|
+-------+--------------+
|
||||||
|
|
||||||
|
I2C Sensor @ X3
|
||||||
|
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| PIN # | Signal Name | Function |
|
||||||
|
+=======+==============+=========================+
|
||||||
|
| 1 | VBAT | Power out |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| 2 | SCL | I2C clock at P0.15 |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| 3 | SDA | I2C data at P0.16 |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| 4 | INT | Interrupt at P0.13 |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| 5 | I2C_ADDR | tied to VBAT |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
| 6 | GND | Ground |
|
||||||
|
+-------+--------------+-------------------------+
|
||||||
|
|
||||||
|
One Wire Sensor @ X2
|
||||||
|
|
||||||
|
+-------+----------------+-------------------------+
|
||||||
|
| PIN # | Signal Name | Function |
|
||||||
|
+=======+================+=========================+
|
||||||
|
| 1 | VDD | 4V8 |
|
||||||
|
+-------+----------------+-------------------------+
|
||||||
|
| 2 | IO | One Wire |
|
||||||
|
+-------+----------------+-------------------------+
|
||||||
|
| 3 | GND | Ground |
|
||||||
|
+-------+----------------+-------------------------+
|
||||||
|
|
||||||
|
External BLE Antenna @ J1
|
||||||
|
|
||||||
|
External LoRa Antenna @ J2
|
||||||
|
|
||||||
|
External GPS Antenna @ J3
|
||||||
|
|
||||||
|
Programming and Debugging
|
||||||
|
*************************
|
||||||
|
|
||||||
|
Flashing
|
||||||
|
========
|
||||||
|
The byteSENSI-L board can be flashed with the SEGGER JLink programmer.
|
||||||
|
|
||||||
|
You can build and flash applications in the usual way. Here is an example for
|
||||||
|
the :ref:`hello_world` application.
|
||||||
|
|
||||||
|
.. zephyr-app-commands::
|
||||||
|
:zephyr-app: samples/hello_world
|
||||||
|
:board: bytesensi_l
|
||||||
|
:goals: build flash
|
||||||
|
:compact:
|
||||||
|
|
||||||
|
Debugging
|
||||||
|
=========
|
||||||
|
|
||||||
|
Debugging your application can be done with ``west debug``.
|
||||||
|
|
||||||
|
Serial console
|
||||||
|
==============
|
||||||
|
|
||||||
|
The byteSENSI-L board only uses Segger's RTT console for providing serial
|
||||||
|
console. There is no physical serial port available.
|
||||||
|
|
||||||
|
References
|
||||||
|
**********
|
||||||
|
* `bytesatwork website <https://www.bytesatwork.io/>`_
|
||||||
|
* `bytesatwork wiki <https://wiki.bytesatwork.io/>`_
|
||||||
7
boards/bytesatwork/bytesensi_l/pre_dt_board.cmake
Normal file
7
boards/bytesatwork/bytesensi_l/pre_dt_board.cmake
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2024 bytesatwork AG
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
# Suppress "unique_unit_address_if_enabled" to handle the following overlaps:
|
||||||
|
# - power@40000000 & clock@40000000 & bprot@40000000
|
||||||
|
# - acl@4001e000 & flash-controller@4001e000
|
||||||
|
list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled")
|
||||||
10
boards/bytesatwork/index.rst
Normal file
10
boards/bytesatwork/index.rst
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
.. _boards-bytesatwork:
|
||||||
|
|
||||||
|
bytesatwork
|
||||||
|
###########
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
:glob:
|
||||||
|
|
||||||
|
**/*
|
||||||
|
|
@ -111,6 +111,7 @@ broadmobi Shanghai Broadmobi Communication Technology Co.,Ltd.
|
||||||
bticino Bticino International
|
bticino Bticino International
|
||||||
buffalo Buffalo, Inc.
|
buffalo Buffalo, Inc.
|
||||||
bur B&R Industrial Automation GmbH
|
bur B&R Industrial Automation GmbH
|
||||||
|
bytesatwork bytesatwork AG
|
||||||
calaosystems CALAO Systems SAS
|
calaosystems CALAO Systems SAS
|
||||||
calxeda Calxeda
|
calxeda Calxeda
|
||||||
canaan Canaan, Inc.
|
canaan Canaan, Inc.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue