LPC4350 USBD_API and SD/MMC - карты объемом более 4GB - может кому нить время сэкономит. Оживляя плату с LPC4350 на борту от HITEX столкнулся с проблемой.
У NXP в контроллер встроена ROM с поддержкой USB mass storage. Удобно. Говоришь просто что нужен MassStorage - и все работает.
Но параметр который передается в ф-цию выглядит так
typedef struct USBD_MSC_INIT_PARAM
{
uint32_t BlockCount; /**< Number of blocks present in the mass storage device */
uint32_t BlockSize; /**< Block size in number of bytes */
uint32_t MemorySize; /**< Memory size in number of bytes */
}
Обратите внимание - передается кол-во блоков, размер блока и общий размер памяти....
Причем общий размер памяти 32 бита - т.е. до 4GB
NXP ответил -
Dmitry,
Unfortunately the MSC class in our USB ROM drivers does not support volume sizes larger than 4gb in size. To do this using the ROM drivers you would need to implement your own MSC class using the custom class interface.
Regards
Зашибись....
В процессе реализации своего стэка меня торкнуло...
попробовал указать MemorySize=0xFFFFFFFF
В этом случае реальный размер вычисляется как BlockSize*BlockCount
Заработало.
Т.е.
capacity = BlockSize * BlockSize
If capacity < 4GB then
USBD_MSC_INIT_PARAM_T::MemorySize = capacity
USBD_MSC_INIT_PARAM_T::BlockSize = BlockSize
USBD_MSC_INIT_PARAM_T::BlockCount = BlockSize
If capacity >= 4GB
USBD_MSC_INIT_PARAM_T::MemorySize = 0xFFFFFFFF
USBD_MSC_INIT_PARAM_T::BlockSize = BlockSize
USBD_MSC_INIT_PARAM_T::BlockCount = BlockSize