SD reader seems working (actually Read+Write+Seek)

This commit is contained in:
pca006132 2020-06-11 13:03:53 +08:00
parent d539597f56
commit 38e5162ee0
2 changed files with 7 additions and 4 deletions

View File

@ -57,7 +57,12 @@ pub fn main_core0() {
// buffer.set_len(128);
// }
let mut buffer: [u8; 1000] = [0; 1000];
reader.seek(SeekFrom::Start(1000));
for i in 0..buffer.len() {
buffer[i] = (i % 64) as u8;
}
// just trying randomly access some portion of the memory...
reader.write(&buffer[0..800]).unwrap();
reader.seek(SeekFrom::Start(30)).unwrap();
reader.read(&mut buffer).unwrap();
for i in 0..buffer.len() {
info!("buffer[{}] = {:0X}", i, buffer[i]);

View File

@ -1,6 +1,5 @@
use core_io::{BufRead, Error, ErrorKind, Read, Result as IoResult, Seek, SeekFrom, Write};
use libboard_zynq::sdio::{sd_card::SdCard, CmdTransferError};
use log::debug;
fn cmd_error_to_io_error(_: CmdTransferError) -> Error {
Error::new(ErrorKind::Other, "Command transfer error")
@ -102,7 +101,6 @@ impl<'a> Read for SdReader<'a> {
fn read(&mut self, buf: &mut [u8]) -> IoResult<usize> {
let total_length = buf.len();
let (a, b, c) = self.block_align_mut(buf);
debug!("{}, {}, {}", a.len(), b.len(), c.len());
self.read_unaligned(a)?;
if b.len() > 0 {
// invalidate internal buffer
@ -156,7 +154,7 @@ impl<'a> Write for SdReader<'a> {
self.byte_addr / BLOCK_SIZE as u32,
(b.len() / BLOCK_SIZE) as u16,
b,
);
).map_err(cmd_error_to_io_error)?;
}
self.write_unaligned(c)?;
Ok(buf.len())