~={yellow}Преобразование py в exe.=~
- https://www.geeksforgeeks.org/python/convert-python-script-to-exe-file/
**Список прерываний:**
- TIM_14 - таймер для статистики FreeRTOS, watchdog toogle.
- TIM_5 - статистика пользователя и измерения в мкс.
- TIM_6 - uptime
- UART_6 - терминал
- DMA_2 Stream 0 - ADC
- DMA_2 Stream 2 - SPI_1 RX, FPGA
- DMA_2 Stream 3 - SPI_1 TX, FPGA
- SPI_1 - обмен с FPGA
- DMA_2 Stream 7 - QSPI
- QSPI
- Ethernet
- USB_OTG_FS
```c
HAL_NVIC_SetPriority(TIM8_TRG_COM_TIM14_IRQn, 8, 0);
HAL_NVIC_SetPriority(TIM5_IRQn, 8, 0);
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 8, 0);
HAL_NVIC_SetPriority(USART6_IRQn, 6, 0);
HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0);
HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 5, 0);
HAL_NVIC_SetPriority(SPI1_IRQn, 5, 0);
HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 5, 0);
HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0);
HAL_NVIC_SetPriority(ETH_IRQn, 0x7, 0);
HAL_NVIC_SetPriority(OTG_FS_IRQn, 7, 0);
```
Bootloader
Sector 0 0x0800 0000 - 0x0800 7FFF - 32 KB
Main FW (480 кБ)
Sector 1 0x0800 8000 - 0x0800 FFFF - 32 KB
Sector 2 0x0801 0000 - 0x0801 7FFF - 32 KB
Sector 3 0x0801 8000 - 0x0801 FFFF - 32 KB
Sector 4 0x0802 0000 - 0x0803 FFFF - 128 KB
Sector 5 0x0804 0000 - 0x0807 FFFF - 256 KB
Свободное место
Sector 6 0x0808 0000 - 0x080B FFFF - 256 KB
Sector 7 0x080C 0000 - 0x080F FFFF - 256 KB
Backup-регистры
- Регистр 0 - устанавливается в 1 при необходимости обновления FW (проверяется в IAP)
- Регистр 1 - содержит размер полученной прошивки
- Регистр 3 - содержит результат обновления FW (устанавливается в IAP)
TODO
- Перенести watchdog toogle.
~={yellow}Проблема с соединением=~
Ссылки:
- https://totozhang.github.io/2016-01-31-tcp-timewait-status/
- https://networkguru.ru/protokol-transportnogo-urovnia-tcp-chto-nuzhno-znat/
- http://www.xserver.ru/computer/protokol/tcpip/3/18.shtml - хорошее описание TCP на русском
~={green}Разное о TCP=~
Когда каждая сторона отправила свой SYN чтобы установить соединение, она выбирает исходный номер последовательности (ISN) для этого соединения. ISN должен меняться каждый раз, поэтому каждое соединение имеет свой, отличный от других ISN. ISN - это 32-битный счетчик, который увеличивается на единицу каждые 4 микросекунды. Благодаря номерам последовательностей, пакеты, задержавшиеся в сети и доставленные позже, не воспринимаются как часть существующего соединения.
~={yellow}Установка соединения=~
Для установки соединения достаточно 3 сегмента.
Если сервер не отвечает на SYN клиента, клиент отправит второй SYN через 5.8 секунды, а третий пошлет через 24 секунды после второго. Большинство систем Berkley прекращают попытки соединения через 75 секунд.
~={yellow}Разрыв соединения=~
Для разрыва соединения достаточно 4-ех сегментов. Это связано с тем, что TCP-соединение может быть в полузакрытом состоянии. Каждое направление должно быть закрыто независимо от другого.
Когда сервер получает FIN, он отправляет назад ACK с принятым номером последовательности плюс один (сегмент 5). На FIN тратится один номер последовательности, так же как на SYN.
~={yellow}MSS максимальный размер сегмента=~
MSS - это самая большая порция данных, которую TCP пошлет на удаленный конец. Когда соединение устанавливается, каждая сторона может объявить свой MSS. 1024 - было в примерах. IP датаграмма, которая получится в результате, обычно на 40 байт больше: 20 байт отводится под TCP заголовок и 20 байт под IP заголовок. Если одна сторона не принимает опцию MSS от другой стороны, используется размер по умолчанию в 536 байт (в этом случае IP датаграмма будет составлять 576 байт).
```c
// TCP_MSS = (Ethernet MTU - IP header size - TCP header size)
#define TCP_MSS (1500 - 40)
```
### Readme
# Ethernet/USB Спектрометр
#### Обновление через режим DFU.
В микроконтроллер необходимо загрузить два DFU-образа fw.dfu, uip.dfu.
- iap.dfu - образ программы загрузчика. Загрузчик будет необходим для возможности последующих обновлений контроллера, не переходя в режим DFU.
- fw.dfu - образ основной программы спектрометра.
Чтобы перевести спектрометр в режим DFU нужно воспользоваться программой sMbEth. После установки связи программы со спектрометром во вкладке "Справка" нужно выбрать пункт "Режим DFU".
**Важно! USB кабель должен быть подключен.**
![[sMbEth.png]]
Обновление через в режиме DFU производится с помощью программы DfuSeDemo.
![[DfuSe Demo.png]]
В программе необходимо нажать кнопку "Choose" и выбрать образ iap.dfu. Далее нажать кнопку "Upgrade". В память контроллера будет загружен образ. Далее нужно повторить эти действия, но уже для образа fw.dfu.
По завершению загрузки образов нажать кнопку "Leave DFU mode". Спектрометр готов к работе.
#### Удаленное обновление.
В этом случае после получения специального запроса (см. запрос SetUpdate) спектрометр сделает попытку подключиться к удаленному серверу и скачать файл с прошивкой. После скачивания и успешной проверки контрольной суммы файла, контроллер перезагрузится, перейдет в загрузчик и обновит прошивку. Далее загрузится в обычном режиме.
На удаленном сервере должна быть запущена программа update_server.exe. При запуске указать TCP порт, на который будут приходить HTTP запросы от спектрометра.
```bash
$ ./update_server.exe 8000
```
Файл новой прошивки (fw.bin) должен располагать в директории /store относительно программы update_server.exe. Имя файла должно быть только таким.
Исходный код и исполняемый файл программы располагаются в /tools/update_server/.
Файлы прошивок с разными версиями лежат в /tools/update_server/store/.
Важно! Перед тестированием обновления не забыть переименовать файл с нужной версией прошивки в "fw.bin".
### Дополнительные HTTP-запросы
- Версия прошивки спектрометра добавлена в запрос "getInfo" в поле "fw_ver".
```json
// Ответ
{"jsonrpc": "2.0","result":{"params":
{
"sn": "040/2023",
"ver": "1.1",
"name": "SBS-200-23",
"fw_ver": "v1.14"
}
},"id":11000000}
```
- Запрос - команда на обновление с прошивки контроллера "setUpdate".
```json
// Запрос
// В параметре "serverIP" должен быть указан IP и порт сервера на котором работает программа обновления.
// В параметре "fileName" должен быть указан путь к файлу с новой прошивкой.
{"spID":"0", "update":{"serverIp":"172.16.2.4:9000","fileName":"/store/fw.bin"}}
```
### Обновление FPGA
- Подключиться через любую программу терминала к виртуальному COM-порту. Скорость соединения (baudrate) значения не имеет.
- Ввести команду "fpga_boot" и закрыть окно терминала.
- Далее в командной строке Windows ввести команды по следующему образцу :
``` bash
$ jamplayer2018.exe -v -s comport -a cofigure filename
$ jamplayer2018.exe -v -s comport -a program filename
```
Примеры:
``` bash
$ .\jamplayer2018.exe -v -sCOM4 -aconfigure DVSS_stm32_Eth_CIV_sfl.jam
$ .\jamplayer2018.exe -v -sCOM4 -aprogram DVSS_stm32_Eth_CIV_sfl.jam
```