Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » CH55x (CH551 CH552 CH554)


CH55x (CH551 CH552 CH554)

Сообщений 61 страница 90 из 162

61

Про Type-C вот что имеется в виду - у мк есть выводы UCC1, UCC2, VBUS1, VBUS2 и есть регистр управления ими
http://sh.uploads.ru/3OfUN.png
Комбинации битов PU1_EN, PU0_EN: 00 - откл, 01 - 56К, 10 - 22К, 11 - 10К
Это всё, что есть про type-c в мануале

62

то есть реально    в корпусе   с 16 выводам  можно  задействовать 11 контактов если надо оставить поддержку  USB
1 rest
2 USB
2 питание

63

reset не обязательно, но всё равно 11 т.к. три вывода питания - vss, vdd, v33

64

значит надо взять ssop20 ещё

65

Ещё один проект на ch55 - usb composite device: mass storage + keyboard + vendor-define hid, а также i2c и oled
https://github.com/rikka0w0/CH55x_USB_CompositeDevice

66

Особенности тактирования

Встроенный генератор [с умножителем] выдаёт 96 МГц, которые потом делятся на 2 для USB и параллельно по выбору на 3|4|6|8|16|32|128|512 для Fsys [по ресету на 16 и соотв Fsys 6 МГц]
http://sh.uploads.ru/5noI8.png
Делитель для Fsys может перестраиваться на лету программно
При этом по мануалу Fsys 32 МГц [делитель 3] может быть только при питании > 4.9 В, а 24 МГц [делитель 4] - при питании > 4.0 В
Но full-speed USB на практике похоже работает только при Fsys 6 и 12 Мгц [6 МГц - минимальная Fsys для full-speed USB по мануалу]

UART0 тактируется от таймера T1 или T2, а UART1 от Fsys через перестраиваемый [1-256] предделитель
Оба UART-а требуют тактирования baudrate*16 [или *32], из-за чего приемлемую погрешность [0.2%] baudrate при Fsys 12 МГц из стандартных baudrates можно получить только для 2400, 4800, 9600, 19200 и 57600
SPI и PWM тактируются от Fsys через свои перестриваемые [1-256] предделители

Отредактировано vt (2020-09-24 21:15:23)

67

:cool:
это откуда инфа ?

68

Всё из мануала [кроме предела 12 МГц для usb - это из моей практики]

Куда пропал? На изиэлектрониксе без тебя совсем уныло стало )

69

меня там забанили навсегда

70

Запаял CH552 , пытался залить прошивку от 554 CDC  говорит неверный хекс.
Скомпилил под 552, подменив хэдеры на от 552.
Заремарил манипуляцию с хостом

Код:
void USBDeviceCfg()
{
    USB_CTRL = 0x00;                                                         
//    USB_CTRL &= ~bUC_HOST_MODE; 

Скомпилилось, правда с визгами

Код:
Rebuild target 'Target 1'
compiling CDC.C...
compiling DEBUG.C...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?CH554UART0ALTER?DEBUG
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?CH554UART0RCVBYTE?DEBUG
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_CH554UART0SENDBYTE?DEBUG
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?CH554UART1RCVBYTE?DEBUG
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_CH554WATCHDOG?DEBUG
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_CH554WATCHDOGFEED?DEBUG
*** WARNING L15: MULTIPLE CALL TO SEGMENT
    SEGMENT: ?PR?PRINTF?PRINTF
    CALLER1: ?PR?DEVICEINTERRUPT?CDC
    CALLER2: ?C_C51STARTUP
Program Size: data=91.2 xdata=251 code=4068
creating hex file from ".\Objects\CDC"...
".\Objects\CDC" - 0 Error(s), 7 Warning(s).
Build Time Elapsed:  00:00:00

Воткнул , получил в диспетчере CH554_CDC.
Автоматом дров не находит, UsbToUartDriver.inf что в папке с примером не ставится и не находится .
WIN7 64 ...
ЧЁ делать?

71

Судя по UsbToUartDriver.inf, это с электродраконовского гитхаба пример, с них и спрашивай )
Zadig можешь попробовать, он вроде умеет не только для winusb.sys, но и для usbser.sys inf-файлы делать

72

Уже начинаю въезжать. Надо было компилить пример где эмулируют CH340.
Ну в принципе не плохо для получаса въезда с нуля...

73

dosikus написал(а):

Ну в принципе не плохо для получаса въезда с нуля...

Да они лёгкие как пёрышко )
Возьми у меня с ядиска перевод мануала с правками - https://yadi.sk/d/naqKh4e03EDEJU/CH55x
И заодно обновил в форумском архиве - forumfiles.ru/files/0018/26/8f/28705.pdf

74

vt написал(а):

Судя по UsbToUartDriver.inf, это с электродраконовского гитхаба пример, с них и спрашивай )
Zadig можешь попробовать, он вроде умеет не только для winusb.sys, но и для usbser.sys inf-файлы делать

Ну да, все верно, скомпилил с форума WCH , вышел аналог CH340.
в терминале вижу эхо.

75

vt, я тебя завтра вопросами завалю, не против?

76

dosikus написал(а):

vt, я тебя завтра вопросами завалю, не против?

Заваливай
Хотя какие вопросы - usb ты уже прошёл, с touch-key я не разбирался, а больше там ничего вопросительного вроде и нет )

77

Ссылка на проект https://ru.files.fm/u/pu5z9y6a

Вижу конфигурацию точек

Код:
void USBDeviceEndPointCfg()
{
    UEP1_DMA = Ep1Buffer;                                                      //Endpoint 1 sends the data transfer address
    UEP2_DMA = Ep2Buffer;                                                      //Endpoint 2 IN data transfer address
    UEP2_3_MOD = 0xCC;                                                         //Endpoint 2/3 Single Buffer Transceiver Enable
    UEP2_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;                 //Endpoint 2 automatically flips the sync flag, IN 
                                                                                //transaction returns NAK, OUT returns ACK

    UEP1_CTRL = bUEP_AUTO_TOG | UEP_T_RES_NAK;                                 //Endpoint 1 automatically flips the sync flag, 
                                                                               //and the IN transaction returns NAK.
    UEP0_DMA = Ep0Buffer;                                                      //Endpoint 0 data transfer address
    UEP4_1_MOD = 0X40;                                                         //Endpoint 1 upload buffer; endpoint 0 single 64 byte send and receive buffer
    UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK;                                 //Manual flip, OUT transaction returns ACK, IN transaction returns NAK
}

и дескриптор

Код:
//Configuration descriptor, interface descriptor, endpoint descriptor
UINT8C CfgDesc[39]={0x09,0x02,0x27,0x00,0x01,0x01,0x00,0x80,0xf0,         
                    0x09,0x04,0x00,0x00,0x03,0xff,0x01,0x02,0x00,           
                    0x07,0x05,0x82,0x02,0x20,0x00,0x00,                  //Bulk upload endpoint
                    0x07,0x05,0x02,0x02,0x20,0x00,0x00,                  //Batch downlink endpoint    
                    0x07,0x05,0x81,0x03,0x08,0x00,0x01};                 //Interrupt upload endpoint

Понимаю так :
точка 0 для служебной информации - передачи дескрипторов и т.д.
точка 2 для булк - для приема-передачи данных

а вот для чего точка 1 ? Она и в обработчике вроде не используется .

И еще. В обработчике вывожу длину посылки и содержимое

Код:
 case UIS_TOKEN_OUT | 2:                                                 //Endpoint 2# Endpoint Batch Down
            if ( U_TOG_OK )                                                     // Out of sync packets will be dropped
            {
                len = USB_RX_LEN;                                               //Receive data length, data is stored from the first address of Ep2Buffer
            	  printf( "\nlen=%u\n",(UINT8)len );
                for ( i = 0; i < len; i ++ )
                {
                    Ep2Buffer[MAX_PACKET_SIZE+i] = Ep2Buffer[i];         // OUT data is inverted to IN verified by computer
                	  printf( "%c",Ep2Buffer[i]);
                }
                UEP2_T_LEN = len;
                UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_ACK;       // Allow upload
            }

С какого-то лешего длина всегда больше или равно 256 , но тут скорей глюки кайловского принтф ...

И еще - как ты переводишь пдф ? Конвертишь в odt ? Чем?

Далее , правильно ли понимаю что регистры UEPx_DMA  содержат указатели на буферы для внутреннего DMA ?
Работа которого скрыта от юзера и нихрена не описана...

78

Такс с принтф разобрался , нужен был модификатор b.

Код:
printf( "\nlen=%bu\n",(UINT8)len );

79

dosikus написал(а):

а вот для чего точка 1 ?

Это лучше у Eddy_Em спрашивать, он с протоколом ch340 развлекается

dosikus написал(а):

И еще - как ты переводишь пдф ? Конвертишь в odt ? Чем?

Я только добавляю в готовый odt, который Blinkinlabs сделали

dosikus написал(а):

Далее , правильно ли понимаю что регистр UEPx_DMA  содержат указатели на буферы для внутреннего DMA ?

Ну да, адреса буферов, а сами буферы в xram

80

vt, тогда перефразирую :

Правильно ли понял:
точка 0 для служебной информации - передачи дескрипторов и т.д.
точка 2 для булк - для приема-передачи данных

81

dosikus написал(а):

vt, тогда перефразирую :

Правильно ли понял:
точка 0 для служебной информации - передачи дескрипторов и т.д.
точка 2 для булк - для приема-передачи данных

Точка 0 - да, для всех протоколов usb
Точка 2 - зависит от протокола верхнего уровня

82

vt, Еще одно , почему при старте сюда попадает 3 раза?

printf( "\n..zz..\n" ); <-

Код:
   if (UIF_SUSPEND)                                                                 //USB bus suspend/wake up
    {
        UIF_SUSPEND = 0;
        if ( USB_MIS_ST & bUMS_SUSPEND )                                             //Hang
        {
#ifdef DE_PRINTF
            printf( "\n..zz..\n" );                                                          //Sleep state
#endif
            while ( XBUS_AUX & bUART0_TX )
            {
                ;    //Waiting for transmission to complete
            }
            SAFE_MOD = 0x55;
            SAFE_MOD = 0xAA;
            WAKE_CTRL = bWAK_BY_USB | bWAK_RXD0_LO; //USB or RXD0 can be woken up when there is a signal
            PCON |= PD;                             //Sleep
            SAFE_MOD = 0x55;
            SAFE_MOD = 0xAA;
            WAKE_CTRL = 0x00;
        }
    }

83

Почему windows или драйвер ch340 приостанавливают обмен по usb?
Не знаю, наверно ждут чего-то
Эти мк реагируют на это где-то через 5 мс [судя по мануалу]

84

vt написал(а):

Это лучше у Eddy_Em спрашивать, он с протоколом ch340 развлекается

У всех CDC EP1 для прерываний - если надо "срочно" что-то отправить и сообщить хосту, что ждать невмоготу.
Вот только ни у PL2303, ни у ch340 я не наблюдал активного использования общения с прерываниями. Только один раз у меня проскочил запрос прерывания, и то почему-то после получения данных с хоста. В общем, оно нахер не нужно, а т.к. является однонаправленным, можно вообще не активировать EP1.
Кстати, dosikus, я не знаю, как оно у тебя вообще может работать, когда ты до отправки ACK или NAK втыкаешь printf, а протокол строго ограничен по таймингам! Мне для формирования отладочного выхлопа пришлось сделать двойную буферизацию UART'а с буферами по 256 байт и выводом в UART посредством DMA. Да и то, не всегда эта уловка помогала!

Дальше: ch340 - полная дичь и ничего общего с CDC не имеет, т.к. не работает со стандартными запросами (хотя бы той же установкой скорости, BREAK и т.п.). Все делается при помощи vendor-запросов. В принципе, на основе кода модуля ядра ch340 можно восстановить код для его эмуляции, но нафиг оно нужно, если эмуляция pl2303 нормально работает?

И еще: прекращали бы вы с игровыми приставками развлекаться, не дело это!

Отредактировано Eddy_Em (2018-11-17 15:33:50)

85

Eddy_Em, не у нас а у вас. :)
Это увы пока не мой код а прородителя.
спасибо за инфу, было бы неплохо если бы ты вывалил как можно больше про 340ой.
Кстати нужен анализатор USB  пакетов.
USBTrace, что пользую или тормозит при выставлении фильтра, либо я неправильно настраиваю...

86

Я использую wireshark, вполне удобная штукенция.

87

Полный пример на turbo51 [вместе с самим turbo51]
https://yadi.sk/d/naqKh4e03EDEJU/CH55x/ch55-turbo51.zip

Отредактировано vt (2019-04-11 15:58:54)

88

turbo51 ?
oooo
назад в прошлое ))
а что там за примеры ?

89

Прошлое - это си )

Там базовая система - всё, что нужно для счастья для начала развлечений с ch55, включая компилятор - 9 файлов, 290 кбайт в архиве

Отредактировано vt (2019-04-11 13:29:10)

90

Развитие сюжета )
http://wch.cn/products/CH549.html

http://s7.uploads.ru/8erqH.png


Вы здесь » Микроконтроллеры » Архив » CH55x (CH551 CH552 CH554)