Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport STM32H7 FDCAN #185

Open
wants to merge 7 commits into
base: px4_firmware_nuttx-10.1.0+
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
167 changes: 165 additions & 2 deletions arch/arm/src/stm32h7/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ config ARCH_CHIP_STM32H743AG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_A
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
UFBGA169
Expand All @@ -35,6 +37,8 @@ config ARCH_CHIP_STM32H743BG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_B
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
LQFP208
Expand All @@ -44,6 +48,8 @@ config ARCH_CHIP_STM32H743BI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_B
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
LQFP208
Expand All @@ -53,6 +59,8 @@ config ARCH_CHIP_STM32H743IG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_I
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
LQFP176 or UFBGA176
Expand All @@ -62,6 +70,8 @@ config ARCH_CHIP_STM32H743II
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_I
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
LQFP176 or UFBGA176
Expand All @@ -71,6 +81,8 @@ config ARCH_CHIP_STM32H743VG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_V
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
LQFP100 or TFBGA100
Expand All @@ -80,6 +92,8 @@ config ARCH_CHIP_STM32H743VI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_V
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
LQFP100 or TFBGA100
Expand All @@ -89,6 +103,8 @@ config ARCH_CHIP_STM32H743XG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_X
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
TFBGA240
Expand All @@ -98,6 +114,8 @@ config ARCH_CHIP_STM32H743XI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_X
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
TFBGA240
Expand All @@ -107,6 +125,8 @@ config ARCH_CHIP_STM32H743ZG
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_G
select STM32H7_IO_CONFIG_Z
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 1024 Kb FLASH, 1024K Kb SRAM,
LQFP144
Expand All @@ -116,6 +136,8 @@ config ARCH_CHIP_STM32H743ZI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_Z
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
LQFP144
Expand All @@ -125,6 +147,8 @@ config ARCH_CHIP_STM32H747XI
select STM32H7_STM32H7X7XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_X
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
Dual core STM32 H7 Cortex M7+M4, 2048 Kb FLASH, 1024K Kb SRAM
TFBGA240
Expand All @@ -134,6 +158,8 @@ config ARCH_CHIP_STM32H753AI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_A
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
with cryptographic accelerator, UFBGA169
Expand All @@ -153,6 +179,8 @@ config ARCH_CHIP_STM32H753II
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_I
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
with cryptographic accelerator, LQFP176/UFBGA176
Expand All @@ -162,6 +190,8 @@ config ARCH_CHIP_STM32H753VI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_V
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
with cryptographic accelerator, LQFP100/TFBGA100
Expand All @@ -180,6 +210,8 @@ config ARCH_CHIP_STM32H753ZI
select STM32H7_STM32H7X3XX
select STM32H7_FLASH_CONFIG_I
select STM32H7_IO_CONFIG_Z
select STM32H7_HAVE_FDCAN1
select STM32H7_HAVE_FDCAN2
---help---
STM32 H7 Cortex M7, 2048 Kb FLASH, 1024K Kb SRAM,
with cryptographic accelerator, LQFP144
Expand Down Expand Up @@ -366,15 +398,26 @@ config STM32H7_HAVE_SPI6
bool
default n

config STM32H7_HAVE_FDCAN1
bool
default n

config STM32H7_HAVE_FDCAN2
bool
default n

# These "hidden" settings are the OR of individual peripheral selections
# indicating that the general capability is required.

config STM32H7_ADC
bool
default n

config STM32H7_CAN
config STM32H7_FDCAN
bool
select NET_CAN_HAVE_CANFD
select NET_CAN_EXTID
select NET_CAN_HAVE_TX_DEADLINE
default n

config STM32H7_DAC
Expand Down Expand Up @@ -563,6 +606,18 @@ config STM32H7_WWDG
default n
select WATCHDOG

config STM32H7_FDCAN1
bool "FDCAN1"
select STM32H7_FDCAN
default n
depends on STM32H7_HAVE_FDCAN1

config STM32H7_FDCAN2
bool "FDCAN2"
select STM32H7_FDCAN
default n
depends on STM32H7_HAVE_FDCAN2

menu "STM32H7 I2C Selection"

config STM32H7_I2C1
Expand Down Expand Up @@ -5275,6 +5330,114 @@ config STM32H7_QENCODER_SAMPLE_EVENT_8

endchoice

endmenu
endmenu # QEncoder Driver

menu "FDCAN Driver Configuration"
depends on STM32H7_FDCAN1 || STM32H7_FDCAN2

menu "FDCAN1 Configuration"
depends on STM32H7_FDCAN1

config FDCAN1_BITRATE
int "CAN bitrate"
depends on !NET_CAN_CANFD
default 1000000

config FDCAN1_ARBI_BITRATE
int "CAN FD Arbitration phase bitrate"
depends on NET_CAN_CANFD
default 1000000

config FDCAN1_DATA_BITRATE
int "CAN FD Data phase bitrate"
depends on NET_CAN_CANFD
default 4000000

endmenu # STM32H7_FDCAN1

menu "FDCAN2 Configuration"
depends on STM32H7_FDCAN2

config FDCAN2_BITRATE
int "CAN bitrate"
depends on !NET_CAN_CANFD
default 1000000

config FDCAN2_ARBI_BITRATE
int "CAN FD Arbitration phase bitrate"
depends on NET_CAN_CANFD
default 1000000

config FDCAN2_DATA_BITRATE
int "CAN FD Data phase bitrate"
depends on NET_CAN_CANFD
default 4000000

endmenu # STM32H7_FDCAN2

config STM32H7_FDCAN_REGDEBUG
bool "Enable register dump debugging"
depends on DEBUG_CAN_INFO
depends on DEBUG_NET_INFO
default n
---help---
Output detailed register-level CAN device debug information.
Requires also CONFIG_DEBUG_CAN_INFO and CONFIG_DEBUG_NET_INFO.

config STM32H7_FDCAN_LOOPBACK
bool "Enable FDCAN loopback mode"
default n
---help---
Enable the FDCAN local loopback mode for testing purposes.
Requires a further choice of internal or external loopback mode.

TODO: Enable separately for FDCAN1 and FDCAN2

choice
prompt "FDCAN Loopback Mode"
depends on STM32H7_FDCAN_LOOPBACK
default STM32H7_FDCAN_LOOPBACK_INTERNAL

config STM32H7_FDCAN_LOOPBACK_INTERNAL
bool "Internal loopback mode"
---help---
Enable internal loopback mode, where both Tx and Rx are
disconnected from the CAN bus. This can be used for a "Hot Selftest",
meaning the FDCAN can be used without affecting a running CAN bus.

All transmitted frames are treated as received frames and processed
accordingly.

config STM32H7_FDCAN_LOOPBACK_EXTERNAL
bool "External loopback mode"
---help---
Enable external loopback mode, where the Rx pin is disconnected from
the CAN bus but the Tx pin remains connected.

All transmitted frames are treated as received frames and processed
accordingly.

endchoice # CAN Loopback Mode

choice
prompt "FDCAN WorkQueue Selection"
default STM32H7_FDCAN_LPWORK

config STM32H7_FDCAN_LPWORK
bool "Use LP work queue"
---help---
Use the low-priority (LP) work queue for reception and transmission
of new frames and for processing of transmission timeouts.

config STM32H7_FDCAN_HPWORK
bool "Use HP work queue"
---help---
Use the high-priority (HP) work queue for reception and transmission
of new frames and for processing of transmission timeouts.

endchoice

endmenu # FDCAN Driver


endif # ARCH_CHIP_STM32H7
4 changes: 4 additions & 0 deletions arch/arm/src/stm32h7/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ ifeq ($(CONFIG_STM32H7_ADC),y)
CHIP_CSRCS += stm32_adc.c
endif

ifeq ($(CONFIG_STM32H7_FDCAN),y)
CHIP_CSRCS += stm32_fdcan_sock.c
endif

ifeq ($(CONFIG_STM32H7_BBSRAM),y)
CHIP_CSRCS += stm32_bbsram.c
endif
Expand Down
Loading