Можно через "mode" настроить, например "mode COM1 baud=115200 data=8 parity=n rts=off dtr=off"
- Подпись автора
水Mizu-DEC JLtech since 22.06.2019
USMI |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.
Можно через "mode" настроить, например "mode COM1 baud=115200 data=8 parity=n rts=off dtr=off"
水Mizu-DEC JLtech since 22.06.2019
Круто, спасибо. +
By Admin
Всем привет!Парни поможете магнитолу прошить?
Надоело возится с проводочками, кнопками и переключателями, замутил себе программатор для АСишек на pic микроконтроллере, двух SN47LVC1G3157, плюс ключ питания на полевом транзисторе из схемы опубликованной на 4 странице этой темы JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.
Работает четко, AC6925A\C в режим BOOT переводит стабильно одним нажатием кнопки. В режим DEVICE тоже сбрасывает отдельной кнопкой. Но, все равно хотелось бы подтверждения перехода в тот или иной режим с индикацией светодиодами, чтобы не держать все время открытым диспетчер устройств на компьютере.
В поисках метода обнаружения перехода АСишки в BOOT обнаружил, что после того как она схавает передаваемый в нее ключ 0x16EF, то прижимает линию Clock (или D+) к земле на время около 1,3 миллисекунды. Если я правильно понял, это признак того что чип JL находится в процессе перехода в загрузочный режим. Поймав момент притягивания к земле линии D+ надо начинать ловить высокий уровень на линии Data (D-). И если таковой появится хоть на короткое время, значит АСишка перешла в BOOT. Если же чип не принял ключ 0x16EF, он линию D+ к земле не прижимает и после этого высокий уровень на D- не выставляет. Я на правильном пути или заблуждаюсь?
В поисках метода обнаружения перехода АСишки в BOOT обнаружил, что после того как она схавает передаваемый в нее ключ 0x16EF, то прижимает линию Clock (или D+) к земле на время около 1,3 миллисекунды. Если я правильно понял, это признак того что чип JL находится в процессе перехода в загрузочный режим.
Да, да. При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс, далее уже инициализируется USB.
Собственно это видно тут:
Поймав момент притягивания к земле линии D+ надо начинать ловить высокий уровень на линии Data (D-).
Тут скорее надо поймать момент, когда именно что обе линии к земле притягиваются, ну и можно наверное ещё потом на D+ ловить высокий уровень (но в общем-то хватает и первого).
水Mizu-DEC JLtech since 22.06.2019
При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс
Да, действительно, обе линии притягиваются к земле. Потом, приблизительно через 1,2 миллисекунды АСишка отпускает линию D+ (Clock) и на ней появляется высокий уровень, а линия D- (Data) в это время остается прижатой к земле (как на скриншоте). Тогда буду делать проверку на одновременную притяжку D- и D+ к земле.
Спасибо. Так проще чем то как я хотел, я там уже с прерываниями перемудрил в микроконтроллере программатора до появления глюков в прошивке.
Отредактировано Alcest (2023-08-27 06:51:25)
отпускает линию D+ (Clock) и на ней появляется высокий уровень, а линия D- (Data) в это время остается прижатой к земле
Ну вообще-то они обе отпускаются, просто на D- подтяжка к питанию не включается (наоборот, там подтяжка к земле).
水Mizu-DEC JLtech since 22.06.2019
как бы вывести содержимое стека, чтобы понять, откуда функция вызывается.
gdb упоминается, но как-то вскользь. jtag? тоже нифига не понятно.
просто на D- подтяжка к питанию не включается (наоборот, там подтяжка к земле).
Спасибо, буду учитывать этот момент.
Не тестил на 695 и выше, но на 690 и 692 работало идеально...
На 695 тоже работает. Правда тайминги нужно сделать в два раза меньше.
А вот с 696 не работает почему-то.
697 тоже не работает.
Ни кто с 696/697 не разбирался чем там инит отличается?
У меня код смотрит на ногу дата+ после перевода в бут.
By Admin
Вообще вопрос, как слать 0x16ef а не эти вот все ногодрыги)?
By Admin
Да, да. При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс, далее уже инициализируется USB.
Собственно это видно тут:
696 более ни чем не отвечает? Только подтяжкой ног и все?
By Admin
696 более ни чем не отвечает? Только подтяжкой ног и все?
Только подтяжкой и ничем другим.
水Mizu-DEC JLtech since 22.06.2019
Короче, потихоньку начинаю возится именно с i2c донглом. Если я ничего не путаю то это тот протокол что в ориг донгле, оно шлет по i2c и дальше слушает. Сложного ничего, но я никогда этого не делал.
By Admin
Итак, сначала делаем инит того что нам нужно. Назначаем порты, настройки... В лупе делаем отправку нужного нам, и слушаем, тайминги и тд) . Нет ответа - повторяем, есть ответ, уже переключаем шину, или мигаем светодиодом к примеру.. .
Постараюсь завтра набросать код.
By Admin
Я тут уже набросал вот это, но пока я это не проверял, разбираюсь с прошивкой атмеги..
#define POWER_CTRL A2 #define USB_ENABLE A3 #define JL_DAT A4 /* USBDM */ #define JL_CLK A5 /* USBDP */ bool send_usbkey(void) { pinMode(JL_DAT, OUTPUT); pinMode(JL_CLK, OUTPUT); for (uint16_t mask = 0x8000; mask; mask >>= 1) { digitalWrite(JL_DAT, (mask & 0x16EF) ? HIGH : LOW); digitalWrite(JL_CLK, LOW); delayMicroseconds(10); digitalWrite(JL_CLK, HIGH); delayMicroseconds(10); } pinMode(JL_DAT, INPUT_PULLUP); pinMode(JL_CLK, INPUT_PULLUP); delayMicroseconds(200); return (digitalRead(JL_DAT) == LOW) && (digitalRead(JL_CLK) == LOW); } void setup() { digitalWrite(POWER_CTRL, LOW); digitalWrite(USB_ENABLE, LOW); pinMode(POWER_CTRL, OUTPUT); pinMode(USB_ENABLE, OUTPUT); pinMode(JL_DAT, INPUT); pinMode(JL_CLK, INPUT); /*------------------------------*/ delay(10); digitalWrite(POWER_CTRL, HIGH); while (!send_usbkey()); pinMode(JL_DAT, INPUT); pinMode(JL_CLK, INPUT); digitalWrite(USB_ENABLE, HIGH); } void loop() { }
水Mizu-DEC JLtech since 22.06.2019
Работает, но нужно тайминги уменьшить. С такими просто не переводит в бут. Ну и детект не работает, видимо у атмеги нужно делать аналогрид наверно вместо цифрового, а то уровни тупо не видит. Всё таки не стм) Ну и 696 не работает)
разбираюсь с прошивкой атмеги..
Голый чип или ты юзаешь ардуинку?
By Admin
Работает четко при нажатии кнопки реет на ардуинке. Тестил на 690/692/695/696/697. Скоро протестирую на 701 серии.
#define JL_CLK A5 ///USBDP #define JL_DAT A4 ///USBDM #define BUS_CTRL A3 ///USB_BUS_CTRL #define POW_CTRL A2 ///USB_POWER_CTRL #define LED 13 ///LED boolean answer=0; //статус ответа boolean done=0; //0-время не вышло, 1 - время вышло (подача сигналов) boolean setupdone=0; //0-переинициализации не было, 1- была unsigned long ann=0; //засечка времени unsigned long timecount=0; //то же самое) int cnt; //счетчик сигналов bool send_usbkey(void) { pinMode(JL_DAT, OUTPUT); pinMode(JL_CLK, OUTPUT); for (uint16_t mask = 0x8000; mask; mask >>= 1) { digitalWrite(JL_DAT, (mask & 0x16EF) ? HIGH : LOW); digitalWrite(JL_CLK, LOW); delayMicroseconds(10); digitalWrite(JL_CLK, HIGH); } pinMode(JL_DAT, INPUT_PULLUP); pinMode(JL_CLK, INPUT_PULLUP); return (digitalRead(JL_DAT) == LOW) && (digitalRead(JL_CLK) == LOW); } void setup() { if(done==0){ pinMode(POW_CTRL, OUTPUT); pinMode(LED, OUTPUT); digitalWrite(LED,1); digitalWrite(LED,0); }else{ pinMode(LED, OUTPUT); digitalWrite(LED,0); } } void loop() { if(answer==0){ //если нет ответа if(cnt==1){ //количество сообщений done=1; //сигналы посланы if(setupdone==0){ //если переинициализации не было setup(); //переинициализация setupdone=1; //переинициализация выполнена timecount= micros(); //старт отсчета 50 микросек } if(digitalRead(JL_DAT)==1){ //если на ноге + answer=1; //статус ответа }else if(micros()>timecount){ //если в течение 50 мкс нет ответа done=0; //сбрасываем все переменные setupdone=0; ann=millis(); timecount=0; answer=0; cnt=0; setup(); //переинициализация } }else{ pinMode(BUS_CTRL,OUTPUT); digitalWrite(BUS_CTRL,0); digitalWrite(POW_CTRL,0); delayMicroseconds(1000); pinMode(POW_CTRL,OUTPUT); digitalWrite(POW_CTRL,1); while (!send_usbkey()); delayMicroseconds(5000); cnt++; } }else{ digitalWrite(BUS_CTRL,answer); digitalWrite(POW_CTRL,answer); // состояние ключа шины после принятия ответа digitalWrite(LED, answer); //LED } }
By Admin
digitalWrite(POW_CTRL,0);
delayMicroseconds(1000);
pinMode(POW_CTRL,OUTPUT);
digitalWrite(POW_CTRL,1);
while (!send_usbkey());
delayMicroseconds(5000);
Самый важный момент, если до 4000 то не работает 695/696/697, если выше 6000 то не работают уже 690/692.
By Admin
Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.