aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorFelipe Balbi <[email protected]>2025-12-11 09:48:32 -0800
committerFelipe Balbi <[email protected]>2025-12-11 09:48:32 -0800
commit86de5d04b91f38ab4322eaa8ff5b0f371824b57a (patch)
treef758f462bd3cc7f670fdb7613282d1beaedefb95 /tests
parentaf02ef481498441289a6decfe3baf7f3878f7871 (diff)
parent3588023e3e04b18cf98a2a0d10756e1f236ca351 (diff)
Merge remote-tracking branch 'upstream/main' into mcxa/trng
Diffstat (limited to 'tests')
-rw-r--r--tests/rp/src/bin/cyw43-perf.rs2
-rw-r--r--tests/stm32/src/bin/sdmmc.rs92
-rw-r--r--tests/stm32/src/bin/usart.rs44
3 files changed, 98 insertions, 40 deletions
diff --git a/tests/rp/src/bin/cyw43-perf.rs b/tests/rp/src/bin/cyw43-perf.rs
index 9487f5e1a..1ef9cf066 100644
--- a/tests/rp/src/bin/cyw43-perf.rs
+++ b/tests/rp/src/bin/cyw43-perf.rs
@@ -98,7 +98,7 @@ async fn main(spawner: Spawner) {
98 { 98 {
99 Ok(_) => break, 99 Ok(_) => break,
100 Err(err) => { 100 Err(err) => {
101 panic!("join failed with status={}", err.status); 101 panic!("join failed: {:?}", err);
102 } 102 }
103 } 103 }
104 } 104 }
diff --git a/tests/stm32/src/bin/sdmmc.rs b/tests/stm32/src/bin/sdmmc.rs
index 9f9c526e1..07422c42e 100644
--- a/tests/stm32/src/bin/sdmmc.rs
+++ b/tests/stm32/src/bin/sdmmc.rs
@@ -7,7 +7,8 @@ mod common;
7use common::*; 7use common::*;
8use defmt::assert_eq; 8use defmt::assert_eq;
9use embassy_executor::Spawner; 9use embassy_executor::Spawner;
10use embassy_stm32::sdmmc::{DataBlock, Sdmmc}; 10use embassy_stm32::sdmmc::Sdmmc;
11use embassy_stm32::sdmmc::sd::{CmdBlock, DataBlock, StorageDevice};
11use embassy_stm32::time::mhz; 12use embassy_stm32::time::mhz;
12use embassy_stm32::{bind_interrupts, peripherals, sdmmc}; 13use embassy_stm32::{bind_interrupts, peripherals, sdmmc};
13use {defmt_rtt as _, panic_probe as _}; 14use {defmt_rtt as _, panic_probe as _};
@@ -28,16 +29,16 @@ async fn main(_spawner: Spawner) {
28 // Arbitrary block index 29 // Arbitrary block index
29 let block_idx = 16; 30 let block_idx = 16;
30 31
31 let mut pattern1 = DataBlock([0u8; 512]); 32 let mut pattern1 = DataBlock::new();
32 let mut pattern2 = DataBlock([0u8; 512]); 33 let mut pattern2 = DataBlock::new();
33 for i in 0..512 { 34 for i in 0..512 {
34 pattern1[i] = i as u8; 35 pattern1[i] = i as u8;
35 pattern2[i] = !i as u8; 36 pattern2[i] = !i as u8;
36 } 37 }
37 let patterns = [pattern1.clone(), pattern2.clone()]; 38 let patterns = [pattern1.clone(), pattern2.clone()];
38 39
39 let mut block = DataBlock([0u8; 512]); 40 let mut block = DataBlock::new();
40 let mut blocks = [DataBlock([0u8; 512]), DataBlock([0u8; 512])]; 41 let mut blocks = [DataBlock::new(), DataBlock::new()];
41 42
42 // ======== Try 4bit. ============== 43 // ======== Try 4bit. ==============
43 info!("initializing in 4-bit mode..."); 44 info!("initializing in 4-bit mode...");
@@ -54,43 +55,80 @@ async fn main(_spawner: Spawner) {
54 Default::default(), 55 Default::default(),
55 ); 56 );
56 57
57 let mut err = None; 58 let mut cmd_block = CmdBlock::new();
58 loop {
59 match s.init_sd_card(mhz(24)).await {
60 Ok(_) => break,
61 Err(e) => {
62 if err != Some(e) {
63 info!("waiting for card: {:?}", e);
64 err = Some(e);
65 }
66 }
67 }
68 }
69 59
70 let card = unwrap!(s.card()); 60 let mut storage = loop {
71 61 if let Ok(storage) = StorageDevice::new_sd_card(&mut s, &mut cmd_block, mhz(24)).await {
72 info!("Card: {:#?}", Debug2Format(card)); 62 break storage;
73 info!("Clock: {}", s.clock()); 63 }
64 };
65
66 let card = storage.card();
67
68 info!("Card: {:#?}", Debug2Format(&card));
69 info!("Clock: {}", storage.sdmmc.clock());
70
71 // card_type: HighCapacity,
72 // ocr: OCR: Operation Conditions Register {
73 // Voltage Window (mV): (2700, 3600),
74 // S18A (UHS-I only): true,
75 // Over 2TB flag (SDUC only): false,
76 // UHS-II Card: false,
77 // Card Capacity Status (CSS): \"SDHC/SDXC/SDUC\",
78 // Busy: false },
79 // rca: 43690,
80 // cid: CID: Card Identification { Manufacturer ID: 3,
81 // OEM ID: \"SD\",
82 // Product Name: \"SL08G\",
83 // Product Revision: 128,
84 // Product Serial Number: 701445767,
85 // Manufacturing Date: (9,
86 // 2015) },
87 // csd: CSD: Card Specific Data { Transfer Rate: 50,
88 // Block Count: 15523840,
89 // Card Size (bytes): 7948206080,
90 // Read I (@min VDD): 100 mA,
91 // Write I (@min VDD): 10 mA,
92 // Read I (@max VDD): 5 mA,
93 // Write I (@max VDD): 45 mA,
94 // Erase Size (Blocks): 1 },
95 // scr: SCR: SD CARD Configuration Register { Version: Unknown,
96 // 1-bit width: false,
97 // 4-bit width: true },
98 // status: SD Status { Bus Width: One,
99 // Secured Mode: false,
100 // SD Memory Card Type: 0,
101 // Protected Area Size (B): 0,
102 // Speed Class: 0,
103 // Video Speed Class: 0,
104 // Application Performance Class: 0,
105 // Move Performance (MB/s): 0,
106 // AU Size: 0,
107 // Erase Size (units of AU): 0,
108 // Erase Timeout (s): 0,
109 // Discard Support: false } }
110
111 defmt::assert!(card.scr.bus_width_four());
74 112
75 info!("writing pattern1..."); 113 info!("writing pattern1...");
76 s.write_block(block_idx, &pattern1).await.unwrap(); 114 storage.write_block(block_idx, &pattern1).await.unwrap();
77 115
78 info!("reading..."); 116 info!("reading...");
79 s.read_block(block_idx, &mut block).await.unwrap(); 117 storage.read_block(block_idx, &mut block).await.unwrap();
80 assert_eq!(block, pattern1); 118 assert_eq!(block, pattern1);
81 119
82 info!("writing pattern2..."); 120 info!("writing pattern2...");
83 s.write_block(block_idx, &pattern2).await.unwrap(); 121 storage.write_block(block_idx, &pattern2).await.unwrap();
84 122
85 info!("reading..."); 123 info!("reading...");
86 s.read_block(block_idx, &mut block).await.unwrap(); 124 storage.read_block(block_idx, &mut block).await.unwrap();
87 assert_eq!(block, pattern2); 125 assert_eq!(block, pattern2);
88 126
89 info!("writing blocks [pattern1, pattern2]..."); 127 info!("writing blocks [pattern1, pattern2]...");
90 s.write_blocks(block_idx, &patterns).await.unwrap(); 128 storage.write_blocks(block_idx, &patterns).await.unwrap();
91 129
92 info!("reading blocks..."); 130 info!("reading blocks...");
93 s.read_blocks(block_idx, &mut blocks).await.unwrap(); 131 storage.read_blocks(block_idx, &mut blocks).await.unwrap();
94 assert_eq!(&blocks, &patterns); 132 assert_eq!(&blocks, &patterns);
95 133
96 drop(s); 134 drop(s);
diff --git a/tests/stm32/src/bin/usart.rs b/tests/stm32/src/bin/usart.rs
index 0b98d3eeb..ef7efe96a 100644
--- a/tests/stm32/src/bin/usart.rs
+++ b/tests/stm32/src/bin/usart.rs
@@ -6,6 +6,7 @@ mod common;
6use common::*; 6use common::*;
7use defmt::{assert, assert_eq, unreachable}; 7use defmt::{assert, assert_eq, unreachable};
8use embassy_executor::Spawner; 8use embassy_executor::Spawner;
9use embassy_stm32::mode::Blocking;
9use embassy_stm32::usart::{Config, ConfigError, Error, Uart}; 10use embassy_stm32::usart::{Config, ConfigError, Error, Uart};
10use embassy_time::{Duration, Instant, block_for}; 11use embassy_time::{Duration, Instant, block_for};
11 12
@@ -24,22 +25,41 @@ async fn main(_spawner: Spawner) {
24 let config = Config::default(); 25 let config = Config::default();
25 let mut usart = Uart::new_blocking(usart.reborrow(), rx.reborrow(), tx.reborrow(), config).unwrap(); 26 let mut usart = Uart::new_blocking(usart.reborrow(), rx.reborrow(), tx.reborrow(), config).unwrap();
26 27
27 // We can't send too many bytes, they have to fit in the FIFO. 28 let test_usart = async |usart: &mut Uart<'_, Blocking>| -> Result<(), Error> {
28 // This is because we aren't sending+receiving at the same time. 29 // We can't send too many bytes, they have to fit in the FIFO.
30 // This is because we aren't sending+receiving at the same time.
29 31
30 let data = [0xC0, 0xDE]; 32 let data = [0xC0, 0xDE];
31 usart.blocking_write(&data).unwrap(); 33 usart.blocking_write(&data)?;
32 34
33 let mut buf = [0; 2]; 35 let mut buf = [0; 2];
34 usart.blocking_read(&mut buf).unwrap(); 36 usart.blocking_read(&mut buf)?;
35 assert_eq!(buf, data); 37 assert_eq!(buf, data);
36 38
37 // Test flush doesn't hang. 39 // Test flush doesn't hang.
38 usart.blocking_write(&data).unwrap(); 40 usart.blocking_write(&data)?;
39 usart.blocking_flush().unwrap(); 41 usart.blocking_flush()?;
40 42
41 // Test flush doesn't hang if there's nothing to flush 43 // Test flush doesn't hang if there's nothing to flush
42 usart.blocking_flush().unwrap(); 44 usart.blocking_flush()?;
45
46 Ok(())
47 };
48
49 let mut is_ok = false;
50 for _ in 0..3 {
51 match test_usart(&mut usart).await {
52 Ok(()) => is_ok = true,
53 Err(Error::Noise) => is_ok = false,
54 Err(e) => defmt::panic!("{}", e),
55 }
56
57 if is_ok {
58 break;
59 }
60 }
61
62 assert!(is_ok);
43 } 63 }
44 64
45 // Test error handling with with an overflow error 65 // Test error handling with with an overflow error