USMI

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

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


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


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

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

341

Да, там сначала подгружается br21sync.bin в чип, и потом уже по UART идёт прошивка, прожиг и вот это вот всё.

https://forumupload.ru/uploads/001b/ca/8a/3/t726964.png

https://forumupload.ru/uploads/001b/ca/8a/3/t427222.png

https://forumupload.ru/uploads/001b/ca/8a/3/t802016.png

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

水Mizu-DEC JLtech since 22.06.2019

342

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

То есть перевод в бутлоадер путем загрузки в чип бинарника где прописан перевод в бутлоадер и работа от внутреннего генератора...
Скопировать будет сложно?

Ну, если будет хватать места под сами бинарники под каждый чип, то думаю реализовать будет несложно.
Впринципе их размер можно уменьшить, например если их из ISP комманд раскодировать в исходные данные. Или например убрать оттуда лишнее, например у них обычно ещё есть код для приёма лоадера по UART (вместо того чтобы использовать код из ROM-а, как это делается для USB бута)

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

水Mizu-DEC JLtech since 22.06.2019

343

С местом проблем не должно быть, на крайняк можно организовать внешнюю spi под файлы. А прожиг получается AT командами?

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

By Admin

344

Ну там конечно не AT комманды, но вообще в этом случае UART используется только лишь для передачи самой прошивки, сначала прогер отправляет информацию о данных для прошивки (размер, CRC), потом чип отвечает ID флеши, и данными со фьюзов.

https://forumupload.ru/uploads/001b/ca/8a/3/t181387.png

Потом прогер отправляет байт 0x0F до тех пор пока чип не ответит тем же в ответ. Потом уже UART настраивается на скорость 3000000 бод (вроде как) и происходит передача прошивки.

Тут ещё есть нюанс, что параметры прошивки (режим, и вот это всё) отсылаются на стадии загрузки самого лоадера (после его данных), собственно это оно и есть:
https://forumupload.ru/uploads/001b/ca/8a/3/t812665.png

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

水Mizu-DEC JLtech since 22.06.2019

345

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

Тут ещё есть нюанс, что параметры прошивки (режим, и вот это всё) отсылаются на стадии загрузки самого лоадера (после его данных), собственно это оно и есть:

А куда в конечном итоге efuse пишет?  У самого проца есть память по мимо spi? Интересто считывать фьюзы и писать) 
Есть в прогере empty burn + фьюзы. Сделаю щас дамп)

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

By Admin

346

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

А куда в конечном итоге efuse пишет?  У самого проца есть память по мимо spi?

Конечно же. В случае с чипами вроде BR17-BR21, там есть 32 фьюз-бита, которые организованы как 2 страницы по 16 бит каждая. В первой хранятся калибровочные/конфигурационные данные, а во второй - chipkey.
Доступ к ним (чтение и прожиг) - через регистр EFUSE_CON.
https://forumupload.ru/uploads/001b/ca/8a/3/t87862.jpg

В чипах вроде BR25 там их уже 64 бита (32 бита на страницу), и они там вообще вроде как часть PMU (они читаются через обращение к регистрам PMU P33).

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

水Mizu-DEC JLtech since 22.06.2019

347

Интересно конечно, и запарились они знатно с этими лоадерами... 
Ну так и есть, уарт чисто для прошивки...)
https://forumupload.ru/uploads/001b/ca/8a/2/t181205.png
6928_only fuse.logicdata

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

By Admin

348

С платформой - лучше нам взять что то уже с внешней флешкой, что бы влезло все. RP2040 к примеру, или esp 32, я имею в виду цена+доступность на рынке.
Какие мысли?

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

By Admin

349

https://forumupload.ru/uploads/001b/ca/8a/167/t874031.jpg
Собрал прогер наконец то на базе ардуинки, буду отлаживать

350

Что за релюха , Опто?

Код:
#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 POW_RESET       2    ///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() 
{
  pinMode(POW_RESET, INPUT_PULLUP);
  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(digitalRead(POW_RESET) == LOW)
  {
    digitalWrite(POW_CTRL,1); 
    delay(100);
    digitalWrite(POW_CTRL,0); 
  }
 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,0);            // состояние ключа шины после принятия ответа
 digitalWrite(LED, answer); //LED  
 }
}

Точно работает на 690/691/692/695/696/697/698/701

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

By Admin

351

Не релюха, HC4016 аналоговый свитч
Вместо р-канального мосфета pnp, норм же?

Код видел, спасибо

Отредактировано Nikita_yfh (2024-09-06 22:52:59)


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