Разборка прошивки электросамоката Xiaomi M365

Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
#прошивка
+
Форум / Электротранспорт / Электросамокаты / Xiaomi Mijia Electric Scooter / Разборка прошивки электросамоката Xiaomi M365
Открыть шапку темы
Денис Юрьев
Новичок
МоскваRating: 9
Денис Юрьев
16 october 2018, 17:41
Posted: 16 october 2018, 17:41

Уважаемый Sergevit описывал основные пакеты обмена данными с БМС

https://electro.club/f/29042



Conejo
Форумчанин
МадридRating: 309
Conejo
16 october 2018, 18:22
Posted: 16 october 2018, 18:22
Ответ пользователю
dssoft : 16 october 2018, 14:29
на это сообщение (развернуть)

Спасибо большое за ответ, сегодня попробую!

Раз уж зашла речь, то не подскажете есть ли в контроллере или BMS признак включения зарядки? Ну не мигание же светодиодов разбирать.

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


Начал описывать протокол здесь: https://github.com/flowswitch/ninebot-docs/wiki/protocol, допишу по командам чуть позже.

Там всё несколько обширнее, нежели описывал Sergevit (нисколько не желаю умалить его работу, просто движемся дальше в этом деле), например "константа 01" - это и есть команда (чтения регистра в данном случае), есть и многие другие. А "команды" 10 и 30 - как раз не команды, а параметры, для команды 01 это адреса в большом массиве регистров. Оно и должно работать как массив, например чтение с адреса 11 должно возвращать кусок серийного номера начиная со второго знака. То, что текущие версии головы/ESC читают только с 10 и 30, не означает что так будет всегда. Вплоть до того, что очередное обновление ESC нарушит работу нынешних батарейных обманок, прочитав статус/напряжение/ток/температуры не одним куском, а каждое отдельно со своего адреса :D

 1   
Денис Юрьев
Новичок
МоскваRating: 9
Денис Юрьев
16 october 2018, 18:39
Posted: 16 october 2018, 18:39

Красивая теория, но вроде не стыкуется с практикой.

Смотрите "команды" 1012 и 1B04. По вашей теории в них должны быть пересекающиеся данные. Но фактически:

на 1012 выдается 14 бит серийника, два бита версии прошивки БМС, два бита емкости батареи

на 1B04 выдается два бита количества циклов и два бита количества зарядок.


dssoft
Новичок
Rating: 3
dssoft
16 october 2018, 18:49
Posted: 16 october 2018, 18:49

Ток со знаком минус это не совсем то что хотелось, он отрицательный еще и при рекуперации, надо будет еще и проверку на движение добавлять. Основная идея в том чтобы при зарядке автоматом переключаться на отображение вольтажа банок.

Как оказалось, я пользую гуглдок с протоколом того же самого Sergevit. Что регистровый файл это единое целое и можно вытаскивать только то что нужно (причем командой 0х01, а не 0х61) дошло уже давно :)

Заметил еще одну странность в процессе испытаний. Раньше брал скорость с оффсета 0xb5, пару раз в поездках наблюдал "замерзание" показаний именно скорости (все остальное продолжало подгружаться). Попробовал забирать с 0x26, но вчера опять "замерзло". Разумеется, после выкл-вкл самоката все опять на месте.

Может я что не так делаю, или скорость не оттуда беру?

dssoft
Новичок
Rating: 3
dssoft
16 october 2018, 19:03
Posted: 16 october 2018, 19:03
Ответ пользователю
Денис Юрьев : 16 october 2018, 18:39
на это сообщение (развернуть)

Красивая теория, но вроде не стыкуется с практикой.

Смотрите "команды" 1012 и 1B04. По вашей теории в них должны быть пересекающиеся данные. Но фактически:

на 1012 выдается 14 бит серийника, два бита версии прошивки БМС, два бита емкости батареи

на 1B04 выдается два бита количества циклов и два бита количества зарядок.


Дело в том, что оффсет считается словами (два байта), а длина байтами. Так что 10 12 зачитывает от 10 до 18 слова.

 1   
Денис Юрьев
Новичок
МоскваRating: 9
Денис Юрьев
16 october 2018, 19:19
Posted: 16 october 2018, 19:19

О, громадное спасибо, теперь всё встало на свои места.

Conejo
Форумчанин
МадридRating: 309
Conejo
17 october 2018, 1:40
Posted: 17 october 2018, 1:40
Ответ пользователю
dssoft : 16 october 2018, 18:49
на это сообщение (развернуть)

Ток со знаком минус это не совсем то что хотелось, он отрицательный еще и при рекуперации, надо будет еще и проверку на движение добавлять. Основная идея в том чтобы при зарядке автоматом переключаться на отображение вольтажа банок.

Как оказалось, я пользую гуглдок с протоколом того же самого Sergevit. Что регистровый файл это единое целое и можно вытаскивать только то что нужно (причем командой 0х01, а не 0х61) дошло уже давно :)

Заметил еще одну странность в процессе испытаний. Раньше брал скорость с оффсета 0xb5, пару раз в поездках наблюдал "замерзание" показаний именно скорости (все остальное продолжало подгружаться). Попробовал забирать с 0x26, но вчера опять "замерзло". Разумеется, после выкл-вкл самоката все опять на месте.

Может я что не так делаю, или скорость не оттуда беру?

Мог и ошибиться, но похоже состояние зарядки в шестом бите статуса BMS (регистр 30 который).

Попутно нашел: регистр 36 - состояние балансировки (каждый бит - соответствующая ячейка нуждается в балансировке).

 1   
dssoft
Новичок
Rating: 3
dssoft
17 october 2018, 7:34
Posted: 17 october 2018, 7:34
Ответ пользователю
Conejo : 17 october 2018, 1:40
на это сообщение (развернуть)

Мог и ошибиться, но похоже состояние зарядки в шестом бите статуса BMS (регистр 30 который).

Попутно нашел: регистр 36 - состояние балансировки (каждый бит - соответствующая ячейка нуждается в балансировке).

Спасибо, попробую!

Кстати, с переносом команд на 8х все получилось, только пришлось ответы синхронизировать с 64-м пакетом, иначе прут коллизии с обменом контроллер-голова.

dssoft
Новичок
Rating: 3
dssoft
17 october 2018, 18:48
Posted: 17 october 2018, 18:48

Есть еще одна тема, мне лично неактуальная, но, думаю, множество народу скажет "спасибо".

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

phalt
Новичок
phalt
25 october 2018, 16:54
Posted: 25 october 2018, 16:54
Ответ пользователю
Conejo : 21 september 2018, 14:08
на это сообщение (развернуть)

Извлёк :) Оказалось всё шифровано, но ключ тот же, что и в М365 :)nbes2fw.zip Внутри все три части - BLE, DRV, BMS. Продублировать как-то в раздел Ninebot?


доброго времени суток - не было случая сдампить прошивку ЕС2 версии 1.3.5?

1.3.3  -одна из самых глючных...

Frenchy-m365
Новичок
Rating: 2
Frenchy-m365
27 october 2018, 21:38
Posted: 27 october 2018, 21:38

привет, ребята

Мне нужна конкретная информация.
Мне нужно заново сменить xiaomi m365 (китайская) замена bms из-за ошибки 22.
У меня есть st-link v2 (stm32) usb, я не знаю или подключаю + 3.3v на bms.
Это на левой стороне SWIM (свободное пространство)?
Должен ли я отпустить батарею, где бы я не мог использовать вспышки без батареи?

Спасибо за помощь!


dssoft
Новичок
Rating: 3
dssoft
28 october 2018, 15:17
Posted: 28 october 2018, 15:17
Ответ пользователю
Frenchy-m365 : 27 october 2018, 21:38
на это сообщение (развернуть)

привет, ребята

Мне нужна конкретная информация.
Мне нужно заново сменить xiaomi m365 (китайская) замена bms из-за ошибки 22.
У меня есть st-link v2 (stm32) usb, я не знаю или подключаю + 3.3v на bms.
Это на левой стороне SWIM (свободное пространство)?
Должен ли я отпустить батарею, где бы я не мог использовать вспышки без батареи?

Спасибо за помощь!

Write in english, please, if possible.

3.3 volts on st-link connector used for programming standalone, not powered board, so if you disconnect battery this pin should be used.

Conejo
Форумчанин
МадридRating: 309
Conejo
28 october 2018, 17:34
Posted: 28 october 2018, 17:34

dssoft, завели его BMS в привате уже.

Для статистики, что было: пробитая U5 (убрали, закоротили 7-8), слетевший EEPROM STM8 (поправили ST-Linkом).


phalt, пока собирался, уехал единственный ES2 из сервиса :( жду следующего.


dssoft, скорость в м/ч, которая идёт в регистры 26 и B5,  рассчитывается вот так: speed = (SpeedInternal * 1387 / 15)>>5 вот здесь (это v1.40):

ROM:08006F2A LDR R0, [R4,#(SpeedInternal - 0x200003AC)]
ROM:08006F2C MOVW R1, #1387
ROM:08006F30 MULS R0, R1
ROM:08006F32 MOVS R1, #15
ROM:08006F34 SDIV.W R0, R0, R1
ROM:08006F38 ASRS R0, R0, #5

что примерно соответствует умножению на 2.89. Разные скоростные константы в патчах вроде KERS limit, speed limit итд, идут в единицах км/ч*345, делим 1000 (км/ч -> м/ч) на 345, получаем примерно те же 2.89. Т.е. внутри прошивки скорость выражена в каких-то угловых единицах вроде "оборотов/цикл контроллера", все константы-ограничители сразу переведены из линейных единиц в них же.

Для правильного отображения достаточно править это место. Но оно не повлияет на внутренние процессы - ограничение скорости, KERS итд.

 3   
dssoft
Новичок
Rating: 3
dssoft
29 october 2018, 0:37
Posted: 29 october 2018, 0:37

Conejo, вам за ваш труд я бы с удовольствием проставился, жаль что живу далековато. :)


Огромное спасибо, пойду нарисую патчи. Единственный вопрос - пройденный километраж считается в оборотах или уже в метрах? То есть будет ли он корректно считаться после изменения формулы?

Conejo
Форумчанин
МадридRating: 309
Conejo
29 october 2018, 2:02
Posted: 29 october 2018, 2:02
Ответ пользователю
dssoft : 29 october 2018, 0:37
на это сообщение (развернуть)

Conejo, вам за ваш труд я бы с удовольствием проставился, жаль что живу далековато. :)


Огромное спасибо, пойду нарисую патчи. Единственный вопрос - пройденный километраж считается в оборотах или уже в метрах? То есть будет ли он корректно считаться после изменения формулы?

Посмотрел - километраж будет считаться корректно, он использует ту самую рассчитанную скорость в м/ч.


К вопросу о лимитах KERS и прочих использующих угловую скорость - если принципиальна точность и там, можно в конструкторе длину окружности колеса распространять и туда везде.


Автор конструктора активен то вообще? А то форкнуть его (конструктор, не автора :)) и захостить где-нибудь тут.

 1   
Frenchy-m365
Новичок
Rating: 2
Frenchy-m365
29 october 2018, 16:13
Posted: 29 october 2018, 16:13
Ответ пользователю
dssoft : 28 october 2018, 15:17
на это сообщение (развернуть)

Write in english, please, if possible.

3.3 volts on st-link connector used for programming standalone, not powered board, so if you disconnect battery this pin should be used.

excuse me ,i don't know if i write in english or in russian.


Conejo say for me :  U5 is dead and after i have error 22 .

All it's ok now !

thanks for all !



nickkee
Участник
Rating: 59
nickkee
28 november 2018, 22:55
Posted: 28 november 2018, 22:55

Ребята выложили 1.4.3, внутри новые BLE и BMS

Duke ®
Новичок
Москва
Duke ®
04 december 2018, 11:44
Posted: 04 december 2018, 11:44

Добрый день.

Возможно тупой вопрос, извините.

Можно ли с одного контроллера слить прошивку в другой, чтобы перенесся серийник, пробег и прочее?

Первый контроллер - кирпич, на котором даже не горит красный светодиод, хотя иногда тускло горит.

Второй живой, б.у., с прошивкой 1.4.3, но работает только с Материковым Китаем, к региону Другие страны не привязывается (ошибка -29).

Conejo
Форумчанин
МадридRating: 309
Conejo
04 december 2018, 12:26
Posted: 04 december 2018, 12:26
Ответ пользователю
Duke ® : 04 december 2018, 11:44
на это сообщение (развернуть)
Добрый день.Возможно тупой вопрос, извините.Можно ли с одного контроллера слить прошивку в другой, чтобы...

Добрый день.

Возможно тупой вопрос, извините.

Можно ли с одного контроллера слить прошивку в другой, чтобы перенесся серийник, пробег и прочее?

Первый контроллер - кирпич, на котором даже не горит красный светодиод, хотя иногда тускло горит.

Второй живой, б.у., с прошивкой 1.4.3, но работает только с Материковым Китаем, к региону Другие страны не привязывается (ошибка -29).

С кирпича данные уже не считать. Однако серийник должен быть на корпусе самоката, его прописать можно (см. инструкцию по восстановлению прошивки через st-link в этой теме ранее).

Duke ®
Новичок
Москва
Duke ®
04 december 2018, 15:52
Posted: 04 december 2018, 15:52
Ответ пользователю
Conejo : 04 december 2018, 12:26
на это сообщение (развернуть)
С кирпича данные уже не считать. Однако серийник должен быть на корпусе самоката, его прописать можно (см....

С кирпича данные уже не считать. Однако серийник должен быть на корпусе самоката, его прописать можно (см. инструкцию по восстановлению прошивки через st-link в этой теме ранее).

Да, я про st-link прочитал. Спасибо.

Блютус же на верхней плате, где кнопка, в ней самой ничего не прописано?

Серийник и соответственно регион только в контроллере?


Кстати, кто-то в Москве может небесплатно помощь с этим? Желательно в ЗАО?