Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone
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
Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone的更多相关文章
- Help for enable SSL 3.0 and disable TLS 1.0..
https://support.mozilla.org/en-US/questions/967266 i cant find tab Encryption for enable SSL 3.0 and ...
- Android Studio 3.0找不到Android Device Monitor
因为自Android Studio 3.0开始弃用Android Device Monitor,Android Developers官网上的原话是: Android Device Monitor is ...
- Android-Android Studio 3.0找不到Android Device Monitor
原文:https://blog.csdn.net/yuanxiang01/article/details/80494842?utm_source=copy 为什么Android Studio 3. ...
- spi子系统之驱动SSD1306 OLED
spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了.主 ...
- Blackfin DSP(五):BF533的SPI接口
533SPI的特性 最高速度可达SCLK/4: 支持主模式和从模式: 可使用8个GPIO口作为从选择线: 1 slave select input pins 7 slave select output ...
- SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
由于工作的原因,对SPI的理解最为深刻,也和SPI最有感情了,之前工作都是基于OSEK操作系统上进行实现,也在US/OS3上实现过SPI驱动的实现和测试,但是都是基于基本的寄存器操作,没有一个系统软件 ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...
- 【转】SPI总线协议
SPI总线协议 By Xiaomin | April 17, 2016| 技术 概述 SPI(Serial Peripheral Interface)总线是主要应用于嵌入式系统内部通信的串行同步传输总 ...
- SPI SWD Protocol Implement
//================================================================================= // ARM SWD Mode ...
随机推荐
- ContentLoadingProgressBar不显示问题
ContentLoadingProgressBar需要设置style 并且在XML中布局的位置必须写在content布局的下面 <?xml version="1.0" enc ...
- velocity-1.7学习笔记
Velocity是由Apache软件组织提供的一项开放源码项目,它是一个基于Java的模板引擎.通过Velocity模板语言(Velocity Template Language,VTL)定义模板(T ...
- C#反射实例应用--------获取程序集信息和通过类名创建类实例
AppDomain.CurrentDomain.GetAssemblies();获取程序集,但是获取的只是已经加载的dll,引用的获取不到. System.Reflection.Assembly.Ge ...
- c语言时间库函数#include<time.h>
日期与时间函数<time.h> 头文件<time.h>中说明了一些用于处理日期和时间的类型和函数.其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同 ...
- iPhone手机录像步骤
1 Open QuickTime Player on Mac 2 top menu-- New Movie Recording 3 in Movie Recording UI, click the t ...
- 【转】IOS 怎么获取外设的广播数据AdvData
原文网址:http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/73443.aspx N ...
- [liu yanling]测试用例作用
⒈指导测试的实施 测试用例主要适用于集成测试.系统测试和回归测试.在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试.并对测试情况记录在测试用例管理软件 ...
- hbase单机环境的搭建和完全分布式Hbase集群安装配置
HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ...
- 【CSS3】Advanced11:Media Queries
1.Browser-size specific CSS @media screen and (max/min-width:1000px){} 2.Orientation-specific CSS? @ ...
- Android 访问 wcf
IService1.cs 添加的接口 [OperationContract] [WebInvoke(Method = "POST", BodyStyle = WebMessageB ...