Можно через "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
Круто, спасибо. +
USMicro(R) (C)2025
Всем привет!Парни поможете магнитолу прошить?
Надоело возится с проводочками, кнопками и переключателями, замутил себе программатор для АСишек на 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 не разбирался чем там инит отличается?
У меня код смотрит на ногу дата+ после перевода в бут.
USMicro(R) (C)2025
Вообще вопрос, как слать 0x16ef а не эти вот все ногодрыги)?
USMicro(R) (C)2025
Да, да. При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс, далее уже инициализируется USB.
Собственно это видно тут:
696 более ни чем не отвечает? Только подтяжкой ног и все?
USMicro(R) (C)2025
696 более ни чем не отвечает? Только подтяжкой ног и все?
Только подтяжкой и ничем другим.
水Mizu-DEC JLtech since 22.06.2019
Короче, потихоньку начинаю возится именно с i2c донглом. Если я ничего не путаю то это тот протокол что в ориг донгле, оно шлет по i2c и дальше слушает. Сложного ничего, но я никогда этого не делал. 
USMicro(R) (C)2025
Итак, сначала делаем инит того что нам нужно. Назначаем порты, настройки... В лупе делаем отправку нужного нам, и слушаем, тайминги и тд) . Нет ответа - повторяем, есть ответ, уже переключаем шину, или мигаем светодиодом к примеру.. .
Постараюсь завтра набросать код.
USMicro(R) (C)2025
Я тут уже набросал вот это, но пока я это не проверял, разбираюсь с прошивкой атмеги..
#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 не работает)
разбираюсь с прошивкой атмеги..
Голый чип или ты юзаешь ардуинку?
USMicro(R) (C)2025
Работает четко при нажатии кнопки реет на ардуинке. Тестил на 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
}
}
USMicro(R) (C)2025
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.
USMicro(R) (C)2025
Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.