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

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

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

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

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

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

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

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

Спасибо.

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


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

Прочтите эту книгу:

http://lord-n.narod.ru/walla.html#AgurovPI_PK

и диск с примерами находится рядом.

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


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

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

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


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

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

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

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

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

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

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

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

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

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