Ensure that the chip-select pin is high at the end of a frame transaction
This commit is contained in:
parent
200a676a7c
commit
6c6681d579
1 changed files with 20 additions and 16 deletions
|
|
@ -32,30 +32,34 @@ impl<Spi: Transfer<u8> + Write<u8>, ChipSelect: OutputPin> Bus for FourWire<Spi,
|
||||||
let control_phase = block << 3;
|
let control_phase = block << 3;
|
||||||
let data_phase = data;
|
let data_phase = data;
|
||||||
self.cs.set_low().map_err(FourWireError::ChipSelectError)?;
|
self.cs.set_low().map_err(FourWireError::ChipSelectError)?;
|
||||||
self.spi
|
let result = (|| {
|
||||||
.write(&address_phase)
|
self.spi
|
||||||
.and_then(|_| self.spi.write(&[control_phase]))
|
.write(&address_phase)
|
||||||
.map_err(FourWireError::WriteError)?;
|
.and_then(|_| self.spi.write(&[control_phase]))
|
||||||
self.spi
|
.map_err(FourWireError::WriteError)?;
|
||||||
.transfer(data_phase)
|
self.spi
|
||||||
.map_err(FourWireError::TransferError)?;
|
.transfer(data_phase)
|
||||||
|
.map_err(FourWireError::TransferError)?;
|
||||||
|
Ok(())
|
||||||
|
})();
|
||||||
self.cs.set_high().map_err(FourWireError::ChipSelectError)?;
|
self.cs.set_high().map_err(FourWireError::ChipSelectError)?;
|
||||||
|
result
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
fn write_frame(&mut self, block: u8, address: u16, data: &[u8]) -> Result<(), Self::Error> {
|
fn write_frame(&mut self, block: u8, address: u16, data: &[u8]) -> Result<(), Self::Error> {
|
||||||
let address_phase = address.to_be_bytes();
|
let address_phase = address.to_be_bytes();
|
||||||
let control_phase = block << 3 | WRITE_MODE_MASK;
|
let control_phase = block << 3 | WRITE_MODE_MASK;
|
||||||
let data_phase = data;
|
let data_phase = data;
|
||||||
self.cs.set_low().map_err(FourWireError::ChipSelectError)?;
|
self.cs.set_low().map_err(FourWireError::ChipSelectError)?;
|
||||||
self.spi
|
let result = (|| {
|
||||||
.write(&address_phase)
|
self.spi
|
||||||
.and_then(|_| self.spi.write(&[control_phase]))
|
.write(&address_phase)
|
||||||
.and_then(|_| self.spi.write(data_phase))
|
.and_then(|_| self.spi.write(&[control_phase]))
|
||||||
.map_err(FourWireError::WriteError)?;
|
.and_then(|_| self.spi.write(data_phase))
|
||||||
|
.map_err(FourWireError::WriteError)?;
|
||||||
|
Ok(())
|
||||||
|
})();
|
||||||
self.cs.set_high().map_err(FourWireError::ChipSelectError)?;
|
self.cs.set_high().map_err(FourWireError::ChipSelectError)?;
|
||||||
|
result
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue