LoginSignup
0
0

More than 3 years have passed since last update.

Zephyr > west build時 > STM32F769:SPI2で成功, STM32L476:SPI2で失敗 > device treeファイルの定義に違いがある

Last updated at Posted at 2019-12-27
動作環境
Ubuntu 18.04 LTS
ボード: STM32L476 Nucleo_64 (以下、STM32L476)
ボード: STM32F769 Discovery Kit (以下、STM32F769)
Zephyr 2.1.0-rc1

状況

  • STM32F769ではSPI2を指定してビルドできる
  • STM32L476ではSPI2を指定してビルドできない
    • 以下のようなエラーが出る
zephyr/include/generated/generated_dts_board_fixups.h:199:27: error: 'DT_ST_STM32_SPI_FIFO_40003800_IRQ_0_PRIORITY' undeclared (first use in this function); did you mean 'DT_ST_STM32_SPI_FIFO_40013000_IRQ_0_PRIORITY'?
 #define DT_SPI_2_IRQ_PRI  DT_ST_STM32_SPI_FIFO_40003800_IRQ_0_PRIORITY

https://docs.zephyrproject.org/latest/boards/arm/nucleo_l476rg/doc/index.html
にはSPI1, SPI2, SPI3の定義はある。

なぜSPI2がビルドエラーになるか調べた。

./build/zephyr/include/generated/generated_dts_board_fixups.h

west buildした結果に違いがある。

STM32F769の場合、以下のような定義がある。

#define DT_SPI_2_BASE_ADDRESS       DT_ST_STM32_SPI_40003800_BASE_ADDRESS
#define DT_SPI_2_IRQ_PRI        DT_ST_STM32_SPI_40003800_IRQ_0_PRIORITY
#define DT_SPI_2_NAME           DT_ST_STM32_SPI_40003800_LABEL
...

STM32L476の場合は上記のような定義がない。
この差はdevice treeの定義によるものと考えられる。

device treeの差異

stm32f7.dtsi
        spi2: spi@40003800 {
            compatible = "st,stm32-spi";
            #address-cells = <1>;
            #size-cells = <0>;
            reg = <0x40003800 0x400>;
            clocks = <&rcc STM32_CLOCK_BUS_APB1 0x00004000>;
            interrupts = <36 5>;
            status = "disabled";
            label = "SPI_2";
        };

上記の定義がstm32l4.dtsiにはない。

STM32L476の場合、SPI2のMemory Mappingの定義がなく、上記のエラーが出ているようだ。
同じことがSPI3でも発生する。

<BOARD>.overlayにspi2の定義を足すとビルドできるのかもしれない(未調査)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0