Пример #1
0
int sdcard_read_block_sync (uint32_t sector) {
  int err;
  sdcard_data_t result;
  result.fired = false;
  result.error = TOCK_SUCCESS;

  err = sdcard_set_callback(sdcard_cb, (void*) &result);
  if (err < 0) return err;

  err = sdcard_read_block(sector);
  if (err < 0) return err;

  // wait for callback
  yield_for(&result.fired);

  return result.error;
}
Пример #2
0
/**
  * @brief  Read data from the medium
  * @param  lun : logical unit number
  * @param  buf : Pointer to the buffer to save data
  * @param  blk_addr :  address of 1st block to be read
  * @param  blk_len : nmber of blocks to be read
  * @retval Status
  */
int8_t SDCARD_STORAGE_Read(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) {
    // TODO replace with call to sdcard_read_multi_blocks
    for (int i = 0; i < blk_len; i++) {
        if (!sdcard_read_block(buf + i * SDCARD_BLOCK_SIZE, blk_addr + i)) {
            return -1;
        }
    }
    /*
    if (SD_ReadMultiBlocks(buf, blk_addr * 512, 512, blk_len) != 0) {
        return -1;
    }
#ifndef USE_STM3210C_EVAL
    SD_WaitReadOperation();
    while (SD_GetStatus() != SD_TRANSFER_OK);
#endif
*/
   return 0;
}