Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:xu3_expansionboard [2016/05/18 15:25] charles.park [SPI Flash Control on Expansion Board] |
en:xu3_expansionboard [2017/06/07 17:46] (current) odroid |
||
---|---|---|---|
Line 33: | Line 33: | ||
| | ||
==== SPI Flash Control on Expansion Board ==== | ==== SPI Flash Control on Expansion Board ==== | ||
- | |||
- | To use spidev on your **ODROID-XU4** you should fix device tree source. | ||
- | |||
- | === How to fix device tree blob with command line === | ||
- | Install device tree compiler package. | ||
- | sudo apt-get install device-tree-compiler | ||
- | |||
- | Create exynos5422-odroidxu3.dts file. | ||
- | <code> | ||
- | sudo -s | ||
- | cd /media/boot | ||
- | dtc -I dtb -O dts ./exynos5422-odroidxu3.dtb > ./exynos5422-odroidxu3.dts | ||
- | </code> | ||
- | |||
- | Edit dts file to use vi editor. | ||
- | <code> | ||
- | vi ./exynos5422-odroidxu3.dts | ||
- | </code> | ||
- | |||
- | Find string "spi@12d3" & add spi control data. | ||
- | |||
- | <code> | ||
- | ... | ||
- | spi@12d30000 { | ||
- | compatible = "samsung,exynos5410-spi"; | ||
- | reg = <0x12d30000 0x100>; | ||
- | interrupts = <0x0 0x45 0x0>; | ||
- | dma-mode; | ||
- | dmas = <0x43 0x5 0x43 0x4>; | ||
- | dma-names = "tx", "rx"; | ||
- | swap-mode; | ||
- | #address-cells = <0x1>; | ||
- | #size-cells = <0x0>; | ||
- | clocks = <0x2 0x5cb 0x2 0x1027>; | ||
- | clock-names = "spi", "spi_busclk0"; | ||
- | pinctrl-names = "default"; | ||
- | pinctrl-0 = <0x44>; | ||
- | status = "okay"; | ||
- | cs-gpios = <0x45 0x5 0x0>; | ||
- | |||
- | /* ADD Line Start(spi control data) */ | ||
- | samsung,spi-src-slk = <0>; | ||
- | num-cs = <0>; | ||
- | |||
- | spidev { | ||
- | compatible = "spidev"; | ||
- | reg = <0>; | ||
- | spi-max-frequency = <20000000>; | ||
- | |||
- | controller-data { | ||
- | cs-gpio = <0x45 0x5 0x0>; | ||
- | samsung,spi-feedback-delay = <0>; | ||
- | }; | ||
- | }; | ||
- | /* ADD Line Ebd */ | ||
- | }; | ||
- | ... | ||
- | </code> | ||
- | |||
- | <WRAP center round important 100%> | ||
- | controller-data 안의 **cs-gpio**값은 **cs-gpios** 와 동일하게 설정되어야 합니다. | ||
- | </WRAP> | ||
- | |||
- | Compile dts file & update | ||
- | <code> | ||
- | dtc -O dtb -o ./exynos5422-odroidxu3.dtb ./exynos5422-odroidxu3.dts | ||
- | </code> | ||
- | |||
- | Reboot. | ||
- | reboot | ||
- | Check your SPI node. | ||
- | ls /dev/spidev* | ||
=== Compile & run SPI test example source code === | === Compile & run SPI test example source code === | ||
Line 514: | Line 442: | ||
</file> | </file> | ||
+ | |||
+ | |||
+ | If you use an old kernel, you must edit/compile the device-tree source first to enable spidev on your **ODROID-XU4/XU3** | ||
+ | |||
+ | === How to fix device tree blob with command line === | ||
+ | Install device tree compiler package. | ||
+ | sudo apt-get install device-tree-compiler | ||
+ | |||
+ | Generate an exynos5422-odroidxu3.dts file from the stock dtb file. | ||
+ | <code> | ||
+ | sudo -s | ||
+ | cd /media/boot | ||
+ | dtc -I dtb -O dts ./exynos5422-odroidxu3.dtb > ./exynos5422-odroidxu3.dts | ||
+ | </code> | ||
+ | |||
+ | Edit dts file to use vi editor. | ||
+ | <code> | ||
+ | vi ./exynos5422-odroidxu3.dts | ||
+ | </code> | ||
+ | |||
+ | Find string "spi@12d3" & add spi control data. | ||
+ | |||
+ | <code> | ||
+ | ... | ||
+ | spi@12d30000 { | ||
+ | compatible = "samsung,exynos5410-spi"; | ||
+ | reg = <0x12d30000 0x100>; | ||
+ | interrupts = <0x0 0x45 0x0>; | ||
+ | dma-mode; | ||
+ | dmas = <0x43 0x5 0x43 0x4>; | ||
+ | dma-names = "tx", "rx"; | ||
+ | swap-mode; | ||
+ | #address-cells = <0x1>; | ||
+ | #size-cells = <0x0>; | ||
+ | clocks = <0x2 0x5cb 0x2 0x1027>; | ||
+ | clock-names = "spi", "spi_busclk0"; | ||
+ | pinctrl-names = "default"; | ||
+ | pinctrl-0 = <0x44>; | ||
+ | status = "okay"; | ||
+ | cs-gpios = <0x45 0x5 0x0>; | ||
+ | |||
+ | /* ADD Line Start(spi control data) */ | ||
+ | samsung,spi-src-slk = <0>; | ||
+ | num-cs = <0>; | ||
+ | |||
+ | spidev { | ||
+ | compatible = "spidev"; | ||
+ | reg = <0>; | ||
+ | spi-max-frequency = <20000000>; | ||
+ | |||
+ | controller-data { | ||
+ | cs-gpio = <0x45 0x5 0x0>; | ||
+ | samsung,spi-feedback-delay = <0>; | ||
+ | }; | ||
+ | }; | ||
+ | /* ADD Line Ebd */ | ||
+ | }; | ||
+ | ... | ||
+ | </code> | ||
+ | |||
+ | <WRAP center round important 100%> | ||
+ | The value of **cs-gpio** must be identical to **cs-gpios** in controller-data section. | ||
+ | </WRAP> | ||
+ | |||
+ | Compile dts file & update | ||
+ | <code> | ||
+ | dtc -O dtb -o ./exynos5422-odroidxu3.dtb ./exynos5422-odroidxu3.dts | ||
+ | </code> | ||
+ | |||
+ | Reboot. | ||
+ | reboot | ||
+ | Check your SPI node. | ||
+ | ls /dev/spidev* | ||
+ | |||
+ | After update, you might need a hard-boot. Reboot doesn't access the updated dtb file from time to time. | ||
+ | |||
+ |