Ejemplo n.º 1
0
int sdcard_write_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_write_block(sector);
  if (err < 0) return err;

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

  return result.error;
}
Ejemplo n.º 2
0
/**
  * @brief  Write data to the medium
  * @param  lun : logical unit number
  * @param  buf : Pointer to the buffer to write from
  * @param  blk_addr :  address of 1st block to be written
  * @param  blk_len : nmber of blocks to be read
  * @retval Status
  */
int8_t SDCARD_STORAGE_Write(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) {
    // TODO replace with call to sdcard_write_multi_blocks
    for (int i = 0; i < blk_len; i++) {
        if (!sdcard_write_block(buf + i * SDCARD_BLOCK_SIZE, blk_addr + i)) {
            return -1;
        }
    }
    /*
  if( SD_WriteMultiBlocks (buf, blk_addr * 512, 512, blk_len) != 0) {
    return -1;
  }
#ifndef USE_STM3210C_EVAL
  SD_WaitWriteOperation();
  while (SD_GetStatus() != SD_TRANSFER_OK);
#endif
*/
    return 0;
}