Skip to content

Commit cb11d6c

Browse files
committed
boards: qualcomm: Add QCC744M EVK
Adds the QCC744M EVK, using Bouffalolab port Signed-off-by: Camille BAUD <mail@massdriver.space>
1 parent 8053d77 commit cb11d6c

File tree

14 files changed

+459
-0
lines changed

14 files changed

+459
-0
lines changed

boards/qualcomm/index.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.. _boards-qualcomm:
2+
3+
Qualcomm Technologies, Inc.
4+
###########################
5+
6+
.. toctree::
7+
:maxdepth: 1
8+
:glob:
9+
10+
**/*
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
config BOARD_QCC744M_EVK
6+
select SOC_BL618M05Q2I
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
2+
#
3+
# SPDX-License-Identifier: Apache-2.0
4+
5+
board_runner_args(openocd --cmd-pre-init "source [find bl61x.cfg]")
6+
7+
board_runner_args(openocd --use-elf --no-load --no-init)
8+
board_runner_args(openocd --gdb-init "set mem inaccessible-by-default off")
9+
board_runner_args(openocd --gdb-init "set architecture riscv:rv32")
10+
board_runner_args(openocd --gdb-init "set remotetimeout 250")
11+
board_runner_args(openocd --gdb-init "set print asm-demangle on")
12+
board_runner_args(openocd --gdb-init "set backtrace limit 32")
13+
board_runner_args(openocd --gdb-init "mem 0x22FC0000 0x23010000 rw")
14+
board_runner_args(openocd --gdb-init "mem 0x62FC0000 0x63010000 rw")
15+
board_runner_args(openocd --gdb-init "mem 0x90000000 0x90020000 ro")
16+
board_runner_args(openocd --gdb-init "mem 0xA8000000 0xA8800000 rw")
17+
board_runner_args(openocd --gdb-init "mem 0xA0000000 0xA0400000 ro")
18+
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
19+
20+
board_runner_args(bflb_mcu_tool --chipname bl616)
21+
include(${ZEPHYR_BASE}/boards/common/bflb_mcu_tool.board.cmake)
22+
23+
board_set_flasher(bflb_mcu_tool)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
board:
2+
name: qcc744m_evk
3+
full_name: Qualcomm QCC744M Evaluation Board
4+
vendor: qcom
5+
socs:
6+
- name: bl618m05q2i
88.7 KB
Loading
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
.. zephyr:board:: qcc744m_evk
2+
3+
Overview
4+
********
5+
6+
The QCC744M Evaluation board features the QCC744M module, which contains a QCC744-2 SoC with 4MB of
7+
PSRAM and an external 8MB Flash chip.
8+
Qualcomm QCC74x is a tri-radio chipset integrating 1x1 Wi-Fi 6, Bluetooth 5.4,
9+
and IEEE 802.15.4 (Thread and Zigbee-ready) powered by a 32-bit RISC-V MCU up to 320 MHz, it is
10+
based on, and mostly equivalent, to the Bouffalolab BL61x Serie of chipsets.
11+
12+
Hardware
13+
********
14+
15+
For more information about the Qualcomm QCC74x MCU:
16+
17+
- `Qualcomm QCC74x MCU Datasheet`_
18+
- `Qualcomm QCC74x MCU Programming Manual`_
19+
- `Qualcomm QCC744M EVK Quick Start Guide`_
20+
- `Qualcomm QCC74x SDK`_
21+
- `qcc744m_evk Schematics`_
22+
23+
Supported Features
24+
==================
25+
26+
.. zephyr:board-supported-hw::
27+
28+
29+
Serial Port
30+
===========
31+
32+
The ``qcc744m_evk`` board uses UART0 as default serial port. It is connected
33+
to the onboard USB Serial converter and the port is used for both program and console.
34+
35+
36+
Programming and Debugging
37+
*************************
38+
39+
Samples
40+
=======
41+
42+
#. Build the Zephyr kernel and the :zephyr:code-sample:`hello_world` sample application:
43+
44+
.. zephyr-app-commands::
45+
:zephyr-app: samples/hello_world
46+
:board: qcc744m_evk
47+
:goals: build
48+
49+
#. ``west flash`` cannot flash QCC74x MCUs at the moment.
50+
You may first acquire 'QConn Flash' from the QCC74x SDK and follow these instructions:
51+
52+
* Open Qconn Flash
53+
* Go to tab 'Flash Utils'
54+
* Select appropriate flash port and interface.
55+
* Reset board (press RESET, right button) while holding the BOOT (left) button to enter flash mode
56+
* In 'Flash Program', browse to ``bsp/board/qcc744dk/config/boot2_qcc743_isp_release_v8.1.9.bin`` from the SDK and set the address to 0x0
57+
* Press the 'Download' Button
58+
* Enter Flash mode again
59+
* In 'Flash Program', browse to zephyr.bin from your build folder and set the address to 0x2000
60+
* Press the 'Download' Button again.
61+
62+
Your board is now flashed. Once the first binary has been flashed at 0x0, there is no need to re-flash it
63+
unless the flash area containing it is erased.
64+
65+
#. Run your favorite terminal program to listen for output. Under Linux the
66+
terminal should be :code:`/dev/ttyACM1`. For example:
67+
68+
.. code-block:: console
69+
70+
$ screen /dev/ttyACM1 115200
71+
72+
Connection should be configured as follows:
73+
74+
- Speed: 115200
75+
- Data: 8 bits
76+
- Parity: None
77+
- Stop bits: 1
78+
79+
Then, press and release RESET button
80+
81+
.. code-block:: console
82+
83+
*** Booting Zephyr OS build v4.2.0 ***
84+
Hello World! qcc744m_evk/bl618m05q2i
85+
86+
Congratulations, you have ``qcc744m_evk`` configured and running Zephyr.
87+
88+
89+
.. _Qualcomm QCC74x MCU Datasheet:
90+
https://docs.qualcomm.com/bundle/publicresource/topics/80-WL743-1
91+
92+
.. _Qualcomm QCC74x MCU Programming Manual:
93+
https://docs.qualcomm.com/bundle/publicresource/topics/80-58740-1/
94+
95+
.. _Qualcomm QCC744M EVK Quick Start Guide:
96+
https://docs.qualcomm.com/bundle/publicresource/topics/80-WL740-250/landingpage.html
97+
98+
.. _Qualcomm QCC74x SDK:
99+
https://git.codelinaro.org/clo/qcc7xx/QCCSDK-QCC74x
100+
101+
.. _qcc744m_evk Schematics:
102+
https://docs.qualcomm.com/bundle/publicresource/80-78831-41_REV_AC_QCC744M_Evaluation_Kit_Reference_Schematic.pdf
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <dt-bindings/pinctrl/bl618x-pinctrl.h>
8+
9+
&pinctrl {
10+
uart0_default: uart0_default {
11+
group1 {
12+
pinmux = <GPIO22_UART0_RX>,
13+
<GPIO21_UART0_TX>;
14+
bias-pull-up;
15+
input-schmitt-enable;
16+
};
17+
};
18+
19+
uart0_sleep: uart0_sleep {
20+
group1 {
21+
pinmux = <GPIO22_UART0_RX>,
22+
<GPIO21_UART0_TX>;
23+
bias-high-impedance;
24+
};
25+
};
26+
};
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <bflb/bl618.dtsi>
8+
#include "qcc744m-pinctrl.dtsi"
9+
10+
/ {
11+
model = "Qualcomm QCC744M Module";
12+
compatible = "qcom,qcc744";
13+
14+
chosen {
15+
zephyr,flash = &flash0;
16+
zephyr,code-partition = &slot0_partition;
17+
zephyr,itcm = &sram1;
18+
zephyr,sram = &sram0;
19+
zephyr,console = &uart0;
20+
zephyr,shell-uart = &uart0;
21+
};
22+
};
23+
24+
&cpu0 {
25+
clock-frequency = <DT_FREQ_M(320)>;
26+
};
27+
28+
&flashctrl {
29+
flash0: flash@A0000000 {
30+
compatible = "soc-nv-flash", "giantec,25q64a";
31+
reg = <0xA0000000 (0x800000 - 0x2000)>;
32+
write-block-size = <256>;
33+
erase-block-size = <DT_SIZE_K(4)>;
34+
35+
partitions {
36+
compatible = "fixed-partitions";
37+
#address-cells = <1>;
38+
#size-cells = <1>;
39+
40+
slot0_partition: partition@0 {
41+
label = "image-0";
42+
reg = <0x00000000 0x00100000>;
43+
read-only;
44+
};
45+
46+
storage_partition: partition@100000 {
47+
label = "storage";
48+
reg = <0x00100000 (0x700000 - 0x2000)>;
49+
};
50+
};
51+
};
52+
};
53+
54+
&uart0 {
55+
status = "okay";
56+
current-speed = <115200>;
57+
58+
pinctrl-0 = <&uart0_default>;
59+
pinctrl-1 = <&uart0_sleep>;
60+
pinctrl-names = "default", "sleep";
61+
};
62+
63+
&gpio0 {
64+
status = "okay";
65+
};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*
2+
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
&pinctrl {
8+
i2c0_default: i2c0_default {
9+
group1 {
10+
pinmux = <GPIO24_I2C0_SCL>,
11+
<GPIO23_I2C0_SDA>;
12+
bias-pull-up;
13+
input-schmitt-enable;
14+
};
15+
};
16+
17+
spi0_default: spi0_default {
18+
group1 {
19+
pinmux = <GPIO31_SPI_MOSI>,
20+
<GPIO30_SPI_MISO>,
21+
<GPIO29_SPI_SCLK>;
22+
bias-pull-up;
23+
input-schmitt-enable;
24+
};
25+
};
26+
};
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright (c) 2025 MASSDRIVER EI (massdriver.space)
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/dts-v1/;
8+
9+
#include "qcc744m.dtsi"
10+
#include "qcc744m_evk-pinctrl.dtsi"
11+
12+
/ {
13+
model = "Qualcomm QCC744M Evaluation Board";
14+
15+
aliases {
16+
sw0 = &button_0;
17+
};
18+
19+
buttons {
20+
compatible = "gpio-keys";
21+
22+
button_0: sw0 {
23+
/* To use, CH347 DTR1 jumper must be removed */
24+
gpios = <&gpio0 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>;
25+
zephyr,code = <INPUT_KEY_0>;
26+
};
27+
};
28+
};
29+
30+
&cpu0 {
31+
clock-frequency = <DT_FREQ_M(320)>;
32+
};
33+
34+
&flashctrl {
35+
flash0: flash@A0000000 {
36+
compatible = "soc-nv-flash", "giantec,25q64a";
37+
reg = <0xA0000000 (0x800000 - 0x2000)>;
38+
write-block-size = <256>;
39+
erase-block-size = <DT_SIZE_K(4)>;
40+
41+
partitions {
42+
compatible = "fixed-partitions";
43+
#address-cells = <1>;
44+
#size-cells = <1>;
45+
46+
slot0_partition: partition@0 {
47+
label = "image-0";
48+
reg = <0x00000000 0x00100000>;
49+
read-only;
50+
};
51+
52+
storage_partition: partition@100000 {
53+
label = "storage";
54+
reg = <0x00100000 (0x700000 - 0x2000)>;
55+
};
56+
};
57+
};
58+
};
59+
60+
&i2c0 {
61+
status = "okay";
62+
clock-frequency = <I2C_BITRATE_STANDARD>;
63+
64+
pinctrl-0 = <&i2c0_default>;
65+
pinctrl-names = "default";
66+
};
67+
68+
&spi0 {
69+
status = "okay";
70+
71+
pinctrl-0 = <&spi0_default>;
72+
pinctrl-names = "default";
73+
};

0 commit comments

Comments
 (0)