Перейти к содержанию
    

Посылка данных отUSB Mass Storage Device

Всем привет!

 

Имеется устройство на базе МК LPC2478, которое при подключении к компьютеру определяется как Mass Storage Device. Имеется код, который по специальной команде (отличающейся от стандартной команды чтения) должен послать 512 байт из массива. Вот код

 

BYTE * buffer=(BYTE * )malloc(sizeof(BYTE)*512);
DWORD res;
BYTE i=0,j=0;    
CSW.dDataResidue = 512;                
BulkStage=MSC_BS_DATA_IN;
fill(0,buffer,135,1);//заполняем массив
while(CSW.dDataResidue>0)
{
    delayMs(0,1);
    USB_WriteEP(MSC_EP_IN, (BYTE*)&mci_buffer[i*64],64);                    
    CSW.dDataResidue-=64;
    i++;
} 
BulkStage = MSC_BS_DATA_IN_LAST;
CSW.bStatus = CSW_CMD_PASSED;                 
free(mci_buffer);

 

В таком виде код работает. Однако если удалить строчку

delayMs(0,1);

, то передача не проходит. Насколько я понимаю, для отработки функции USB_WriteEP требуется какое-то время.

 

Код функции USB_WriteEP взят из стандартной библиотеки Keil

DWORD USB_WriteEP (DWORD EPNum, BYTE *pData, DWORD cnt) {
  DWORD n;

  USB_CTRL = ((EPNum & 0x0F) << 2) | CTRL_WR_EN;

  TX_PLENGTH = cnt;

  for (n = 0; n < (cnt + 3) / 4; n++) {
    TX_DATA = *((__packed DWORD *)pData);
    pData += 4;
  }    
  USB_CTRL = 0;

  WrCmd(CMD_SEL_EP(EPAdr(EPNum)));
  WrCmd(CMD_VALID_BUF);    
  return (cnt);
}

 

Вопрос: можно ли как-то отследить состояние выполнения записи на endpoint (например, через какой-нибудь регистр) и в этом ли вообще дело? Или, выражаясь по-другому, как избавиться от функции задержки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...