Форум Микро-Чип

Форум Микро-Чип (http://www.microchip.su/index.php)
-   Продукция MICROCHIP (http://www.microchip.su/forumdisplay.php?f=6)
-   -   USB + PIC18F4550, не понял, как работает (http://www.microchip.su/showthread.php?t=8398)

themaster 07.02.2010 13:57

USB + PIC18F4550, не понял, как работает
 
Решил перевести своё СОМ-устройство на USB. К делу хочется подойти основательно, посему проштудировал фолиант USB System Architecture от Don Anderson, просмотрел datasheet на устройство, после чего сел курить исходники, которые идут в примерах. Хочется задать знатокам пару вопросов в стиле "как оно работает и почему так, а не иначе".
1. В главной функции написано примерно следующее:
Код:

int main(void)

    InitializeSystem();
    USBDeviceAttach();
    while(1)
    {
      .... // ну, и так далее...

То есть, сначала идёт инициализация, в конце которой указывается, что USBDeviceState = DETACHED_STATE. Потом выполняется следующая функция, СРАЗУ после которой устройство становится ATTACHED_STATE. В фолианте написано, что устройство должно дождаться, пока Его Величество Хост не соизволит снизойти до него по всей иерархии хабов и обратить внимание... я нигде не увидел функции, которая задаёт ожидание! Я плохо смотрел?
2. Кусок кода, который включает модуль USB:
Код:

        while(!U1CONbits.USBEN)
            U1CONbits.USBEN = 1;  // Enable module & attach to bus

То есть, бит включения модуля нельзя просто взять и поставить? В datasheet'е об этом вроде не сказано. Или я плохо смотрел datasheet? А это - и есть ожидание, о котором спрашивается в первом пункте?
3. Довольно много где встречается директив условной комплияции USB_SUPPORT_OTG. Что такое OTG - написано в Википедии. В datasheet'е по устройству ничего про него не написано; то есть, его нет, и соответствующие куски текста можно выкинуть, да?

Machine slave 07.02.2010 14:33

Re: USB + PIC18F4550, не понял, как работает
 
Цитата:

Сообщение от themaster (Сообщение 91395)
Решил перевести своё СОМ-устройство на USB. К делу хочется подойти основательно, посему проштудировал фолиант USB System Architecture от Don Anderson, просмотрел datasheet на устройство, после чего сел курить исходники, которые идут в примерах. Хочется задать знатокам пару вопросов в стиле "как оно работает и почему так, а не иначе".
1. В главной функции написано примерно следующее:
Код:

int main(void)

    InitializeSystem();
    USBDeviceAttach();
    while(1)
    {
      .... // ну, и так далее...

То есть, сначала идёт инициализация, в конце которой указывается, что USBDeviceState = DETACHED_STATE. Потом выполняется следующая функция, СРАЗУ после которой устройство становится ATTACHED_STATE. В фолианте написано, что устройство должно дождаться, пока Его Величество Хост не соизволит снизойти до него по всей иерархии хабов и обратить внимание... я нигде не увидел функции, которая задаёт ожидание! Я плохо смотрел?
2. Кусок кода, который включает модуль USB:
Код:

        while(!U1CONbits.USBEN)
            U1CONbits.USBEN = 1;  // Enable module & attach to bus

То есть, бит включения модуля нельзя просто взять и поставить? В datasheet'е об этом вроде не сказано. Или я плохо смотрел datasheet? А это - и есть ожидание, о котором спрашивается в первом пункте?
3. Довольно много где встречается директив условной комплияции USB_SUPPORT_OTG. Что такое OTG - написано в Википедии. В datasheet'е по устройству ничего про него не написано; то есть, его нет, и соответствующие куски текста можно выкинуть, да?

Если USB еще не включено, то включить модуль USB. после этого включаются внутренние подтяжки линий D+/D- в зависимости от скорости Low speed или Full speed, предварительно настроенные в регистре UCFG. Хост определяет подключение устройства к шине именно по подтяжке.
Да в в семействе 18Fx55x нет OTG. Это есть в PIC24 и PIC32.

Petya 08.02.2010 01:57

Re: USB + PIC18F4550, не понял, как работает
 
1. Ожидание - это время с момента подключения (state = ATTACHED_STATE) до сброса (state = DEFAULT_STATE) . Оно кончается в момент установки флага URSTIF (периодически проверяется в UsbDeviceTasks())
2. Возможно, в какой-нибудь errat'е есть что-то об этом.

Vlad&mir 08.02.2010 02:17

Re: USB + PIC18F4550, не понял, как работает
 
Цитата:

Сообщение от themaster (Сообщение 91395)
3. Довольно много где встречается директив условной комплияции USB_SUPPORT_OTG. Что такое OTG - написано в Википедии. В datasheet'е по устройству ничего про него не написано; то есть, его нет, и соответствующие куски текста можно выкинуть, да?

Вы даже не представляете, сколько там "можно выкинуть". http://upload.caxapa.ru/USB_CDC.rar :)

Petya 08.02.2010 03:09

Re: USB + PIC18F4550, не понял, как работает
 
Цитата:

Сообщение от Petya (Сообщение 91481)
1. Ожидание - это время с момента подключения (state = ATTACHED_STATE) до сброса (state = DEFAULT_STATE) . Оно кончается в момент установки флага URSTIF (периодически проверяется в UsbDeviceTasks())
2. Возможно, в какой-нибудь errat'е есть что-то об этом.

не то написал: не с момента подключения у-ва, а с момента подключения подт. резистора (state = POWERED_STATE)


Часовой пояс GMT +3, время: 07:15.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot