aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorgoueslati <[email protected]>2023-05-15 10:25:02 +0100
committergoueslati <[email protected]>2023-05-15 10:25:02 +0100
commitd97724cca3164250118c732759f403f4f94d4629 (patch)
tree10a69d2f4fd843a08b3c75fa94afc223087d6350 /examples
parent3810fe6a2058d04054c7242216a7bc9d2993667b (diff)
tl_mbox read and write
Diffstat (limited to 'examples')
-rw-r--r--examples/stm32wb/src/bin/tl_mbox.rs6
-rw-r--r--examples/stm32wb/src/bin/tl_mbox_tx_rx.rs96
2 files changed, 101 insertions, 1 deletions
diff --git a/examples/stm32wb/src/bin/tl_mbox.rs b/examples/stm32wb/src/bin/tl_mbox.rs
index 6876526ae..ccd01cbc7 100644
--- a/examples/stm32wb/src/bin/tl_mbox.rs
+++ b/examples/stm32wb/src/bin/tl_mbox.rs
@@ -4,6 +4,7 @@
4 4
5use defmt::*; 5use defmt::*;
6use embassy_executor::Spawner; 6use embassy_executor::Spawner;
7use embassy_stm32::interrupt;
7use embassy_stm32::ipcc::{Config, Ipcc}; 8use embassy_stm32::ipcc::{Config, Ipcc};
8use embassy_stm32::tl_mbox::TlMbox; 9use embassy_stm32::tl_mbox::TlMbox;
9use embassy_time::{Duration, Timer}; 10use embassy_time::{Duration, Timer};
@@ -40,7 +41,10 @@ async fn main(_spawner: Spawner) {
40 let config = Config::default(); 41 let config = Config::default();
41 let mut ipcc = Ipcc::new(p.IPCC, config); 42 let mut ipcc = Ipcc::new(p.IPCC, config);
42 43
43 let mbox = TlMbox::init(&mut ipcc); 44 let rx_irq = interrupt::take!(IPCC_C1_RX);
45 let tx_irq = interrupt::take!(IPCC_C1_TX);
46
47 let mbox = TlMbox::init(&mut ipcc, rx_irq, tx_irq);
44 48
45 loop { 49 loop {
46 let wireless_fw_info = mbox.wireless_fw_info(); 50 let wireless_fw_info = mbox.wireless_fw_info();
diff --git a/examples/stm32wb/src/bin/tl_mbox_tx_rx.rs b/examples/stm32wb/src/bin/tl_mbox_tx_rx.rs
new file mode 100644
index 000000000..315172df8
--- /dev/null
+++ b/examples/stm32wb/src/bin/tl_mbox_tx_rx.rs
@@ -0,0 +1,96 @@
1#![no_std]
2#![no_main]
3#![feature(type_alias_impl_trait)]
4
5use defmt::*;
6use embassy_executor::Spawner;
7use embassy_stm32::interrupt;
8use embassy_stm32::ipcc::{Config, Ipcc};
9use embassy_stm32::tl_mbox::TlMbox;
10use {defmt_rtt as _, panic_probe as _};
11
12#[embassy_executor::main]
13async fn main(_spawner: Spawner) {
14 /*
15 How to make this work:
16
17 - Obtain a NUCLEO-STM32WB55 from your preferred supplier.
18 - Download and Install STM32CubeProgrammer.
19 - Download stm32wb5x_FUS_fw.bin, stm32wb5x_BLE_Stack_full_fw.bin, and Release_Notes.html from
20 gh:STMicroelectronics/STM32CubeWB@2234d97/Projects/STM32WB_Copro_Wireless_Binaries/STM32WB5x
21 - Open STM32CubeProgrammer
22 - On the right-hand pane, click "firmware upgrade" to upgrade the st-link firmware.
23 - Once complete, click connect to connect to the device.
24 - On the left hand pane, click the RSS signal icon to open "Firmware Upgrade Services".
25 - In the Release_Notes.html, find the memory address that corresponds to your device for the stm32wb5x_FUS_fw.bin file
26 - Select that file, the memory address, "verify download", and then "Firmware Upgrade".
27 - Once complete, in the Release_Notes.html, find the memory address that corresponds to your device for the
28 stm32wb5x_BLE_Stack_full_fw.bin file. It should not be the same memory address.
29 - Select that file, the memory address, "verify download", and then "Firmware Upgrade".
30 - Disconnect from the device.
31 - In the examples folder for stm32wb, modify the memory.x file to match your target device.
32 - Run this example.
33
34 Note: extended stack versions are not supported at this time. Do not attempt to install a stack with "extended" in the name.
35 */
36
37 let p = embassy_stm32::init(Default::default());
38 info!("Hello World!");
39
40 let config = Config::default();
41 let mut ipcc = Ipcc::new(p.IPCC, config);
42
43 let rx_irq = interrupt::take!(IPCC_C1_RX);
44 let tx_irq = interrupt::take!(IPCC_C1_TX);
45
46 let mbox = TlMbox::init(&mut ipcc, rx_irq, tx_irq);
47
48 // initialize ble stack, does not return a response
49 // mbox.shci_ble_init(&mut ipcc, Default::default());
50
51 info!("waiting for coprocessor to boot");
52 let event_box = mbox.read().await;
53
54 let mut payload = [0u8; 6];
55 event_box.copy_into_slice(&mut payload).unwrap();
56
57 let event_packet = event_box.evt();
58 let kind = event_packet.evt_serial.kind;
59
60 // means recieved SYS event, which indicates in this case that the coprocessor is ready
61 if kind == 0x12 {
62 let code = event_packet.evt_serial.evt.evt_code;
63 let payload_len = event_packet.evt_serial.evt.payload_len;
64
65 info!(
66 "==> kind: {:#04x}, code: {:#04x}, payload_length: {}, payload: {:#04x}",
67 kind,
68 code,
69 payload_len,
70 payload[3..]
71 );
72 }
73
74 mbox.shci_ble_init(&mut ipcc, Default::default());
75
76 info!("resetting BLE");
77 mbox.send_ble_cmd(&mut ipcc, &[0x01, 0x03, 0x0c]);
78
79 let event_box = mbox.read().await;
80
81 let mut payload = [0u8; 7];
82 event_box.copy_into_slice(&mut payload).unwrap();
83
84 let event_packet = event_box.evt();
85 let kind = event_packet.evt_serial.kind;
86
87 let code = event_packet.evt_serial.evt.evt_code;
88 let payload_len = event_packet.evt_serial.evt.payload_len;
89
90 info!(
91 "==> kind: {:#04x}, code: {:#04x}, payload_length: {}, payload: {:#04x}",
92 kind, code, payload_len, payload
93 );
94
95 loop {}
96}