一、SPI总线结构

SPI(Serial Peripheral Interface)串行外设接口,是一种高速的,全双工,同步的通信总线。采用主从模式(Master Slave)架构,支持多个slave,一般仅支持单Master。





SPI接口共有4根信号线,分别是:设备选择线(SS)、时钟线(SCK)、串行输出数据线(MOSI)、串行输入数据线(MISO)。



二、数据传输过程

主节点通过 MOSI 线输出数据,从节点在 SIMO 处从主节点读取数据。同时,也在通过 SOMI 输出 MSB(最高位),主节点会在 MISO处读取从节点的数据,整个过程将一直持续,直至交换完所有数据。





三、总线时序



CPOL极性:决定时钟空闲时为高电平还是低电平

CPOL=0:CLK空闲时是低电平,CLK有效时是高电平
CPOL=1: CLK空闲时是高电平,CLK有效时是低电平
CPHA相位:决定何时进行数据采样(读取)
CPHA=0:第一个边沿采样
CPHA=1:第二个边沿采样

根据CPOL和CPHA的不同组合,SPI被分为4种模式



其中一种情况:CPOL=0,CPHA=0 空闲时为低电平,第一个边沿采样





一、SPI控制器工作流程

2440SPI控制器包含2个SPI接口。

SPI有两个通道,分别为TX通道和RX通道,CPU要写数据到FIFO中,先写数据到SPI_TX_DATA寄存器中,这样此寄存器中的内容就会自动移动到发送FIFO中;

同样的道理,如果CPU要从接收FIFO中读取数据,就访问寄存器SPI_RX_DATA,紧接着,接收FIFO的数据就会自动移动到SPI_RX_DATA寄存器中。

RX部分箭头不应该反一反吗?



CPU访问的是TX数据寄存器和RX数据寄存器,而芯片自动的发送或接受数据从FIFO中。



二、6410裸机驱动分析 

6410芯片手册中有初始化流程:

29.6.1 SETTING SEQUENCE OF SPECIAL FUNCTION REGISTER

Special Function Register must be set in the following sequence. (nCS manual mode)
1. Set Transfer Type. (CPOL & CPHA set )
2. Set Clock configuration register.
3. Set SPI MODE configuration register.
4. Set SPI INT_EN register.
5. Set Packet Count configuration register if necessary.
6. Set Tx or Rx Channel on.
7. Set NSSOUT low to start Tx or Rx operation.
A. Set NSSOUT Bit to low, then start TX data writing.
B. If auto chip selection bit is set, should not control NSSOUT.

SPI软件复位

设置引脚(gpc0123)

设置CH_CFG寄存器中的接收和发送通道开关,设置CPOL,CPHA

MODE_CFG和CLK_CFG的设置

SPI总线介绍和裸机编程分析的更多相关文章

  1. [国嵌攻略][157][SPI总线介绍]

    SPI总线架构 SPI(serial peripheral interface)串行外设接口,是一种高速,全双工,同步的通信总线.采用主从模式(master slave)架构,支持多个slave,一般 ...

  2. SPI总线介绍

    1. 简介 SPI, Serial Peripheral Interface, 串行外设接口, 是一种高速的.全双工.同步的通信总线SPI在芯片的管脚上只占用四根线 SPI接口主要用于MCU与各种外围 ...

  3. SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)

    SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...

  4. Linux内核中SPI总线驱动分析

    本文主要有两个大的模块:一个是SPI总线驱动的分析 (研究了具体实现的过程): 另一个是SPI总线驱动的编写(不用研究具体的实现过程). 1 SPI概述 SPI是英语Serial Peripheral ...

  5. linux内核SPI总线驱动分析(一)(转)

    linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...

  6. SPI总线协议及SPI时序图详解

    SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚 ...

  7. SPI总线协议及SPI时序图详解【转】

    转自:https://www.cnblogs.com/adylee/p/5399742.html SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接 ...

  8. GPIO裸机编程

    作者:李老师,华清远见嵌入式学院讲师. GPIO控制技术是接口技术中最简单的一种.本章通过介绍S5PV210芯片的GPIO控制方法,让读者初步掌握控制硬件接口的方法.本章的主要内容: GPIO功能介绍 ...

  9. SPI总线(同步)

    一.SPI总线简介 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口.SPI 用 于CPU与各种外围器件进行全双工. ...

随机推荐

  1. pgrep,pidof工具的使用

    博客pgrep,pidof工具的使用 最灵活:ps 选项 | 其它命令 按预定义的模式:pgreppgrep [options] pattern-u uid: effective user,生效者-U ...

  2. php ucwords()函数 语法

    php ucwords()函数 语法 作用:把每个单词的首字符转换为大写 语法:ucwords(string) 参数: 参数 描述 string 必须,规定要转换的字符串 说明:把字符串中每个单词的首 ...

  3. flutter网格布局之GridView组件

    前面总结了使用ListView来实现列表,但是,有的时候,数据量很大,需要使用矩阵方式排列才能更清晰的展示数据,在flutter中,可以使用网格列表组件GridView来实现这个布局. GridVie ...

  4. BZOJ 1818: [Cqoi2010]内部白点(树状数组)

    传送门 解题思路 首先一定不可能有\(-1\)的情况,因为新产生的黑点不会造成任何贡献,它的各个方面都是不优的.那么只需要统计一遍答案,首先要将横坐标相同的两个点看成一条竖线,纵坐标相同的点看成一条横 ...

  5. LOJ 3094 「BJOI2019」删数——角标偏移的线段树

    题目:https://loj.ac/problem/3094 弱化版是 AGC017C . 用线段树维护那个题里的序列即可. 对应关系大概是: 真实值的范围是 [ 1-m , n+m ] :考虑设偏移 ...

  6. linux设备驱动第三篇:写一个简单的字符设备驱动

          在linux设备驱动第一篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写一个简单的字符设备驱动.本篇借鉴LDD中的源码,实现一个与硬件设备无关的字符设备驱动,仅仅操作从内核中分 ...

  7. anti-nim 游戏

    游戏描述: 桌上有n堆石子,游戏双方轮流取石子,每次只能从一堆中取出任意数目的石子,不能不取,取走最后一个石子者失败. 结论: 先手必胜,当且仅当: ①.所有堆的石子数都为1,且游戏的SG值为0. ② ...

  8. HBuilder的一些常用快捷键

    Alt + [ 匹配括号 Alt + ↓跳转到下一个可编辑区Ctrl + Alt + j 合并下一行Ctrl + Alt + ←选择助手Ctrl + 回车 换行Ctrl + Shift + 回车 向上 ...

  9. centos6.2 shutdown now关机进入单用户模式

    在centos5.5时当我们输入 shutdown now 系统会进入关机状态.而centos6.2时并非如此,其他版本不清楚,而进入了单用户模式.(进入系统后想维护可做此操作.)会出现如下提示:(注 ...

  10. day 84 Xadmin组件之构建表单数据

    一 .先设置一些相关配置 1. 创建数据库模型. 在app01 下创建 from django.db import models # Create your models here. class Au ...