~={yellow}Что к чему=~
- Модель 6721 была создана на базе модели 6711_v1 без каких либо изменений в программной или аппаратной части. Изменилось только название модели. На данный момент модель не вошла в основной репозиторий.
- Документация по протоколам лежит здесь [[megatec 单相协议 new.pdf]] [[Homework 8]] [[Galleon.pdf]]
~={green}Изменения и ветки=~
~={yellow}Mega=~
- Нужно было обеспечить поддержку данного ИБП и собрать прошивку для тестов у заказчика.
- Для работы с тонким ИБП "Mega" была создана ветка "mega".
- На данный момент модель в этой ветке - "6711_v1".
-
#### Задачи:
1. Интегрировать поддержку 3ф ИБП в контроллер 6709mts и 6712 (с внешним датчиком температуры и влажности) для поставки в МТС.
[[Galleon II Galleon III 3 phase V02.pdf]]
[[Galleon II-33-10K-60K-Rack_DS.PDF]]
[[Galleon II 3phase 10-40K UM.PDF]]
2. Интегрировать поддержку ИБП нового типа для Билайн в контроллеры 6709 или 6711v1. Протокол базируется на стандартном Megateс.
[[MEGA 通讯协议.pdf]]
6711
1. **Задача:** Убрать добавление “v1” к модели ИБП.
**Вопрос:** Где "v1" в модели ИБП 6711?
**Комментарий:** v1 именно в модели ИБП
- [ ] Выполнено
**Заметки:** Пока не нашел где это происходит.
6711 и 6711v1
1. **Задача:** Сбрасывать ошибку 13, сейчас сбрасываются 12 и 41. Ошибка 13 возникает в момент перегрева.
**Вопрос:** Как реагировать на ошибку 0x13. Не вижу, чтобы сейчас она отслеживалась.
**Комментарий:** Добавил условие "или" в функцию UPS_OverTempratureMonitor. Добавить в вызов функции в 6711.
- [x] Выполнено
2. **Задача:** После возникновения режима Fault проверять код ошибки. Выяснилось, что ИБП обновляет код ошибки. Необходимо переносить это изменение в журнал.
**Вопрос:** Что такое режим Fault и как он определяется?
**Комментарий:** Режим "Fault" отображается на главной странице веб. При переходе ИБП в этом режим контроллер должен отслеживать состояние ошибки (оно может изменяться) и при изменении фиксировать новое состояние ошибки в журнале.
**Заметки:**
Правлю функцию:
```c++
void ups_mode_response(char *data)
```
Пока сделал тестовую версию.
- [ ] Выполнено
3. **Задача:** Проверить работу RTC в високосный год, сейчас в журнале выглядит вот так:
- [x] Выполнено
Итоги
1. В вопросу RTC исправил функцию:
```c++
void TM_RTC_GetDateTimeFromUnix(TM_RTC_t* data, uint32_t unix)
```
Вопросы
1. Где "v1" в модели ИБП 6711?
2. Добавил условие "или" в функцию UPS_OverTempratureMonitor. Добавить в вызов функции в 6711.
3. Что такое режим Fault и как он определяется?
#### Общее:
* Проект ==bt-67xx_universal_hw==
* IP устройства по умолчанию 192.168.0.254
* login/pas - admin/12345
```bash
# Добавить ethernet интерфейс
$ sudo ifconfig eth0:1 192.168.0.200
```
#### Сборка/отладка:
```
arm-none-eabi-gcc --version
arm-none-eabi-gcc (Sourcery CodeBench Lite 2013.05-23) 4.7.3
/home/dtelenkov/soft/tools/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/arm-none-eabi
```
**Сборка:**
* Опция DEBUG=0 включает защиту flash памяти контроллера.
* Релиз выпускается с DEBUG=0
```bash
$ make HARDWARE=bt6711_v1 VERBOSE=1 DEBUG=1 PRINTF=custom MAC=EC-4C-4D-00-78-89 CROSS="/home/dtelenkov/soft/tools/Sourcery_CodeBench_Lite_for_ARM_EABI/bin/arm-none-eabi"
```
**Подключение:**
```bash
$ make openocd_ups
```
**Отладка:**
```bash
$ arm-none-eabi-gdb -x .gdbinit_bt6711_v1
```
**Снять защиту от чтения:**
```bash
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "init; reset halt; stm32f4x unlock 0; reset halt; exit"
```
~={yellow}Сборка проекта на WSL в Windows=~
Для проброса usb устройств в WSL необходимо установить usbipd.
Установка usbipd в Windows
```powershell
$ winget install --interactive --exact dorssel.usbipd-win
```
Или скачать здесь: https://github.com/dorssel/usbipd-win/releases
```powershell
# Вывести список устройств
$ usbipd list
# Подставить текущий BUSID устройства
$ usbipd attach --wsl --busid
```
~={yellow}Написал скрипт для этих команд. Пробрасывает st-link в WSL.
Находится: codewars/powershell/usbipd.py=~
```python
import subprocess
def run(cmd):
ret = subprocess.run(["powershell.exe", cmd], stdout=subprocess.PIPE)
s = ret.stdout
return s.decode("utf-8")
def get_busid():
info = run(r"usbipd list")
begin = info.find("STM32 STLink")
busid = info[begin - 18: begin - 15]
return busid
def attach_stlink():
busid = get_busid()
cmd = "usbipd attach --wsl --busid " + busid
run(cmd)
def detach_stlink():
busid = get_busid()
cmd = "usbipd detach --busid " + busid
run(cmd)
if __name__ == "__main__":
# detach_stlink()
attach_stlink()
```
Могут быть проблемы с доступом по TCP к конкретному порту. Для этого в настройка firewall windows добавить правило для порта https://addshore.com/2024/07/wsl2-com-port-pass-through-with-usbipd-firewall-issues/
Инструкция как добавить правило в firewall https://remontka.pro/open-ports-network-windows/
В WSL установить libusb stlink openocd
```bash
$ sudo apt install usbutils
```
При запуске gdb может потребоваться установить libncurses5.so
```bash
$ sudo apt install libncurses5
```
```
$ make HARDWARE=bt6711_v1 PRINTF=custom DEBUG=0 MAC=EC-4C-4D-00-78-89 CROSS="/opt/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi"
```
~={green}Сборка web=~![[build_web.png]]