Отговори на тема  [ 27 мнения ]  Отиди на страница Предишна  1, 2
USB въпрос 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 10:41 am
Мнения: 1664
Мнение Re: USB въпрос
Във WIN10 е пренаписано изцяло CDC-то.
За Mass Storage, увеличи броя на интерфейсите в композит дескриптора. Добави MSD дескрипторите, инициализирай и MSD - виж само ендпоинтите да са различни, и готово. Наскоро пусках HID, CDC, MSD че и принтер. И четирите си работят заедно без проблем.


Съб Май 07, 2016 6:19 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 2:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение Re: USB въпрос
Супер - колко ендпойнта ти трябваха за 4-те?


Нед Май 08, 2016 1:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 10:41 am
Мнения: 1664
Мнение Re: USB въпрос
Dimitar написа:
Супер - колко ендпойнта ти трябваха за 4-те?



9

Код:
const struct usb_config_descriptor config_composite = {
   .bLength = USB_DT_CONFIGURATION_SIZE,
   .bDescriptorType = USB_DT_CONFIGURATION,
   .wTotalLength = 0,
   [b].bNumInterfaces = 4,[/b]
   .bConfigurationValue = 1,
   .iConfiguration = 0,
   .bmAttributes = 0x80,
   .bMaxPower = 0x32,

   .interface = ifaces_composite,
};


Код:
const struct usb_interface ifaces_composite[] = {{
   .num_altsetting = 1,
      .iface_assoc = &assoc_descriptor,
      .altsetting = comm_iface,
}, {
   .num_altsetting = 1,
      .altsetting = data_iface,
}, {
   .num_altsetting = 1,
      .altsetting = printer_iface,
}, {
      .num_altsetting = 1,
         .altsetting = msc_iface_composite,
}, {
      .num_altsetting = 1,
         .altsetting = hid_iface_composite,
}};


Пон Май 09, 2016 10:36 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 12:01 pm
Мнения: 2202
Мнение Re: USB въпрос
Може ли малко съдействие? Имам платка с работещо USB. Хардуерно всичко ми е наред. Имам въпросната платка, както с PIC18F45K50, така и с PIC18F25K50. Имам работеща версия със CDC и HID на CCS и CDC на Микрошит. Правил съм различни модификации. Сега искам да сложа HID на Microchip, но не ми се получава. Виндоуса открива у-вото и установявам успешно връзка. И до там. Ни приема, ни предава.
Програмата съм я направил на база примера от библиотеката HID_CUSTOM. Не е проблема в апа на PC-то. Пробвах, както с този от библиотеката, както и с мой, работещ 100%. Имам чувството, че пропускам някаква процедура, която трябва да се изпълнява периодично.
Ето конфигурацията:
Код:
// CONFIG1L
#pragma config PLLSEL = PLL4X   // PLL Selection (4x clock multiplier)
#pragma config CFGPLLEN = ON    // PLL Enable Configuration bit (PLL Enabled)
#pragma config CPUDIV = CLKDIV2 // CPU System Clock Postscaler (CPU uses system clock divided by 2)
#pragma config LS48MHZ = SYS24X4// Low Speed USB mode with 48 MHz system clock (System clock at 24 MHz, USB clock divider is set to 4)

// CONFIG1H
#pragma config FOSC = HSH       // Oscillator Selection (HS oscillator, high power 16MHz to 25MHz)
#pragma config PCLKEN = ON      // Primary Oscillator Shutdown (Primary oscillator enabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config nPWRTEN = OFF    // Power-up Timer Enable (Power up timer disabled)
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable (BOR enabled in hardware (SBOREN is ignored))
#pragma config BORV = 190       // Brown-out Reset Voltage (BOR set to 1.9V nominal)
#pragma config nLPBOR = OFF     // Low-Power Brown-out Reset (Low-Power Brown-out Reset disabled)

// CONFIG2H
#pragma config WDTEN = OFF      // Watchdog Timer Enable bits (WDT disabled in hardware (SWDTEN ignored))
#pragma config WDTPS = 32768    // Watchdog Timer Postscaler (1:32768)

// CONFIG3H
#pragma config CCP2MX = RC1     // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = ON      // PORTB A/D Enable bit (PORTB<5:0> pins are configured as analog input channels on Reset)
#pragma config T3CMX = RC0      // Timer3 Clock Input MUX bit (T3CKI function is on RC0)
#pragma config SDOMX = RB3      // SDO Output MUX bit (SDO function is on RB3)
#pragma config MCLRE = ON       // Master Clear Reset Pin Enable (MCLR pin enabled; RE3 input disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset (Stack full/underflow will cause Reset)
#pragma config LVP = ON         // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled if MCLRE is also 1)
#pragma config ICPRT = OFF      // Dedicated In-Circuit Debug/Programming Port Enable (ICPORT disabled)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled)

// CONFIG5L
#pragma config CP0 = OFF        // Block 0 Code Protect (Block 0 is not code-protected)
#pragma config CP1 = OFF        // Block 1 Code Protect (Block 1 is not code-protected)
#pragma config CP2 = OFF        // Block 2 Code Protect (Block 2 is not code-protected)
#pragma config CP3 = OFF        // Block 3 Code Protect (Block 3 is not code-protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protect (Boot block is not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protect (Data EEPROM is not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Block 0 Write Protect (Block 0 (0800-1FFFh) is not write-protected)
#pragma config WRT1 = OFF       // Block 1 Write Protect (Block 1 (2000-3FFFh) is not write-protected)
#pragma config WRT2 = OFF       // Block 2 Write Protect (Block 2 (04000-5FFFh) is not write-protected)
#pragma config WRT3 = OFF       // Block 3 Write Protect (Block 3 (06000-7FFFh) is not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Registers Write Protect (Configuration registers (300000-3000FFh) are not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protect (Boot block (0000-7FFh) is not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protect (Data EEPROM is not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Block 0 Table Read Protect (Block 0 is not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Block 1 Table Read Protect (Block 1 is not protected from table reads executed in other blocks)
#pragma config EBTR2 = OFF      // Block 2 Table Read Protect (Block 2 is not protected from table reads executed in other blocks)
#pragma config EBTR3 = OFF      // Block 3 Table Read Protect (Block 3 is not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protect (Boot block is not protected from table reads executed in other blocks)

48MHz клок за пълна скорост.
Тук искам да отбележа, че при CCS се избира HSH, както в случая, за да работи. Опитах и с HSM - безрезултат. Много е вероятно да има някакъв чалъм с тези неща, защото копирах настройките от CCS и там работи така...
В най-общи линии основната ми програма е следната:
Код:
SYSTEM_Initialize(SYSTEM_STATE_USB_START);
USBDeviceInit();
USBDeviceAttach();
while(1)
    {
        SYSTEM_Tasks();

        #if defined(USB_POLLING)
            // Interrupt or polling method.  If using polling, must call
            // this function periodically.  This function will take care
            // of processing and responding to SETUP transactions
            // (such as during the enumeration process when you first
            // plug in).  USB hosts require that USB devices should accept
            // and process SETUP packets in a timely fashion.  Therefore,
            // when using polling, this function should be called
            // regularly (such as once every 1.8ms or faster** [see
            // inline code comments in usb_device.c for explanation when
            // "or faster" applies])  In most cases, the USBDeviceTasks()
            // function does not take very long to execute (ex: <100
            // instruction cycles) before it returns.
            USBDeviceTasks();
        #endif

        //Application specific tasks
        APP_DeviceCustomHIDTasks();

    }//end while

APP_DeviceCustomHIDTasks() е същата като в библиотеката. Пробвах на WIN XP - същата работа.
Някакви идеи?!

_________________
www.elkran.com


Вто Май 16, 2017 4:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2593
Местоположение: Велико Търново / София
Мнение Re: USB въпрос
Осцилатора, виж дали осцилира с осцилоскоп. Ама щом се енумерира устройството - явно осцилира.
На Microchp няма ли примерна програма ?
Да не би да ползваш USB_POLLING и програмата ти да бави проверките.
Другото е може да има особеност на Microchip библиотеките. По принцип на демо платките следят и някои неща, захранване, бутони и не тръгват иначе стековете. Тази библиотека която ползваш нз дали следи нещо на някой пин.
Ако не ползваш готов стек, а си сглобяваш сам проекта, доста неща трябва да се сменят, не само дескрипторите.
За сега не се сещам друго.

_________________
https://github.com/slav4ocom/


Сря Май 17, 2017 9:12 am
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Съб Май 21, 2016 8:47 pm
Мнения: 476
Местоположение: Бургас
Мнение Re: USB въпрос
Защо не пробваш с вътрешния осцилатор как е?
Код:
       #pragma config PLLSEL   = PLL3X     // 3X PLL multiplier selected
        #pragma config CFGPLLEN = ON       // PLL turned on during execution
        #pragma config CPUDIV   = NOCLKDIV  // 1:1 mode (for 48MHz CPU)
        #pragma config LS48MHZ  = SYS48X8   // Clock div / 8 in Low Speed USB mode
        #pragma config FOSC     = INTOSCIO  // HFINTOSC selected at powerup, no clock out
        #pragma config PCLKEN   = OFF       // Primary oscillator driver
        #pragma config FCMEN    = OFF       // Fail safe clock monitor

Мисля, че имаше и още една опция, която трябваше да се пипне:
Код:
   #if defined(PIC18F45K50)
        //Configure oscillator settings for clock settings compatible with USB
        //operation.  Note: Proper settings depends on USB speed (full or low).
        #if(USB_SPEED_OPTION == USB_FULL_SPEED)
            OSCTUNE = 0x80; //3X PLL ratio mode selected
            OSCCON = 0x70;  //Switch to 16MHz HFINTOSC
            OSCCON2 = 0x10; //Enable PLL, SOSC, PRI OSC drivers turned off
            while(OSCCON2bits.PLLRDY != 1);   //Wait for PLL lock
            *((unsigned char*)0xFB5) = 0x90;  //Enable active clock tuning for USB operation
        #endif
#endif


Сря Май 17, 2017 10:21 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 12:01 pm
Мнения: 2202
Мнение Re: USB въпрос
Търсих ама няма втора дефиниция. Писма ни. Ще се върна на CDC и толкова.
Благодаря, все пак!

_________________
www.elkran.com


Чет Май 18, 2017 9:31 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2593
Местоположение: Велико Търново / София
Мнение Re: USB въпрос
Добре де то няма ли готови примери за HID и само да си допишеш кода с твоите неща ?

_________________
https://github.com/slav4ocom/


Чет Май 18, 2017 12:56 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 7:57 pm
Мнения: 600
Местоположение: Белград
Мнение Re: USB въпрос
stoyanoff написа:
Търсих ама няма втора дефиниция. Писма ни. Ще се върна на CDC и толкова.
Благодаря, все пак!

Не съм гледал кода, но от това, което ми се е случвало, когато устройството се разпознава коректно, а няма обмен на данни, най-често е:
1. Грешка в report дескриптора.
2. Несъответствие между предаваните данни и report дескриптора(разминаване между предаваните байтове и очакваните по дефинициите в report дескриптора).

За начало: Провери дали е спазено правилото за кратност на осем на битовете, които са зададени в report дескриптора.

_________________
http://www.szrefekt.com


Пон Юни 12, 2017 1:29 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 11:02 am
Мнения: 3070
Местоположение: София
Мнение Re: USB въпрос
slav4o.com написа:
Добре де то няма ли готови примери за HID и само да си допишеш кода с твоите неща ?


Има разбира се. Поялната ми станция е с HID на микрочеп, на PIC32. Преди това го бях подкарал и с PIC18, ако помня добре. Не помня да съм имал някакви грижи.


Пон Юни 12, 2017 3:44 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Съб Май 21, 2016 8:47 pm
Мнения: 476
Местоположение: Бургас
Мнение Re: USB въпрос
Да изровя малко темата от чакъла.
Опитвам се да подкарам HID на PIC18F27J53. Имам работещ код за 18F2550 (и за 25K50 е същия- разликата е в сетването на един бит). Прехвърлих го на J53, оправих fuse-тата и кода се компилира (на С18, на базата на HID demo на МС е). Включвам кабела към компа и насреща ми изписва- USB устройството не е разпознато- липсва дескриптор, т.е. PID e 0x0000, и му стои удивителната. Сменил съм три кабела и три компа с три различни ОС- навсякъде е едно и също.
Някой може ли да удари едно рамо каква е разликата в инициализацията на USB на двата контролера? Видях, че BDT им е на различни адреси, но в кода е предвидено това.
Ето и fuse и първите редове след него, да не би да бъркам още оттам:
Код:
#include <p18F27J53.h>

// CONFIG1L
#pragma config WDTEN = OFF      // Watchdog Timer (Disabled - Controlled by SWDTEN bit)
#pragma config PLLDIV = 12      // PLL Prescaler Selection (Divide by 12 (48 MHz oscillator input))
#pragma config CFGPLLEN = ON    // PLL Enable Configuration Bit (PLL Enabled)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset (Enabled)
#pragma config XINST = OFF      // Extended Instruction Set (Disabled)

// CONFIG1H
#pragma config CPUDIV = OSC1    // CPU System Clock Postscaler (No CPU system clock divide)
#pragma config CP0 = OFF        // Code Protect (Program memory is not code-protected)

// CONFIG2L
#pragma config OSC = INTOSCPLL  // Oscillator (INTOSCPLL)
#pragma config SOSCSEL = HIGH   // T1OSC/SOSC Power Selection Bits (High Power T1OSC/SOSC circuit selected)
#pragma config CLKOEC = OFF     // EC Clock Out Enable Bit  (CLKO output disabled on the RA6 pin)
#pragma config FCMEN = OFF       // Fail-Safe Clock Monitor (Enabled)
#pragma config IESO = OFF       // Internal External Oscillator Switch Over Mode (Disabled)

// CONFIG2H
#pragma config WDTPS = 32768    // Watchdog Postscaler (1:32768)

// CONFIG3L
#pragma config DSWDTOSC = INTOSCREF// DSWDT Clock Select (DSWDT uses T1OSC/T1CKI)
#pragma config RTCOSC = T1OSCREF// RTCC Clock Select (RTCC uses T1OSC/T1CKI)
#pragma config DSBOREN = OFF    // Deep Sleep BOR (Disabled)
#pragma config DSWDTEN = OFF    // Deep Sleep Watchdog Timer (Disabled)
#pragma config DSWDTPS = G2     // Deep Sleep Watchdog Postscaler (1:2,147,483,648 (25.7 days))

// CONFIG3H
#pragma config IOL1WAY = OFF     // IOLOCK One-Way Set Enable bit (The IOLOCK bit (PPSCON<0>) can be set once)
#pragma config ADCSEL = BIT12   // ADC 10 or 12 Bit Select (12 - Bit ADC Enabled)
#pragma config MSSP7B_EN = MSK7 // MSSP address masking (7 Bit address masking mode)

// CONFIG4L
#pragma config WPFP = PAGE_127  // Write/Erase Protect Page Start/End Location (Write Protect Program Flash Page 127)
#pragma config WPCFG = OFF      // Write/Erase Protect Configuration Region  (Configuration Words page not erase/write-protected)

// CONFIG4H
#pragma config WPDIS = OFF      // Write Protect Disable bit (WPFP<6:0>/WPEND region ignored)
#pragma config WPEND = PAGE_WPFP //PAGE_WPFP// Write/Erase Protect Region Select bit (valid when WPDIS = 0) (Pages WPFP<6:0> through Configuration Words erase/write protected)
#pragma config LS48MHZ = SYS48X8// Low Speed USB mode with 48 MHz system clock bit (System clock at 48 MHz USB CLKEN divide-by is set to 8)


// ****************

#pragma udata
#pragma udata USB_VARIABLES=0x500
unsigned char ReceivedDataBuffer[80];
unsigned char ToSendDataBuffer[80];
#pragma udata


USB_HANDLE USBOutHandle = 0;
USB_HANDLE USBInHandle = 0;





Пет Мар 15, 2024 10:55 am
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Съб Май 21, 2016 8:47 pm
Мнения: 476
Местоположение: Бургас
Мнение Re: USB въпрос
Справих се. Прочетох по-бавно Чаршафът на PIC-a в USB частта. ;)


Пон Мар 18, 2024 8:13 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 27 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 7 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни