国外网站 设计,html做网站项目案例,包装设计效果图生成器,网站用cms前言#xff1a;
本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM#xff08;MX6U#xff09;裸机篇”视频的学习笔记#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…前言
本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARMMX6U裸机篇”视频的学习笔记在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。
引用
正点原子IMX6U仓库 (GuangzhouXingyi) - Gitee.com
《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》
正点原子资料下载中心 — 正点原子资料下载中心 1.0.0 文档 SPI学习参考资料
简述SPI通信协议-01_cpha选择为第一个边沿-CSDN博客
SPI中的CPHA,CPOL详解-CSDN博客
一文搞懂SPI通信协议_spi协议-CSDN博客
摩托罗拉 《SPI Block Guide V03.06》 手册
链接https://pan.baidu.com/s/1_mvR5AD0-OBI2bYyx2i4Sw?pwdf4bo 提取码f4bo 正文
本文是 “正点原子[第二期]Linux之ARMMX6U裸机篇--第24讲 SPI驱动。本节将参考正点原子的视频教程第24讲和配套的正点原子开发指南文档进行学习。
0. 概述
通I2C一样SPI是很常用的通信接口也可以通过SPI来连接众多的传感器。相比I2C接口SPI接口的通信速度很快I2C最多400KHz但是SPI可以到达即使MHz。I.MX6U 也有4个SPI接口可以通过这4个SPI接口来连接一些SPI外设。I.MX6U-ALHPA使用SPI3接口连接了一个6周传感器 ICM-20608本章我们就来学习如何使用I.MX6U的SPI接口来驱动ICM-20608读取ICM-20608的六轴数据。
1. I.MX6U 的SPI接口 I.MX6U 处理器的SPI接口在《I.MX6ULL参考手册》的第20章 Chapter 20Enhanced Configurable SPI (ECSPI)章节 I.MX6U ECSPI 接口的硬件框图如下
ECSPI有64个32位的TXFIFO 缓冲区ECSPI有64个32位的RXFIFO 缓冲区通过ECSPI 硬件接口的 FIFOx 缓冲区可以减少数据传输时的中断数量从而提高传输速率 I.MX6U ECSPI 硬件接口的特向如下
全双工同步串行接口主机/从机模式4个CSChip Seclect片选信号线来支持多个外部设备持续传输模式允许任意长度的数据传输Tx和Rx方向分别有32位的 64 条目的FOFO缓冲器时钟极性Polarity时钟相位Phase和时钟频率可以配置DMA支持最大运行频率可以达到参考时钟频率
2. I.MX6U ECSPI 时钟
从I.MX6U的时钟树Clock Tree可以找到 ECSPI 接口的时钟来源于 PLL3_480MHz并且经过一个固定值为8的分频所以从时钟树CCM进入到到 ESPAI 接口的时钟频率为 ESAPI PLL3_480Mhz/8 60MHz 在ECSAPI时钟树可以看到ECSAPI的时钟源选择还需要配置一个多路选择器 CCM_CSCDR2 [ECSPI_CLK_SEL] 和一个分频器 CCM_CSCDR2[ECSPI_CLK_PODF] 。
这个CCM_CSCDR2 寄存器的结构如下图所示 这里配置为1分频时钟源选择为PLL3_60M CCM_CSCDR2寄存器的 bit[24:19] 设置为0表示1分频bit[18]0 表示时钟源选择 PLL3_60M 3. I.MX6U ECSPI 寄存器
I.MX6U ECSPI 寄存器主要有如下这些寄存器。 本节实验中正点原子的示例教程里不使用SPI的DMA和中断所以我们需要的寄存器有
ECSPIx_RXDATATx要发送数据ECSPIx_TXDATARx接收到的数据ECSPIx_CONREG控制寄存器ECSPIx_CONFIGREG控制寄存器ECSSPIx_STATREG状态寄存器
3.1 ECSPIx_RXDATA寄存器 ECSPIx_RXDATA 是32位的 Rx 接收数据寄存器在读取Rx数据之前需要先检查 RR Read Ready标志位是否为1.
3.2 ECSPIx_TXDATA寄存器 ECSPIx_TXDATA 是32位的 Tx 发送数据寄存器写到TxDATA寄存器的数据被存放到ECSPI的TX FIFO中如果TXFIFO不满软件就可以向这个寄存器写值。
3.3 ECSPIx_CONREG 寄存器 ECSPI_CONREG 寄存器允许软件来使能/复位 ECSPI接口设置时钟分频值设置传输长度Bust-Length。我们需要使用的位如下
EN bit[0]为1使能ECSPI接口为0去使能接口并对ECSPI进行复位。HT bit[1]: 硬件翻转手册说I.MX6ULL不支持该功能XCH bit[2]指示空闲或者Busy本实验设置该位值为0。SMC bit[3]传输开始模式值为1的时候需要SPI_RDY信号来控制传输开始值为0时TXFIFO中写数据立即传输开始本实验设置该位为0。CHANNEL_MODE bit[7:4]一个ECSPI接口支持4个通道Channel这里是选择4个通道的工作模式为主机模式Master还是从机模式Slave本实验使用 Channel 0所以该位设置为0x1.POST_DIVDER bit[11:8]后级分频值范围为0~15对应2的0~15次方分频。PRE_DIVIDER bit[15:12]前级分频值范围为0~15对应1~16分频。DRCTL bit[17:16]本实验不使用BUSRT_LENGTH bit[31:20]每次突发传输长度值范围为0~0XFFF对应1到0x1000 bit 位本实验设置每次突发传输长度为8位所以设置值为7。
3.4 ECSPI_CONFIGREG寄存器 ECSPIx_CONFIGREG 寄存器允许软件来配置SPI通道的运行模式串行时钟的极性CPOL: Clock Polarity串行时钟的相位Clock Phase数据发送波形模式SPI Wave From。本实验中用到的寄存器如下
SCLK_PHA bit[3:0]ECSPI接口支持4个通道(channel) 通道0~3配置通道0~3的 CPHA 时钟相位。SCLK_POL bit[3:0]ECSPI接口支持4个通道(channel) 通道0~3配置通道0~3的 CPOL时钟极性。SS_CTL bit[11:8]SPI Wave From 波形模式配置SPI发送数据时 single bust 单突发模式还是Multi bust 多突发模式单突发模式每次发送数据之后等待用户再次写入数据多突发模式会发送一个burst之后自动拉高拉低SS线并再次发送TXFIFO中的下一个数据知道TXFIFO为空。本实验选择多突发模式。DATA_CTL(bit19:16)设置 DATA 信号线空闲状态电平 DATA_CTL[3:0]分别对应通道3~0为 0 的话 DATA 空闲状态为高电平为 1 的话 DATA 空闲状态为低电平。SCLK_CTL bit[23:20]设置 SCLK 信号线空闲状态电平 SCLK_CTL[3:0]分别对应通道3~0为 0 的话 SCLK 空闲状态为低电平为 1 的话 SCLK 空闲状态为高电平
3.5 ECSPIx_STATREG ECSPIx_STATREG 状态寄存器指示ECSPI接口的 TxFIFO和 RXFIFO的状态本实验我们需要使用的是
TC(bit7)传输完成标志位为 0 表示正在传输为 1 表示传输完成。RO(bit6) RXFIFO 溢出标志位为 0 表示 RXFIFO 无溢出为 1 表示 RXFIFO 溢出。RF(bit5) RXFIFO 空标志位为 0 表示 RXFIFO 不为空为 1 表示 RXFIFO 为空。RDR(bit4) RXFIFO 数据请求标志位此位为 0 表示 RXFIFO 里面的数据不大于RX_THRESHOLD此位为 1 的话表示 RXFIFO 里面的数据大于 RX_THRESHOLD。RR(bit3) RXFIFO 就绪标志位为 0 的话 RXFIFO 没有数据为 1 的话表示 RXFIFO 中至少有一个字的数据。TF(bit2) TXFIFO 满标志位为 0 的话表示 TXFIFO 不为满为 1 的话表示 TXFIFO 为满。TDR(bit1) TXFIFO 数据请求标志位为 0 表示 TXFIFO 中的数据大于 TX_THRESHOLD为 1 表示 TXFIFO 中的数据不大于 TX_THRESHOLDTE(bit0) TXFIFO 空标志位为 0 表示 TXFIFO 中至少有一个字的数据为 1 表示 TXFIFO为空。
3.6 ECSPI_PERIODREG 寄存器 ECSPIx_PERIODREG这个是 ECSPI 的采样周期寄存器。寄存器 ECSPIx_PERIODREG 用到的重要位如下
CSD_CTL(bit21:16) 片选信号延时控制位用于设置片选信号和第一个 SPI 时钟信号之间的时间间隔范围为 0~63。CSRC(bit15) SPI 时钟源选择为 0 的话选择 SPI CLK 为 SPI 的时钟源为 1 的话选择32.768KHz 的晶振为 SPI 时钟源 关于 ECSPI 的寄存器就介绍到这里关于这些寄存器详细的描述请参考《I.MX6ULL 参 考手册》第 805 页的 20.7 小节。 4. ICM-20608 6轴传感器
ICM-20608 是 InnvenSence 出品的一款6轴 MEMS传感器包括3轴加速度和3周陀螺仪。ICM20608 的尺寸非常小只有3X3X0.57ms采用16P的LGA封装。ICM-20608内部有一个512字节的FIFO 。陀螺仪的量程范围可以编程设置可以选择±250±500±1000和±2000 °/s加速度计的量程范围也可以编程设置可选择±2g±4g±8g和±16g。陀螺仪和加速度计都是16位的ADC并且支持I2C和SPI两种协议使用I2C接口的话通信速率可以达到400KHz使用SPI接口的话通信速度可以高达8MHz。I.MX6U-ALPHA开发板上的ICM-20608通过SPI接口和I.MX6U连接在一起。ICM-20608特性如下
陀螺仪支持XY 和 Z 三轴输出内部集成16位ADC测量范围可设置±250±500±1000和±2000 °/s。加速度计支持XY 和 Z 轴输出内部集成16为ADC测量范围可设置±2g±4g±8g和±16g。用户可编程中断内部包含了512字节的FIFO内部包含一个数字温度传感器难受1000g的冲击支持快速I2C速度可以达到400KHz。支持SPI速度可以到达 8MHz。
ICM-20608的3轴方向如下图所示 ICM-20608的结构框图如下图所示 术语表
英文单词中文解释英文词源词根gyroscope陀螺仪[航] 回转仪 gyroscope:陀螺仪 gyro-, 旋转。-scope, 看见telescope. 后用做科技名词。 accelerometer加速度计飞机、火箭的加速器 accelerate -meter FR 如果使用I2C接口的话 IMC-20608 的 AD0 引脚决定I2C设备从地址的最后一位如果AD0为0的话ICM-20608从设备的地址是0x68如果AD0为1的话ICM-20608从设备的地址为0x69。本章我们使用SPI接口根上一章使用AP3216C一样ICM-20608也是通过读写寄存器来配置和读取传感器数据使用SPI接口读写寄存器需要16个时钟周期获证更多如果写操作包括多个字节的话第一个字节包含要读写的寄存器地址寄存器地址最高位是读写标志位如果是读的话寄存器地址最高位要为1如果是写的话寄存器地址最高位要为0剩下的7位才是实际的寄存器地址寄存器地址后面跟着的就是读写的数据。下表列出了本实验用到的一些寄存器和位关于ICM-20608的详细寄存器和位的介绍请参考ICM-20608寄存器手册。
ICM-20608 6轴传感器的Datasheet数据手册介绍其SPI通信读写寄存器数据的命令序列如下 ICM-20608也是通过读写寄存器来配置和读取传感器数据使用SPI接口读写寄存器需要16个时钟周期获证更多如果写操作包括多个字节的话第一个字节包含要读写的寄存器地址寄存器地址最高位是读写标志位如果是读的话寄存器地址最高位要为1如果是写的话寄存器地址最高位要为0剩下的7位才是实际的寄存器地址寄存器地址后面跟着的就是读写的数据 本实验用到的一些ICM-20608寄存器和位 ICM-20608 的介绍就到这里关于 ICM-20608 的详细介绍请参考 ICM-20608 的数据手册和 寄存器手册。 英文术语
英文中文解释术语结束DLPF filter block DLPF是数字低通滤波器Digital Low-Pass Filter的缩写。 DLPF是数字信号处理技术的一种主要用于降低采集信号中的噪音。在工程和科研领域它被用来提取原始信号中的有效部分并消除高频和噪音成分以保证信号的可靠性和准确性。具体来说DLPF能够滤除信号的高频成分保留低频部分从而达到降噪和滤波效果。这种技术在多个领域都有应用例如半导体芯片、通信和医学电子。在医学影像系统中DLPF能提升图像的清晰度和信噪比方便医生和病人的诊断。在通信领域DLPF也有助于提升通话质量SMPLRT_DIVSample Rate DividerSMPL 是Sample的缩写采样 RT 是Rate的缩写 SMPLRT合起来是SampleRate 采样率的缩写 DIV是Divider 的缩写 latch 弹簧锁 碰锁 门闩 锁存器 作为名词时Latch通常指的是“门闩”、“碰锁”或“弹簧锁”这是一种用于固定门或窗的装置 作为动词时Latch的意思是“用闩把...闩上”或“用碰锁把...锁上”即使用门闩或碰锁将门、窗等固定或锁住 此外Latch在电子领域也有特定的应用。在数码电子直路中Latch是一种用于保存二进制数据的组合逻辑电路即锁存器。它是数字电路中最基本的记忆元件之一被广泛应用于数字系统中的寄存器、缓存、捕获和比较器等部件中3。锁存器的主要功能是“锁住”某个输入信号的值在时钟边沿或控制信号变化时将待锁住的信息存储在内部 Transitioned“Transitioned”是英文单词“transition”的过去式和过去分词形式主要有以下几层含义转变、变迁它通常用来描述某种状态、形式或位置的改变或过渡。例如一个人从一种职业过渡到另一种职业或者一个社会从一个阶段转变到另一个阶段都可以使用“transitioned”来描述这种变化FS_SELFull Scale SelectICM-20608 X/Y/Z 轴加速度计的量程范围选择可选择±2g±4g±8g和±16g 5. 硬件原理
正点原子I.MX6U ALPHA 开发板上使用的ICM-20608 6轴MEMS 陀螺仪角速度和加速度传感器的SPI接口进行通信在I.MX6U-ALPHA 开发板底板的电路原理图中使用如下引脚 从电路原理图得到ICM-20608 MEMS传感器使用的SPI引脚对应的I.MX6U IOMUX 接口复用如下
SPI信号线SPI信号线功能IO引脚IOMUX复用ECSPI3_SS0片选UART2_TXDALT8ECSPI3_SCLK时钟UART2_RXDALT8ECSPI3_MISO主设备输入UART2_RTSALT8ECSPI3_MOSI主设备输出UART2_CTSALT8
6. SPI驱动程序源码编写
6.1 ICM20608 SPI 接口特性
ICM20608 SPI 接口的CPOLClock Polarity时钟极性和CPHAClock Phase时钟相位从数据手册中可以找到如下图ICM20608 SPI 接口的 CPOL1, CPHA1 。