ethernet stm32.md 5.1 KB

Список прерываний:

  • 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

    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}Проблема с соединением=~

Ссылки:

~={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 байт).

// TCP_MSS = (Ethernet MTU - IP header size - TCP header size)

#define TCP_MSS (1500 - 40)