static int _sector_count(int argc, char **argv) { (void)argc; (void)argv; printf("available sectors on card: %li\n", sdcard_spi_get_sector_count(card)); return 0; }
/** * @brief perform miscellaneous low-level control functions * * @param[in] pdrv Physical drive nmuber (0..) * @param[in out] cmd Control code * @param[in] sector Buffer to send/receive control data * * @return RES_OK if no error occurred * @return RES_ERROR if an error occurred * @return RES_PARERR if an error occurred */ DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff) { #if (_USE_MKFS == 1) sdcard_spi_t *card = get_sd_card(pdrv); #endif switch (cmd) { #if (_FS_READONLY == 0) case CTRL_SYNC: /* r/w is always finished within r/w-functions of sdcard_spi */ return RES_OK; #endif #if (_USE_MKFS == 1) case GET_SECTOR_COUNT: if ((card != NULL) && card->init_done) { *(DWORD *)buff = sdcard_spi_get_sector_count(card); return RES_OK; } else { return RES_ERROR; } case GET_BLOCK_SIZE: if ((card != NULL) && card->init_done) { /* erase block size in unit of sector */ *(DWORD *)buff = sdcard_spi_get_au_size(card) / SD_HC_BLOCK_SIZE; return RES_OK; } *(DWORD *)buff = 0; return RES_ERROR; #endif #if (_MAX_SS != _MIN_SS) case GET_SECTOR_SIZE: *buff = SD_HC_BLOCK_SIZE; return RES_OK; #endif #if (_USE_TRIM == 1) case CTRL_TRIM: return RES_OK; #endif } return RES_PARERR; }