From cc34871ebef2513f69ce52f8f8f717473e701ec2 Mon Sep 17 00:00:00 2001 From: Felipe Balbi Date: Mon, 8 Dec 2025 08:44:50 -0800 Subject: review comments --- examples/mcxa/Cargo.toml | 1 + examples/mcxa/src/bin/crc.rs | 103 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 84 insertions(+), 20 deletions(-) (limited to 'examples/mcxa') diff --git a/examples/mcxa/Cargo.toml b/examples/mcxa/Cargo.toml index 4d0459f41..19d8d8657 100644 --- a/examples/mcxa/Cargo.toml +++ b/examples/mcxa/Cargo.toml @@ -8,6 +8,7 @@ publish = false [dependencies] cortex-m = { version = "0.7", features = ["critical-section-single-core"] } cortex-m-rt = { version = "0.7", features = ["set-sp", "set-vtor"] } +crc = "3.4.0" critical-section = "1.2.0" defmt = "1.0" defmt-rtt = "1.0" diff --git a/examples/mcxa/src/bin/crc.rs b/examples/mcxa/src/bin/crc.rs index 12c423980..0125e625c 100644 --- a/examples/mcxa/src/bin/crc.rs +++ b/examples/mcxa/src/bin/crc.rs @@ -6,6 +6,28 @@ use hal::config::Config; use hal::crc::Crc; use {defmt_rtt as _, embassy_mcxa as hal, panic_probe as _}; +const CCITT_FALSE: crc::Algorithm = crc::Algorithm { + width: 16, + poly: 0x1021, + init: 0xffff, + refin: false, + refout: false, + xorout: 0, + check: 0x29b1, + residue: 0x0000, +}; + +const POSIX: crc::Algorithm = crc::Algorithm { + width: 32, + poly: 0x04c1_1db7, + init: 0, + refin: false, + refout: false, + xorout: 0xffff_ffff, + check: 0x765e_7680, + residue: 0x0000, +}; + #[embassy_executor::main] async fn main(_spawner: Spawner) { let config = Config::default(); @@ -19,72 +41,113 @@ async fn main(_spawner: Spawner) { // CCITT False + let sw_crc = crc::Crc::::new(&CCITT_FALSE); + let mut digest = sw_crc.digest(); + digest.update(&buf_u8); + let sw_sum = digest.finalize(); + let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u8); - assert_eq!(sum, 0x9627); + crc.feed(&buf_u8); + let sum = crc.finalize(); + assert_eq!(sum, sw_sum); let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u16); + crc.feed(&buf_u16); + let sum = crc.finalize(); assert_eq!(sum, 0xa467); let mut crc = Crc::new_ccitt_false(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u32); + crc.feed(&buf_u32); + let sum = crc.finalize(); assert_eq!(sum, 0xe5c7); // Maxim + let sw_crc = crc::Crc::::new(&crc::CRC_16_MAXIM_DOW); + let mut digest = sw_crc.digest(); + digest.update(&buf_u8); + let sw_sum = digest.finalize(); + let mut crc = Crc::new_maxim(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u8); - assert_eq!(sum, 0x4ff7); + crc.feed(&buf_u8); + let sum = crc.finalize(); + assert_eq!(sum, sw_sum); let mut crc = Crc::new_maxim(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u16); + crc.feed(&buf_u16); + let sum = crc.finalize(); assert_eq!(sum, 0x2afe); let mut crc = Crc::new_maxim(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u32); + crc.feed(&buf_u32); + let sum = crc.finalize(); assert_eq!(sum, 0x17d7); // Kermit + let sw_crc = crc::Crc::::new(&crc::CRC_16_KERMIT); + let mut digest = sw_crc.digest(); + digest.update(&buf_u8); + let sw_sum = digest.finalize(); + let mut crc = Crc::new_kermit(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u8); - assert_eq!(sum, 0xccd2); + crc.feed(&buf_u8); + let sum = crc.finalize(); + assert_eq!(sum, sw_sum); let mut crc = Crc::new_kermit(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u16); + crc.feed(&buf_u16); + let sum = crc.finalize(); assert_eq!(sum, 0x66eb); let mut crc = Crc::new_kermit(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u32); + crc.feed(&buf_u32); + let sum = crc.finalize(); assert_eq!(sum, 0x75ea); // ISO HDLC + let sw_crc = crc::Crc::::new(&crc::CRC_32_ISO_HDLC); + let mut digest = sw_crc.digest(); + digest.update(&buf_u8); + let sw_sum = digest.finalize(); + let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u8); - assert_eq!(sum, 0x24c2_316d); + crc.feed(&buf_u8); + let sum = crc.finalize(); + assert_eq!(sum, sw_sum); let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u16); + crc.feed(&buf_u16); + let sum = crc.finalize(); assert_eq!(sum, 0x8a61_4178); let mut crc = Crc::new_iso_hdlc(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u32); + crc.feed(&buf_u32); + let sum = crc.finalize(); assert_eq!(sum, 0xfab5_d04e); // POSIX + let sw_crc = crc::Crc::::new(&POSIX); + let mut digest = sw_crc.digest(); + digest.update(&buf_u8); + let sw_sum = digest.finalize(); + let mut crc = Crc::new_posix(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u8); - assert_eq!(sum, 0xba8d_7868); + crc.feed(&buf_u8); + let sum = crc.finalize(); + + assert_eq!(sum, sw_sum); let mut crc = Crc::new_posix(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u16); + crc.feed(&buf_u16); + let sum = crc.finalize(); assert_eq!(sum, 0x6d76_4f58); let mut crc = Crc::new_posix(p.CRC0.reborrow()); - let sum = crc.feed(&buf_u32); + crc.feed(&buf_u32); + let sum = crc.finalize(); assert_eq!(sum, 0x2a5b_cb90); defmt::info!("CRC successful"); -- cgit