From f68623eba5fa02c9e3bfdda5b6f0f07493de6f39 Mon Sep 17 00:00:00 2001 From: Benjamin Koch <bbbsnowball@gmail.com> Date: Fri, 9 Jun 2023 20:35:09 +0200 Subject: [PATCH] add page offset for flash read The record number of Modbus is not enough to address 2 MB of flash memory so we add an additional offset. --- firmware/rust1/src/bin/heizung.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs index 053e15b..af64a4f 100644 --- a/firmware/rust1/src/bin/heizung.rs +++ b/firmware/rust1/src/bin/heizung.rs @@ -335,6 +335,7 @@ struct ModBusRegs<'a> { adc_data: &'a AdcData, device_state: u16, scratch: u16, + page_offset_for_flash_read: u16, uf2updater: UF2UpdateHandler<FLASH_SIZE>, consistent_read_type: ReadType, @@ -462,6 +463,7 @@ impl<'a> ModbusRegisters for ModBusRegs<'a> { 0 => Ok(self.device_state), 1 => Ok(42), 2 => Ok(self.scratch), + 3 => Ok(self.page_offset_for_flash_read), _ => Err(ModbusErrorCode::IllegalDataAddress), } } @@ -507,6 +509,7 @@ impl<'a> ModbusRegisters for ModBusRegs<'a> { } }, 2 => { self.scratch = value; Ok(value) }, + 3 => { self.page_offset_for_flash_read = value; Ok(value) }, _ => Err(ModbusErrorCode::IllegalDataAddress), } } @@ -528,7 +531,8 @@ impl<'a> ModbusRegisters for ModBusRegs<'a> { }, (6, 1) => { pusher.push_fn(record_length as usize * 2, |buf| { - self.uf2updater.flash.read(record_number as u32 * 2, buf) + let flash_addr = self.page_offset_for_flash_read as u32 * 512 + record_number as u32 * 2; + self.uf2updater.flash.read(flash_addr, buf) .map_err(|err| { info!("Error reading flash: {:?}", err); ModbusErrorCode::ServerDeviceFailure @@ -631,6 +635,7 @@ async fn main2(spawner: Spawner) { adc_data: &ADC_DATA, device_state: DEVICE_STATE_RESET | DEVICE_STATE_RESPOND_DETECT, scratch: 0, + page_offset_for_flash_read: 0, uf2updater: UF2UpdateHandler::new(p.FLASH), consistent_read_type: ReadType::InputRegister, consistent_read_addr: u16::default(), -- GitLab