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

    

WinXP, USB, STR912 - как сделать чтоб винда увидела АРМ как дисковый накопитель, файлы которого расположены во флэше

Доброго времени суток. В комплекте с отладочной платой IAR STR912-SK шли мощные исходники, один из которых превращал плату в MassStorage - то есть можно было всунуть флэшкарточку в разъем на плате, виндовс через УСБ-порт определял плату как дисковый накопитель (без драйверов) и можно было смотреть-редактировать файлы с карточки. На неискушенного начинающего разработчика это произвело те же впечатления, какие произвело блестящее зеркальце на туземцев с племени Тумба-Юмба!

Дальнейшее изучение громоздкого исходника ввело этого же разработчика в состояние легкой прострации. Задача состоит в написании программки для STR912, которая настроит его следующим образом:

- соединение через УСБ

- виндовс определит дисковый накопитель (появится новый диск)

- на накопителе будет несколько маленьких файлов (размещенные во флэш-памяти АРМа по определенным адресам), эти файлы будут видны в виндовсе и можно просмотреть их содержимое и модифицировать.

Прошу отослать к литературе, которая обьяснит - какой пакет данных АРМ должен отправить через УСБ, чтоб его определили как нужное устройство, с нужным файловым соодержимым.

Спасибо.

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


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

Vladimir_T, примите запоздалое СПАСИБО)

итак, процессор STR912FAW44

 

в документации на него - в частности в описании усб контроллера - имеется двоякое трактование структуры Packet buffer areas: на стр.362 показано чередование областей ADDR и COUNT каждой контр.точки

.....................

ADDR0_TX

COUNT0_TX

ADDR0_RX

COUNT0_RX

......................

 

а в описании на стр.391 указано, что 32-битный регистр USB_ADDRn содержит два 16-битных ADDR, то есть чередование получается

.....................

ADDR0_TX

ADDR0_RX

COUNT0_TX

COUNT0_RX

......................

 

собственно говоря - вопрос: какова истинная структура Packet buffer areas.

спасибо за внимание.

 

и еще.

после анализа громоздких исходников, которые шли к ИАРу, была сделана попытка простейшей инициализации усб-контроллера (для отладочной платы STR912-SK) согласно даташиту. то есть лаконично написать все то, что там было размазано

 

 

#include <iostr912f.h>

int main ()

{

SCU_PRR0_bit.RST_USB = 0; //USB RESET enable

SCU_PCGR0_bit.USB48M = 0; //1: 48 MHz USB clock stop

SCU_PCGR0_bit.USB = 1; //1: USB peripheral clock running

SCU_PRR0_bit.RST_USB = 1; //USB RESET disable

 

SCU_PCGR1_bit.GPIO7 = 1; //GPIO7 ON

SCU_PRR1_bit.RST_GPIO7 = 1; //GPIO7 RESET disable

SCU_GPIOOUT7 = 0x5555; // GPIOOUT7

GPIO7_DIR = 0x01; // output

 

SCU_CLKCNTR_bit.USBSEL = 0x0; //USB 48 MHz Clock Selection 00: fMSTR (default)

USB_CNTR = 1; //1: Force a reset of the USB Peripheral,

SCU_PCGR0_bit.USB48M = 1; //1: 48 MHz USB clock running

GPIO7_DATA = 0xFF; // output

 

// Init controls endpoints

 

// Clear USB Reset

USB_CNTR_bit.FRES = 0;

USB_CNTR_bit.ESOFM = 0;

USB_CNTR_bit.RESUME = 0;

USB_CNTR_bit.LP_MODE = 0;

USB_CNTR_bit.FSUSP = 0; // Must be 0

 

USB_BTABLE = 0x07E8;

USB_DADDR = 0x0080;

 

 

*((long*)0x700007E8) = 0x00080000; // установка адресов для двух буферов точки0

*((long*)0x700007EC) = 0x10080008; //установка COUNT для них же

USB_ISTR = 0;

USB_CNTR = 0;

 

 

 

USB_EP0R = 0x3230;

USB_EP1R = 0x00;

USB_EP2R = 0x00;

 

GPIO7_DATA = 0xFE; // output

 

 

 

m22:

if (USB_ISTR_bit.CTR == 0) goto m22;

for(;;) ;

 

}

=====================================================================

предполагалось, что в буфер точки0, который расположен в начале Buffer table усб-контроллера, окажется запрос компутера о дескрипторах или статусе устройства (то есть буфер изменит свое содержимое) и будет установлен USB_ISTR_bit.CTR (Correct Transfer: This bit is set by the hardware to indicate that an Endpoint has successfully completed a transaction). но ничего этого не происходит((

чего сделали не так?

Изменено пользователем s868

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация