@@ -314,8 +314,15 @@ impl Sdio {
314
314
315
315
/// Read a block from the card
316
316
pub fn read_block ( & mut self , blockaddr : u32 , block : & mut [ u8 ; 512 ] ) -> Result < ( ) , Error > {
317
- let _card = self . card ( ) ?;
317
+ let card = self . card ( ) ?;
318
318
319
+ // Always write 1 block of 512 bytes
320
+ // SDSC cards are byte addressed hence the blockaddress is in multiples of 512 bytes
321
+ let blockaddr = match card. capacity {
322
+ CardCapacity :: SDSC => blockaddr * 512 ,
323
+ _ => blockaddr,
324
+ } ;
325
+
319
326
self . cmd ( cmd:: set_block_length ( 512 ) ) ?;
320
327
self . start_datapath_transfer ( 512 , 9 , true ) ;
321
328
self . cmd ( cmd:: read_single_block ( blockaddr) ) ?;
@@ -350,7 +357,14 @@ impl Sdio {
350
357
351
358
/// Write a block to card
352
359
pub fn write_block ( & mut self , blockaddr : u32 , block : & [ u8 ; 512 ] ) -> Result < ( ) , Error > {
353
- let _card = self . card ( ) ?;
360
+ let card = self . card ( ) ?;
361
+
362
+ // Always write 1 block of 512 bytes
363
+ // SDSC cards are byte addressed hence the blockaddress is in multiples of 512 bytes
364
+ let blockaddr = match card. capacity {
365
+ CardCapacity :: SDSC => blockaddr * 512 ,
366
+ _ => blockaddr,
367
+ } ;
354
368
355
369
self . cmd ( cmd:: set_block_length ( 512 ) ) ?;
356
370
self . start_datapath_transfer ( 512 , 9 , false ) ;
0 commit comments