zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    import nonWPF types into the markup
    using放在namespace里面还是外面?
    WCF Contracts
    Properties Specific to RoutedEventArgs
    sql将浮点表示的日期转化为标准日期
    Debug into WCF ServiceReference
    让form自适应高度
    Qt Access violation code c0000005 debug write access violation
    C++支持多态的几种方法
    java on CentOS
  • 原文地址:https://www.cnblogs.com/dolphi/p/3662314.html
Copyright © 2011-2022 走看看