Skip to content
Snippets Groups Projects
Commit f68623eb authored by Benjamin Koch's avatar Benjamin Koch
Browse files

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.
parent e7d608bd
No related branches found
No related tags found
No related merge requests found
......@@ -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(),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment