FDCAN device tree configuration
目录
Article purpose
本文介绍了如何配置FDCAN when it is assigned to the Linux® 操作系统。 在这种情况下,它由 CAN framework 用于Bosch M_CAN控制器。
使用 device tree机制执行配置,该机制提供了FDCAN外设的硬件描述,并由M_CAN Linux驱动程序和 NET/CAN 框架使用。
如果外围设备已分配给另一个执行上下文,请参阅How to assign an internal peripheral to a runtime context 文章,以获取有关外围设备分配和配置的准则。
DT bindings documentation
M_CAN设备树绑定[1] 描述了所有必需和可选属性。
DT configuration
该硬件描述是 STM32 microprocessor 设备树文件(扩展名为.dtsi)和“板子”设备树文件(扩展名为.dts)的组合。 有关设备树文件分割的说明,请参见Device tree。
STM32CubeMX 可用于生成板卡设备树。有关更多详细信息,请参考How to configure the DT using STM32CubeMX。
DT configuration (STM32 level)
所有M_CAN节点均在stm32mp157c.dtsi中进行了描述 [2] 文件,该文件具有禁用状态和必需的属性,例如:
- 物理基址和设备寄存器映射的大小
- 消息RAM地址和大小(CAN SRAM)
- 主机时钟和CAN时钟
- 消息RAM配置
这是一组属性,对于给定的STM32器件可能不会改变。
m_can1: can@4400e000 { compatible = "bosch,m_can"; reg = <0x4400e000 0x400>, <0x44011000 0x1400>; /* FDCAN1 uses only the first half of the dedicated CAN_SRAM */ reg-names = "m_can", "message_ram"; interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "int0", "int1"; clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>; clock-names = "hclk", "cclk"; bosch,mram-cfg = <0x0 0 0 32 0 0 2 2>; status = "disabled"; }; m_can2: can@4400f000 { compatible = "bosch,m_can"; reg = <0x4400f000 0x400>, <0x44011000 0x2800>; /* The 10 Kbytes of the CAN_SRAM are mapped */ reg-names = "m_can", "message_ram"; interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "int0", "int1"; clocks = <&rcc CK_HSE>, <&rcc FDCAN_K>; clock-names = "hclk", "cclk"; bosch,mram-cfg = <0x1400 0 0 32 0 0 2 2>; /* Set mram-cfg offset to write FDCAN2 data on the second half of the dedicated CAN_SRAM */ status = "disabled"; };
bindings files中完整描述了必需和可选的属性。
该设备树部分与STM32微处理器有关。它必须保持原样,而不能由最终用户修改。 |
DT configuration (board level)
device tree 的一部分用于描述在给定板上使用的FDCAN硬件。 DT节点 ("m_can") 必须填写:
- 通过设置 status = "okay".来启用CAN块。
- 通过 pinctrl, through pinctrl-0 (default pins), pinctrl-1 (sleep pins) and pinctrl-names来配置正在使用的管脚。
DT configuration examples
以下示例显示了如何在板级上配置和启用FDCAN1实例:
&m_can1 { pinctrl-names = "default", "sleep"; /* configure pinctrl modes for m_can1 */ pinctrl-0 = <&m_can1_pins_a>; /* configure m_can1_pins_a as default pinctrl configuration for m_can1 */ pinctrl-1 = <&m_can1_sleep_pins_a>; /* configure m_can1_sleep_pins_a as sleep pinctrl configuration for m_can1 */ status = "okay"; /* enable m_can1 */ };
How to configure the DT using STM32CubeMX
The STM32CubeMX 工具可用于配置STM32MPU设备并获取相应的platform configuration device tree 文件。
STM32CubeMX可能不支持以上DT bindings documentation 段中描述的所有属性。 如果是,该工具会在生成的设备树中插入 user sections 。 然后可以编辑这些部分以添加一些属性,并将它们一代一代地保留下来。 有关更多信息,请参见STM32CubeMX 用户手册。
References
请参考以下链接以获取更多信息:
- ↑ Documentation/devicetree/bindings/net/can/m_can.txt | |}} Documentation/devicetree/bindings/net/can/m_can.txt M_CAN device tree bindings
- ↑ arch/arm/boot/dts/stm32mp157c.dtsi | |}} arch/arm/boot/dts/stm32mp157c.dtsi , STM32MP157C device tree file