USMI

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

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


Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.


JL SoC. (杰理芯片) Programmer (Dongle) (Download Tool) Программатор.

Сообщений 221 страница 240 из 351

221

Можно через "mode" настроить, например "mode COM1 baud=115200 data=8 parity=n rts=off dtr=off"

Подпись автора

水Mizu-DEC JLtech since 22.06.2019

222

Круто, спасибо. +

Подпись автора

By Admin

223

Всем привет!Парни поможете магнитолу прошить?

224

Надоело возится с проводочками, кнопками и переключателями, замутил себе программатор для АСишек на 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- не выставляет. Я на правильном пути или заблуждаюсь?

225

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

В поисках метода обнаружения перехода АСишки в BOOT обнаружил, что после того как она схавает передаваемый в нее ключ 0x16EF, то прижимает линию Clock (или D+) к земле на время около 1,3 миллисекунды. Если я правильно понял, это признак того что чип JL находится в процессе перехода в загрузочный режим.

Да, да. При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс, далее уже инициализируется USB.

Собственно это видно тут:
https://forumupload.ru/uploads/001b/ca/8a/3/438238.png

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

Поймав момент притягивания к земле линии D+ надо начинать ловить высокий уровень на линии Data (D-).

Тут скорее надо поймать момент, когда именно что обе линии к земле притягиваются, ну и можно наверное ещё потом на D+ ловить высокий уровень (но в общем-то хватает и первого).

Подпись автора

水Mizu-DEC JLtech since 22.06.2019

226

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

При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс

Да, действительно, обе линии притягиваются к земле. Потом, приблизительно через 1,2 миллисекунды АСишка отпускает линию D+ (Clock) и на ней появляется высокий уровень, а линия D- (Data) в это время остается прижатой к земле (как на скриншоте). Тогда буду делать проверку на одновременную притяжку D- и D+ к земле.

Спасибо. Так проще чем то как я хотел, я там уже с прерываниями перемудрил в микроконтроллере программатора до появления глюков в прошивке.

https://forumupload.ru/uploads/001b/ca/8a/4/t761990.jpg

Отредактировано Alcest (2023-08-27 06:51:25)

227

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

отпускает линию D+ (Clock) и на ней появляется высокий уровень, а линия D- (Data) в это время остается прижатой к земле

Ну вообще-то они обе отпускаются, просто на D- подтяжка к питанию не включается (наоборот, там подтяжка к земле).

Подпись автора

水Mizu-DEC JLtech since 22.06.2019

228

как бы вывести содержимое стека, чтобы понять, откуда функция вызывается.

229

gdb упоминается, но как-то вскользь. jtag? тоже нифига не понятно.

230

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

просто на D- подтяжка к питанию не включается (наоборот, там подтяжка к земле).

Спасибо, буду учитывать этот момент.

231

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

Не тестил на 695 и выше, но на 690 и 692 работало идеально...

На 695 тоже работает. Правда тайминги нужно сделать в два раза меньше.
А вот с 696 не работает почему-то.
https://forumupload.ru/uploads/001b/ca/8a/2/t361546.jpg
https://forumupload.ru/uploads/001b/ca/8a/2/t611646.jpg
697 тоже не работает.
Ни кто с 696/697 не разбирался чем там инит отличается?
У меня код смотрит на ногу дата+ после перевода в бут.

Подпись автора

By Admin

232

Вообще вопрос, как слать 0x16ef а не эти вот все ногодрыги)?

Подпись автора

By Admin

233

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

Да, да. При успешном приёме этого ключа обе линии подтягиваются на землю, примерно на 1-2мс, далее уже инициализируется USB.

Собственно это видно тут:

696 более ни чем не отвечает? Только подтяжкой ног и все?

Подпись автора

By Admin

234

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

696 более ни чем не отвечает? Только подтяжкой ног и все?

Только подтяжкой и ничем другим.

Подпись автора

水Mizu-DEC JLtech since 22.06.2019

235

Короче, потихоньку начинаю возится именно с i2c донглом. Если я ничего не путаю то это тот протокол что в ориг донгле, оно шлет по i2c и дальше слушает. Сложного ничего, но я никогда этого не делал.  8-)

Подпись автора

By Admin

236

Итак, сначала делаем инит того что нам нужно. Назначаем порты, настройки... В лупе делаем отправку нужного нам, и слушаем, тайминги и тд) . Нет ответа - повторяем, есть ответ, уже переключаем шину, или мигаем светодиодом к примеру.. .
Постараюсь завтра набросать код.

Подпись автора

By Admin

237

Я тут уже набросал вот это, но пока я это не проверял, разбираюсь с прошивкой атмеги..

Код:
#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

238

Работает, но нужно тайминги уменьшить. С такими просто не переводит в бут. Ну и детект не работает, видимо у атмеги нужно делать аналогрид наверно вместо цифрового, а то уровни тупо не видит. Всё таки не стм)  Ну и 696 не работает)

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

разбираюсь с прошивкой атмеги..


Голый чип или ты юзаешь ардуинку?

Подпись автора

By Admin

239

Работает четко при нажатии кнопки реет на ардуинке. Тестил на 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

240

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

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) Программатор.