• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Программатор для TLSR

pvvx

Активный участник сообщества
Почти дописал новый программатор из TLSR8253 (модули TB-03..04) USB-UART-TLSR8253-SWM<->SWS-другой чип.
Загрузчиков во внешний подключаемый чип не грузит. Вся работа с внешним чипом TLSR ведется только по SWire.
С CH430С чтение всей Flash занимает чуть более 33 секунды на предельной её работе на 230400 baud.
На Prolific PL-2303HX при 3 Мегабита - 11 сек:
Код:
TlsrPgm.py -w -pCOM3 -b3000000 rf 0 0x80000 x.bin
=======================================================
TLSR825x TlsrPgm version 25.11.20
-------------------------------------------------------
Open COM3, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
Set Speed UART PGM board 3000000 bits/s... ok
ReOpen COM3, 3000000 bit/s... ok
-------------------------------------------------------
Read Flash from 0x000000 to 0x080000...
Outfile: x.bin
                               
 Worked Time: 11.080 sec
Ну и запись оригинальной тестовой прошивки от термометра Xiaomi (полные 512 килобайт) аналогично:
Код:
TlsrPgm.py -w -pCOM3 -b3000000 we 0 Original_full_flash_Xiaomi_LYWSD03MMC.bin
=======================================================
TLSR825x TlsrPgm version 25.11.20
-------------------------------------------------------
Open COM3, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
Set Speed UART PGM board 3000000 bits/s... ok
ReOpen COM3, 3000000 bit/s... ok
-------------------------------------------------------
Inputfile: Original_full_flash_Xiaomi_LYWSD03MMC.bin
Write Flash data 0x00000000 to 0x00080000...
                              
 Worked Time: 10.141 sec
Пустые блоки со всеми 0xff программатор не пишет, но стирает сектора... Это сильно ускоряет, т.к. Flash обычно пустая.

И прошивка эта работает на любом из TLSR825x... Но температуру и влажность не кажет, т.к. нет датчика и ЖКИ :)
 

pvvx

Активный участник сообщества
Прошивка TlsrPgm умеет всё с Swire...
Cписок команд по UART:
CMD_FUNCS = 0, //0
CMD_FLASH_READ, //1
CMD_FLASH_WRITE, //2
CMD_FLASH_SECT_ERASE, //3
CMD_FLASH_ALL_ERASE, //4
CMD_FLASH_GET_JEDEC_ID, //5
CMD_FLASH_GET_STATUS, //6
CMD_SWIRE_READ, //7
CMD_SWIRE_WRITE, //8
CMD_SWIRE_AREAD, //9
CMD_SWIRE_AWRITE, //a
CMD_SWIRE_FIFO_READ, //b
CMD_SWIRE_FIFO_FWRITE, //c
CMD_FLASH_WRRD //d

CMDF_GET_VERSION = 0, //0
CMDF_MCU_REBOOT, //1
CMDF_SWIRE_CFG, //2
CMDF_EXT_POWER, //3
CMDF_SWIRE_ACTIVATE, //4
CMDF_UART_BAUD //5

Поддерживаемые скорости UART:
tab_uart_baud = [ \
115200, \
230400, \
460800, \
500000, \
921600, \
1000000, \
1500000, \
2000000, \
3000000, \
]
Чипы с отключенными SWS или в спящем режиме активируются и читаются без проблем... Усё для этого предусмотрено...
Питон ещё обучается, но пока отрабатывает такое:
Код:
usage: TlsrPgm [-h] [-p PORT] [-b BAUD] [-t TRST] [-a ACT] [-s] [-r] [-g] [-m]
               [-w]
               {rf,we,wf,es,ea,rs,ra,i} ...

TLSR825x TlsrPgm version 25.11.20

positional arguments:
  {rf,we,wf,es,ea,rs,ra,i}
                        Run TlsrPgm {command} -h for additional help
    rf                  Read Flash to binary file
    we                  Write file to Flash with sectors erases
    wf                  Write file to Flash without sectors erases
    es                  Erase Region (sectors) of Flash
    ea                  Erase All Flash
    rs                  Read SWire address to binary file
    ra                  Read Analog Registers to binary file
    i                   External Chip Information

optional arguments:
  -h, --help            show this help message and exit
  -p PORT, --port PORT  Serial port device (default: COM1)
  -b BAUD, --baud BAUD  UART Baud Rate (default: 230400)
  -t TRST, --trst TRST  Hard Reset Time ms (default: 0 ms)
  -a ACT, --act ACT     Activation Time ms (0-off, default: 0 ms)
  -s, --stall           CPU Stall
  -r, --run             CPU Run
  -g, --go              CPU Go
  -m, --mrst            Soft Reset (MCU Reboot)
  -w, --wrktime         Show Worked Time
Пока в нем 'забыта' команда записи Analog регистров... вписать и можно кинуть на github...
 

nikolz

Well-known member
Примите мои поздравления.
Вы могли бы начать их выпуск серийно.
 

nikolz

Well-known member
Т.е. вы описать не можете как "иначе" ?
TLSR82xx не нравится когда ей рвут 10 бит слова по SWire. При этом 10 бит Swire не укладывается в одно слово-байт UART.
Варианты передачи у UART могут быть такими:
a) 1 бит SWire = 1 символ UART
б) 2 бита SWire = 1 символ UART
При варианте:
а) кратности к USB буферу 64 байта нет, т.к. слово SWire = 10 байт UART.
б) кратности к USB буферу 64 байта нет, т.к. слово SWire = 5 байт UART.
А пока происходит пауза обслуживания мастером USB в 1 ms уходит 200 байт из UART на 2 мегабита. Где возьмет 200 байт каждую ms CH430 со своими тупыми дровами?
Пришлось поднять архив.
Я передавал в каждом байте UART два бита SWIRE.
----------------------
Мой алгоритм такой.
Сначала я передаю загрузчик с UART в RAM по SWIRE.
Это небольшой код и передача идет с максимально возможной скоростью.
-------------------------------
После этого прошивку флеш выполняем по UART без SWIRE.
При этом код прошивки сначала грузим в RAM и уже оттуда пишем во флеш.
-----------------------------
В итоге работаем на максимальной скорости UART т е на 3М для CH340. Скорость SWire вообще не имеет значения.
Не имеет особого значение и тип микросхемы.
---------------------------
Загрузчик пишется в прошивке во флеш. После первой загрузки всегда можем работать через UART.
Для пользователя это всегда UART.
----------------
Главная прелесть - нет надобности в модулях для прошивки кроме копеечного адаптера USB-UART на CH340 (цена на али пол доллара)
 

nikolz

Well-known member
сегодня получил TB-03F и TB-04.
удивительно быстро пришли всего 15 дней с момента оплаты.
 

pvvx

Активный участник сообщества
Пришлось поднять архив.
Я передавал в каждом байте UART два бита SWIRE.
Значит с CH430 будут сбои даже при 230400 Baud.
Пока вам везло :p :)
А ещё поглядим как оно сработает хотя-бы с термометром от Xiaomi :)
Сообщите сколько будет танцев с бубном...
 

pvvx

Активный участник сообщества
Скорость SWire вообще не имеет значения.
Не имеет особого значение и тип микросхемы.
Имеет и ещё как. У вас мал опыт общения с ними...
Во первых низкие скорости Swire чипы TLSR не жрут, как и завышение битовой скорости Fclk/5/swdiv - где swdiv можно записать в чип только от 3 до 0x7F и не на всех чипах он 7-ми битовый, а во вторых и третьих и т.д. всё уже описано ранее.
И мне так-же известно что надежность вам ни к чему, как и время у вас безгранично на запись/чтение чипа - вас устраивает и EVK от Telink :)
 

Kabron

Member
Refresh ports не мешало бы добавить, ибо не находит только что вставленного девайса.
 

pvvx

Активный участник сообщества
Подключаем так?
Нет. Это программатор для TLSR8251, 8253, 8258.
И подключается только TX-SWS и GND. RST не обязательно.
Он сделан в основном для прошивки TLSR8251 + LCD + термометр = LYWSD03MMC XIAOMI Bluetooth термометр , для тех у кого с паяльником совсем плохо.
Имеет только одностороннюю связь - передача в чип программы в Flash.
Refresh ports не мешало бы добавить, ибо не находит только что вставленного девайса.
Такие претензии к Chrome и конкретному эксплореру.
На Opera вообще бардак:
1612176304568.png
Забыли кнопки нарисовать :) :)
 

pvvx

Активный участник сообщества
под 8266 такое не планируется?
Пока не было нужды. На сегодня у меня 4 типа собранных аппаратных программаторов для TLSR чипов... А это баловство с неизвестным результатом, т.к. обратной связи с чипом нет - C помощью UART нет возможности прочитать SWire от Telink с 100% корректностью, так только с некой вероятностью от разного типа синхронизации у UART и SWire...
 
Попробовал сделать программатор на STM32F103C8T6 (ранее с ней дела не имел)
погуглил, подключил через ch340 и залил прошивку https://github.com/pvvx/TlsrTools/STM32F103/USB2Swire-STM32F103C8-v06.hex
с помошью программы STM32 Flash loader demonstrator (UM0462) вроде залилось без ошибок.

Подключил через микро-юсб гнездо на контроллере к компу. Появились устройства USB to SPI Converter и Com-port11 c восклицательным знаком (Для устройства не установлены драйверы. (Код 28))
Тут я и подвис. Что я сделал не так?
 

pvvx

Активный участник сообщества
разобрался. Надо было просто установить драйвер. вот отсюда https://www.st.com/en/development-tools/stsw-stm32102.html
Вынь 10 за последнее время сменила политику автоматической установки драйверов. Теперь она сама не ищет, а полагается на пользователя. Но некоторые бренды всё равно авто-устанавливает :)
Это может коснуться и UBIA, когда подключается по USB. Тогда надо какой zadig запустить и указать что это стандартный USB-UART.
 

pvvx

Активный участник сообщества
Есть ещё вариант выбрать в Windows 10 в стандартном меню установки драйверов уже имеющиеся - откопать там что-то типа последовательного порта... Не помню, но прокатывало на всех других компах и ничего загружать не требуется.
А USB соединение я использую для отладки - мне так проще писать, т.к. код команд и последовательность одинаковы в UBIA и для BLE, но BLE медленнее.
 

nikolz

Well-known member
Почти дописал новый программатор из TLSR8253 (модули TB-03..04) USB-UART-TLSR8253-SWM<->SWS-другой чип.
Загрузчиков во внешний подключаемый чип не грузит. Вся работа с внешним чипом TLSR ведется только по SWire.
С CH430С чтение всей Flash занимает чуть более 33 секунды на предельной её работе на 230400 baud.
На Prolific PL-2303HX при 3 Мегабита - 11 сек:
Код:
TlsrPgm.py -w -pCOM3 -b3000000 rf 0 0x80000 x.bin
=======================================================
TLSR825x TlsrPgm version 25.11.20
-------------------------------------------------------
Open COM3, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
Set Speed UART PGM board 3000000 bits/s... ok
ReOpen COM3, 3000000 bit/s... ok
-------------------------------------------------------
Read Flash from 0x000000 to 0x080000...
Outfile: x.bin
                            
Worked Time: 11.080 sec
Ну и запись оригинальной тестовой прошивки от термометра Xiaomi (полные 512 килобайт) аналогично:
Код:
TlsrPgm.py -w -pCOM3 -b3000000 we 0 Original_full_flash_Xiaomi_LYWSD03MMC.bin
=======================================================
TLSR825x TlsrPgm version 25.11.20
-------------------------------------------------------
Open COM3, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
Set Speed UART PGM board 3000000 bits/s... ok
ReOpen COM3, 3000000 bit/s... ok
-------------------------------------------------------
Inputfile: Original_full_flash_Xiaomi_LYWSD03MMC.bin
Write Flash data 0x00000000 to 0x00080000...
                           
Worked Time: 10.141 sec
Пустые блоки со всеми 0xff программатор не пишет, но стирает сектора... Это сильно ускоряет, т.к. Flash обычно пустая.

И прошивка эта работает на любом из TLSR825x... Но температуру и влажность не кажет, т.к. нет датчика и ЖКИ :)
ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ:
по факту у Вас получилось:
С CH430С чтение всей Flash занимает чуть более 33 секунды на предельной её работе на 230400 baud.
На Prolific PL-2303HX при 3 Мегабита - 11 сек:
------------------
Мой Расчет:
Время передачи по UART 512 KB на скорости 230400 бод составляет 512000/23040 (10 тактов на байт) =22 секунды
на скорости 3 Мбод составит 512000/300000 (10 тактов на байт) =2 секунды
Т е время исполнения программы составляет примерно 10 секунд
Таким образом, при скорости 3 Мбод 90% времени тратится на исполнение программы , а не на работу UART
-------------------
Вопросы:
Зачем плодить кучу программаторов, а не сделать один и считывать код нужного загрузчика из файла.
Зачем городить кучу загрузчиков, почему не управлять параметрами загрузчика.
Мой вариант Решения:
Время загрузки загрузчика для UART составляет у меня не более 0.5 секунды.
Нет смысла грузить загрузчик UART во флеш TLSR и тратить на это флеш.
В результате, Загрузчик грузится в RAM. На его загрузку уходит доли секунды и он работает максимально быстро.
CH340 позволяет грузить в RAM на скорости 1 Мбод. со скоростью примерно 23 Кбайта в секунду.
 

pvvx

Активный участник сообщества
Мой вариант Решения:
Нет смысла грузить загрузчик UART во флеш TLSR и тратить на это флеш.
В результате, Загрузчик грузится в RAM. На его загрузку уходит доли секунды и он работает максимально быстро.
CH340 позволяет грузить в RAM на скорости 1 Мбод. со скоростью примерно 23 Кбайта в секунду.
ИНФОРМАЦИЯ К РАЗМЫШЛЕНИЮ:
  • Ни один загрузчик, т.е. bootloader.bin у меня никогда не грузился в Flash.
  • Никаких UART давно не использую. Всё работает на TLSR8269 c USB и аппаратным SWM-SWS, программа универсальная и поддерживает вcю линейку TLSR, включая полное отключение потенциалов для страта чипов с защитой от штатного BDT-evk, и автоматическое получение данных за ms периоды активности чипа. Т.е. отрабатывает и как SEGGER RTT + чего нет у JTAG - может автоматически сопровождать постоянно отключающийся в сон MCU.
Но в используемом хламе остался один вариант, который просто собран на плате на базе модуля с TLSR8253 - вот там установлен USB-UART для связи с чипом TLSR8253, а далее опять аппаратный SWM-SWS. Программа у него аналогичная с TLSR8269, а UART использован по причине отсутствия выводов USB в корпусе TLSR8253.
 
Сверху Снизу