2023-02-07

eddy_em: (Default)
2023-02-07 01:16 am
Entry tags:

Ох уж эти весельчаки из ST!

Ладно, когда у МК разных семейств одинаковая вроде периферия как-то отличается. Но когда ты лепишь в одной и той же линейке разное — это ж совсем дичь! У STM32F303 в самых младших (6/8) нет USB, у средних (B/C) буфер 512Б и доступ к нему 1/16 (ХЗ, зачем они так это назвали, на самом деле это значит, что мы в uint32_t пишем по 2 байта данных, получается "прореженный" буфер), а у старших (D/E) буфер 1к (причем, как у F0 256Б с его хвоста делится с CAN) и доступ к нему — 2/16 (т.е. данные в буфере идут непрерывно).
Я, правда, в F0 что-то адово намутил с этими буферами (нужно тупо memcpy сделать, а я там привожу к uint16 и по два байта читаю).
Решил проблему так: объявил макрос USB1_16 — будет доступ "прореженный", объявил USB2_16 — непрерывный; в третьем случае — ошибка. Надо будет причесать все это и подумать, как организовать таким образом, чтобы уже не было архитектурнозависимых вещей в файлах usb.[ch] и usb_lib.[ch] (и вообще, лучше их объединить, выкинув в отдельный файл лишь дескрипторы; да и подумать, как проще реализовать переход к другому классу: хоть между HID и CDC).
Подтяжку USB DP на своей косячной плате сделал постоянной, но таки завтра перепаяю на какую-нибудь "кнопку": задолбался шнурок из компа выдирать/вставлять каждый раз после новой прошивки (аналогично с запуском дебаггера). Плату я переделал и подтяжку сделал через p-канальный мосфет так, чтобы она всегда была включена, если МК не подаст единичку на затвор (тогда и с DFU проблем не будет). Вместо ноги управления CS экрана у меня сейчас светодиод мигает. Завтра продолжу разбираться, почему у меня CAN не работает (неужто с ним тоже какие-то "нюансы"?).
eddy_em: (Default)
2023-02-07 07:49 pm

И как сделать две сети на одном интерфейсе?

Имеем домашний комп с одной сетевухой (вторую пока взять негде) и сдохший (видимо) роутер микротик. Очень хочется иметь выход как в интернет (через роутер 10.0.0.1), так и в локалку (таки наблюдать с компьютера удобней, чем с ноута, но и интернет нужен).
ОК, добавляем новый адрес:
ip addr add 192.168.3.119/16 dev net0

Матюков нет, все ОК:
ip addr
2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 1c:6f:65:3e:9f:ab brd ff:ff:ff:ff:ff:ff
    altname enp4s0
    inet 10.0.0.2/24 brd 10.0.0.255 scope global net0
       valid_lft forever preferred_lft forever
    inet 192.168.3.119/16 scope global net0
       valid_lft forever preferred_lft forever

И даже маршрутизация добавляется:
route add -net 192.168.0.0/16 gw 192.168.43.201
route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         KEENETIC_LITE   0.0.0.0         UG    2      0        0 net0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 net0
loopback        localhost       255.0.0.0       UG    0      0        0 lo
192.168.0.0     192.168.43.201  255.255.0.0     UG    0      0        0 net0
192.168.0.0     0.0.0.0         255.255.0.0     U     0      0        0 net0

Однако, по-прежнему, не пингуется сеть!
(я воткнул шнурок из роутера и шнурок локалки в один свитч; если настраиваю уникальный IP на компьютере, то работает туда либо сюда, а если общий — нет!)
Вот что за нафиг?!