Про Type-C вот что имеется в виду - у мк есть выводы UCC1, UCC2, VBUS1, VBUS2 и есть регистр управления ими
Комбинации битов PU1_EN, PU0_EN: 00 - откл, 01 - 56К, 10 - 22К, 11 - 10К
Это всё, что есть про type-c в мануале
CH55x (CH551 CH552 CH554)
Сообщений 61 страница 90 из 162
Поделиться612018-04-21 19:17:29
Поделиться622018-04-25 16:33:48
то есть реально в корпусе с 16 выводам можно задействовать 11 контактов если надо оставить поддержку USB
1 rest
2 USB
2 питание
Поделиться632018-04-25 19:01:04
reset не обязательно, но всё равно 11 т.к. три вывода питания - vss, vdd, v33
Поделиться642018-04-25 20:04:20
значит надо взять ssop20 ещё
Поделиться652018-05-10 12:24:47
Ещё один проект на ch55 - usb composite device: mass storage + keyboard + vendor-define hid, а также i2c и oled
https://github.com/rikka0w0/CH55x_USB_CompositeDevice
Поделиться662018-07-01 17:43:24
Особенности тактирования
Встроенный генератор [с умножителем] выдаёт 96 МГц, которые потом делятся на 2 для USB и параллельно по выбору на 3|4|6|8|16|32|128|512 для Fsys [по ресету на 16 и соотв Fsys 6 МГц]
Делитель для 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)
Поделиться672018-07-05 07:19:01
это откуда инфа ?
Поделиться682018-07-05 09:11:03
Всё из мануала [кроме предела 12 МГц для usb - это из моей практики]
Куда пропал? На изиэлектрониксе без тебя совсем уныло стало )
Поделиться692018-08-05 14:47:50
меня там забанили навсегда
Поделиться702018-11-15 14:20:07
Запаял 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 ...
ЧЁ делать?
Поделиться712018-11-15 17:21:25
Судя по UsbToUartDriver.inf, это с электродраконовского гитхаба пример, с них и спрашивай )
Zadig можешь попробовать, он вроде умеет не только для winusb.sys, но и для usbser.sys inf-файлы делать
Поделиться722018-11-15 18:41:56
Уже начинаю въезжать. Надо было компилить пример где эмулируют CH340.
Ну в принципе не плохо для получаса въезда с нуля...
Поделиться732018-11-15 18:58:03
Ну в принципе не плохо для получаса въезда с нуля...
Да они лёгкие как пёрышко )
Возьми у меня с ядиска перевод мануала с правками - https://yadi.sk/d/naqKh4e03EDEJU/CH55x
И заодно обновил в форумском архиве - forumfiles.ru/files/0018/26/8f/28705.pdf
Поделиться742018-11-16 09:43:02
Судя по UsbToUartDriver.inf, это с электродраконовского гитхаба пример, с них и спрашивай )
Zadig можешь попробовать, он вроде умеет не только для winusb.sys, но и для usbser.sys inf-файлы делать
Ну да, все верно, скомпилил с форума WCH , вышел аналог CH340.
в терминале вижу эхо.
Поделиться752018-11-16 15:03:35
vt, я тебя завтра вопросами завалю, не против?
Поделиться762018-11-16 18:46:56
vt, я тебя завтра вопросами завалю, не против?
Заваливай
Хотя какие вопросы - usb ты уже прошёл, с touch-key я не разбирался, а больше там ничего вопросительного вроде и нет )
Поделиться772018-11-17 09:17:10
Ссылка на проект 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 ?
Работа которого скрыта от юзера и нихрена не описана...
Поделиться782018-11-17 10:05:40
Такс с принтф разобрался , нужен был модификатор b.
printf( "\nlen=%bu\n",(UINT8)len );
Поделиться792018-11-17 12:04:52
а вот для чего точка 1 ?
Это лучше у Eddy_Em спрашивать, он с протоколом ch340 развлекается
И еще - как ты переводишь пдф ? Конвертишь в odt ? Чем?
Я только добавляю в готовый odt, который Blinkinlabs сделали
Далее , правильно ли понимаю что регистр UEPx_DMA содержат указатели на буферы для внутреннего DMA ?
Ну да, адреса буферов, а сами буферы в xram
Поделиться802018-11-17 12:20:06
vt, тогда перефразирую :
Правильно ли понял:
точка 0 для служебной информации - передачи дескрипторов и т.д.
точка 2 для булк - для приема-передачи данных
Поделиться812018-11-17 12:37:47
vt, тогда перефразирую :
Правильно ли понял:
точка 0 для служебной информации - передачи дескрипторов и т.д.
точка 2 для булк - для приема-передачи данных
Точка 0 - да, для всех протоколов usb
Точка 2 - зависит от протокола верхнего уровня
Поделиться822018-11-17 13:13:13
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; } }
Поделиться832018-11-17 13:58:52
Почему windows или драйвер ch340 приостанавливают обмен по usb?
Не знаю, наверно ждут чего-то
Эти мк реагируют на это где-то через 5 мс [судя по мануалу]
Поделиться842018-11-17 15:30:29
Это лучше у 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)
Поделиться852018-11-17 15:40:24
Eddy_Em, не у нас а у вас.
Это увы пока не мой код а прородителя.
спасибо за инфу, было бы неплохо если бы ты вывалил как можно больше про 340ой.
Кстати нужен анализатор USB пакетов.
USBTrace, что пользую или тормозит при выставлении фильтра, либо я неправильно настраиваю...
Поделиться862018-11-17 17:04:36
Я использую wireshark, вполне удобная штукенция.
Поделиться872019-03-30 23:39:24
Полный пример на turbo51 [вместе с самим turbo51]
https://yadi.sk/d/naqKh4e03EDEJU/CH55x/ch55-turbo51.zip
Отредактировано vt (2019-04-11 15:58:54)
Поделиться882019-04-03 12:18:30
turbo51 ?
oooo
назад в прошлое ))
а что там за примеры ?
Поделиться892019-04-03 12:54:01
Прошлое - это си )
Там базовая система - всё, что нужно для счастья для начала развлечений с ch55, включая компилятор - 9 файлов, 290 кбайт в архиве
Отредактировано vt (2019-04-11 13:29:10)
Поделиться902019-04-08 11:34:37
Развитие сюжета )
http://wch.cn/products/CH549.html