• Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone


    Screenshot from 2013-04-03 15:35:12
    For most people the above image means absolutely nothing, but for that one guy that has been searching for two days straight with no luck and finally arrives here, he has never ever seen anything more beautiful. To that guy: Dude, you are in safe hands. I’ll guide you through it : )

    With Linux Kernel 3.8.x, the use of device tree overlays are used for enabling and configuring drivers. This post gives an example of how to enable Both the channels of SPI1 on a BeagleBone. Note that a kernel should be compatible with both an Angstrom file system or any other suitable file system like Debian, although this one has been developed with Ubuntu 12.04.

    To get some background info on this topic have a look at Enable PWM on BeagleBone with DT overlays and Adding BeagleBone cape support to a kernel with Device Tree in Ubuntu.

    Mux the pins
    In the first fragment, the pins must be muxed. Note that at the time of this writing, only the mode (the first three bits) and not the mux is working so the configuration must be done by the driver. The SPI driver fixes this.

    bone_replicape_spi1_pins: pinmux_replicape_spi1_pins {
    				pinctrl-single,pins = <
    					0x190 0x13	/* P9_31 = mcasp0_aclkx.spi1_sclk				 , OUTPUT_PULLUP | MODE3 */
    					0x194 0x33	/* P9_29 = mcasp0_fsx.spi1_d0					 , INPUT_PULLUP  | MODE3 */
    					0x198 0x13	/* P9_30 = mcasp0_axr0.spi1_d1					 , OUTPUT_PULLUP | MODE3 */
    					0x19c 0x13	/* P9_28 = mcasp0_ahclkr.spi1_cs0				 , OUTPUT_PULLUP | MODE3 */					
    					0x164 0x12  /* P9_42 = GPIO0_7 =  eCAP0_in_PWM0_out.gpio0[7] , OUTPUT_PULLUP | MODE2 */
    				>;
    			};					
    

    Enable the driver
    To enable the driver, you must override the status of the spi1 or spi2 (or both) targets.

    	fragment@1 {
    		target = <&spi1>;
    		__overlay__ {
    			#address-cells = <1>;
    			#size-cells = <0>;
    			status			= "okay";
    			pinctrl-names	= "default";
    			pinctrl-0		= <&bone_replicape_spi1_pins>;	
    			cs-gpios = <&gpio4 17 0>, <&gpio1 7 0>;
    
    			stepper_control{
    				#address-cells = <1>;
    				#size-cells = <0>;
    
    				compatible = "spidev";
    
    				reg = <0>;
    				spi-max-frequency = <16000000>;
    				spi-cpha;	// Stepper control has mode 1 (CPOL = 0, CPHA = 1)
    			};
    
    			stepper_current{
    				#address-cells = <1>;
    				#size-cells = <0>;
    
    				compatible = "spidev";
    
    				reg = <1>;
    				spi-max-frequency = <16000000>;
    				// Stepper current has mode 0 (CPOL = 0, CPHA = 0)
    			};
    		};
    	};
    

    Status mus be “okay” here to override the default “disabled” in am33xxdtsi.

    There are also a couple of more things to consider.
    Pincontrol-names – “The list of names to assign states” from the documentation.
    pincontrol-pins refrences the cell in the pinmux fragment.
    cs-gpios – This refers to the pins used for Chip Selects. Since there are two channels,
    (SPI1.0 and SPI1.1) activated, these must be defined. The arguments in the brackets refer to
    GPIO bank, but there is a gotcha: If the pin is called GPIO3_17 in the datasheet, it becomes
    <&GPIO4 17 ?> in the device tree, so one higher for the bank nr. The last number is the flags to send to the GPIO controller.
    Output is 0, input is 1.
    Look in the kernel documentation on GPIO for more info:
    https://www.kernel.org/doc/Documentation/gpio.txt

    Enable the SPIDEV
    The next two nodes are the two next SPI channels. Call them whatever. To use the spidev user interface (the one that makes /dev/spi1.* show up), specify compatible = “spidev”.
    If you have an SPI display or similar, there are drivers for that as well. Look in the folder

    KERNEL/fimrware/capes/
    

    and look at the cape overlay for Koen Kooi’s HEXY robot, it has an SPI display from Adafruit:
    http://www.youtube.com/watch?v=iH5OPj-Yybc (Getting a very good framerate on an SPI display, I might add..)

    The variable “reg” refers to which Chip Select to use.
    Max frequency is just that, guess.

    There are also options for CPHA, CPOL,

    Acronyms
    McSPI – Multi channel Serial Peripheral Interface
    CS – chip select

    Files involved
    McSPI – KERNEL/drivers/spi/spi-omap2-mcspi.c
    spidev – KERNEL/drivers/spi/spidev.c
    spi – KERNEL/drivers/spi/spi.c

  • 相关阅读:
    二分题目
    求最小公倍数的最简模板
    用 vue 脚手架 vue-cli 初始化(新建)项目
    电脑没有声音
    node.js 安装步骤
    phpStrom编辑器 通过 git 提交代码到 gitlab
    jq 实现头像(气泡式浮动)
    微信网页授权 、获取用户昵称 头像等信息
    秒格式化 “秒” 为 天 时 分 秒
    改变swiper 按钮swiper-button-next 颜色
  • 原文地址:https://www.cnblogs.com/dolphi/p/3662314.html
Copyright © 2020-2023  润新知