Hello Joe,
For KSDK 2.0, there is a middleware for memories like SD cards and MMC. If you look at: <KSDK_2_0_PATH>\middleware\sdmmc_2.0.0 there is folder that include basic support for these memories through different interfaces such as SDHC and SPI (It depends on which MCU you are using, you may be able to use any of these interfaces).
This middleware is intended to provide the layer where communication with cards is performed, however, user should create its own peripherals APIs for configuring baud rate, module/pin initialization, sending/reading data through desired interface (SPI).
Basically, you'll need to add these files for your project:

Then, you will have to create functions needed for this middleware to communicate through SPI:
/*! @brief SDSPI host state. */
typedef struct _sdspi_host
{
uint32_t busBaudRate; /*!< Bus baud rate */
status_t (*setFrequency)(uint32_t frequency); /*!< Set frequency of SPI */
status_t (*exchange)(uint8_t *in, uint8_t *out, uint32_t size); /*!< Exchange data over SPI */
uint32_t (*getCurrentMilliseconds)(void); /*!< Get current time in milliseconds */
} sdspi_host_t;
These functions are:
- One function that will configure SPI to desired frequency/baud rate.
- One function to write/read from SPI and take/save data from/to in/out buffers.
- One function to get current milliseconds count. Some functions for SD cards manage timeouts and it is needed a "timing" function.
After these functions are defined, driver for SD cards through SPI might be complete.
Next step is to call these APIs every time that a read/write procedure for USB MSD interface is needed. For this, you can use the USB MSD SD card example available for FRDM-K64F to check the exact procedure that application takes to initialize/communicate over USB. This example is available at: <SDK_2.0_FRDM-K64F_PATH>\boards\frdmk64f\usb_examples\usb_device_msc_sdcard\bm.
For example, there is a section where SD is initialized, and you will need to replace some functions inside this USB_DeviceMscSdhcInit to perform communication with SD through SPI interface. Some of these functions are already defined in the fsl_sdspi.h driver that were included before.

And in MSD's callback, you must replace APIs that write/read to/from SD, to those functions that are already defined in fsl_sdspi.h:

This should be the best way to implement SD card support on USB MSD + CDC example. (I'd strongly recommend to implement this on USB MSD device example before adapting to MSD + CDC example)
i hope this can help you!
Best Regards,
Isaac