реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Посылка данных отUSB Mass Storage Device
lecko
сообщение Oct 19 2011, 08:44
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 22-08-11
Пользователь №: 66 820



Всем привет!

Имеется устройство на базе МК 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 (например, через какой-нибудь регистр) и в этом ли вообще дело? Или, выражаясь по-другому, как избавиться от функции задержки?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016