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; }
/** * @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; }