spi分主设备和从设备,两者通过spi协议通讯。而设置spi的模式,是从设备的模式,决定了主设备的模式。所以要先去搞懂从设备的spi是何种模式,然后再将主设备的spi的模式,设置和从设备相同的模式,即可正常通讯。对于从设备的spi是什么模式,有两种:(1)固定的,有spi从设备硬件决定的spi从设备,具体是什么模式,相关的datasheet中会有描述,需要自己去datasheet中找到相关的描述,即:关于spi从设备,在空闲的时候,是高电平还是低电平,即决定了cpol是0还是1;然后再找到关于设备是在上升沿还是下降沿去采样数据,这样就是,在定了cpol的值的前提下,对应着可以推算出cpha是0还是1了。举例1:cc2500-low-costlow-power2.4ghzrftransceiver的datasheet中spi的时序图是:
从图中可以看到,最开始的sclk和结束时候的sclk,即空闲时刻的sclk,是低电平,推导出cpol=0,然后可以看到数据采样的时候,即数据最中间的那一点,对应的是sclk的第一个边沿,所以cpha=0(此时对应的是上升沿)。举例2:ssd1289-240rgbx320tftlcdcontrollerdriver的datasheet中提到:“sdiisshiftedinto8-bitshiftregisteroneveryrisingedgeofsckintheorderofdatabit7,databit6……databit0.”意思是,数据是在上升沿采样,所以可以断定是cpol=0,cpha=0,或者cpol=1,cpha=1的模式,但是至于是哪种模式。按理来说,接下来应该再去确定sclk空闲时候是高电平还是低电平,用以确定cpol是0还是1,但是datasheet中没有提到这点。所以,此处,目前不太确定,是两种模式都支持,还是需要额外找证据却确定cpol是0还是1.(2)可配置的,由软件自己设定从设备也是一个spi控制器,4种模式都支持,此时只要自己设置为某种模式即可。然后知道了从设备的模式后,再去将spi主设备的模式,设置为和从设备模式一样,即可。 对于如何配置spi的cpol和cpha的话,不多细说,多数都是直接去写对应的spi控制器中对应寄存器中的cpol和cpha那两位,写0或写1即可。举例:c8051f347中的spi就是一个spi的controller控制器,即支持软件配置cpol和cpha的值,四种模式都支持,此处c8051f347作为spi从设备,设置了cpol=1,cpha=0的模式,因此,此处对应主芯片中的spi控制器,作为master主设备,其spi的模式也要设置为cpol=1,cpha=0,即可。
【spi的读写程序设计】文中标红的是特别注意看的地方主要是熟悉flash芯片的指令集,以及存储芯片扇区和块的理解,最重要的是擦除都是以扇区擦除的方式。
本节将利用spi来实现对外部flash(w25x16)的读写,并将结果显示在tftlcd模块上。本节分为如下几个部分:
3.17.1 spi简介
3.17.2硬件设计
3.17.3软件设计
3.17.4下载与测试
1 spi简介
spi是英语serial peripheralinterface的缩写,顾名思义就是串行外围设备接口。是motorola首先在其mc68hcxx系列处理器上定义的。spi接口主要应用在eeprom,flash,实时时钟,ad转换器,还有数字信号处理器和数字信号解码器之间。spi,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为pcb的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,stm32也有spi接口。
spi接口一般使用4条线:
miso主设备数据输入,从设备数据输出。
mosi主设备数据输出,从设备数据输入。
sclk时钟信号,由主设备产生。
cs从设备片选信号,由主设备控制。
spi主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。
spi总线四种工作方式spi模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(cpol)对传输协议没有重大的影响。如果cpol=0,串行同步时钟的空闲状态为低电平;如果cpol=1,串行同步时钟的空闲状态为高电平。时钟相位(cpha)能够配置用于选择两种不同的传输协议之一进行数据传输。如果cpha=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样;如果cpha=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。spi主模块和与之通信的外设备时钟相位和极性应该一致。
不同时钟相位下的总线数据传输时序见下图:
图3.17.1.1不同时钟相位下的总线传输时序(cpha=0/1)
stm32的spi功能很强大,spi时钟最多可以到18mhz,支持dma,可以配置为spi协议或者i2s协议。
本节,我们将利用stm32的spi来读取外部spiflash芯片(w25x16),实现类似上节的功能。这里对spi我们只简单介绍一下spi的使用,stm32的spi详细介绍请参考《stm32参考手册》第422页,22节。然后我们再介绍下spiflash芯片。
这节,我们使用stm32的spi1的主模式,下面就来看看spi1部分的设置步骤吧,stm32的主模式配置步骤如下:
1)配置相关引脚的复用功能,使能spi1时钟。
我们要用spi1,第一步就要是能spi1的时钟,spi1的时钟通过apb2enr的第12位来设置。其次要设置spi1的相关引脚为复用输出,这样才会连接到spi1上否则这些io口还是默认的状态,也就是标准输入输出口。这里我们使用的是pa5、6、7这3个(sck.、miso、mosi,cs使用软件管理方式),所以设置这三个为复用io。
2)设置spi1工作模式。
这一步全部是通过spi1_cr1来设置,我们设置spi1为主机模式,设置数据格式为8位,然后通过cpol和cpha位来设置sck时钟极性及采样方式。并设置spi1的时钟频率(最大18mhz),以及数据的格式(msb在前还是lsb在前)。
3)使能spi1。
这一步通过spi1_cr1的bit6来设置,以启动spi1,在启动之后,我们就可以开始spi通讯了。
spi1的使用就介绍到这里,接下来介绍一下w25x16。w25x16是华邦公司推出的继w25x10/20/40/80(从1mb~8mb)后容量更大的flash产品,w25x16的容量为16mb,还有容量更大的w25x32/64,alientek所选择的w25x16容量为16mb,也就是2m字节,同at45db161是一样大小的。
w25x16将2m的容量分为32个块(block),每个块大小为64k字节,每个块又分为16个扇区(sector),每个扇区4k个字节。w25x16的最少擦除单位为一个扇区,也就是每次必须擦除4k个字节。这样我们需要给w25x16开辟一个至少4k的缓存区,这样对sram要求比较高(相对于at45db161来说),但是它有价格及供货上的优势。
w25x16的差些周期为10000次,具有20年的数据保存期限,支持电压为2.7~3.6v,w25x16支持标准的spi,还支持双输出的spi,最大spi时钟可以到75mhz(双输出时相当于150mhz),更多的w25x16的介绍,请参考w25x16的datasheet。
2硬件设计
本节实验功能简介:开机的时候先检测w25x16是否存在,然后在主循环里面用1个按键用来执行写入w25x16的操作,另外一个按键用来执行读出操作,在tftlcd模块上显示相关信息。同时用ds0提示程序正在运行。
所要用到的硬件资源如下:
1)stm32f103rbt6。
2)ds0(外部led0)。
3)key0和key2。
4)tftlcd液晶模块。
5)w25x16。
前面4部分的资源,我们前面已经介绍了,请大家参考相关章节。这里只介绍w25x16与stm32的连接,板上的w25x16是直接连在stm32f103rbt6上的,连接关系如下图:
图3.17.2.1stm32f103rbt6与w25x16连接电路图
3软件设计
打开上一节的工程,首先在hardware文件夹下新建一个flash的文件夹和spi的文件夹。然后新建一个flash.c和flash.h的文件保存在flash文件夹下,新建spi.c和spi.h的文件,保存在spi文件夹下,并将这两个文件夹加入头文件包含路径。
打开spi.c文件,输入如下代码:
#include“spi.h”
//spi口初始化
//这里针是对spi1的初始化
voidspix_init(void)
{
rcc-》apb2enr“=1《《2; //porta时钟使能
rcc-》apb2enr|=1《《12; //spi1时钟使能
//这里只针对spi口初始化
gpioa-》crl&=0x000fffff;
gpioa-》crl|=0xbbb00000;//pa5.6.7复用
gpioa-》odr|=0x7《《5; //pa5.6.7上拉
spi1-》cr1|=0《《10;//全双工模式
spi1-》cr1|=1《《9; //软件nss管理
spi1-》cr1|=1《《8;
美国胁迫多国表态用禁令的方式将将华为排除在5G网络建设之外
贴片共模电感厂家科普共模电感有没有正负极 gujing
研华的iQM.Inspection智慧巡检平台助力门店管理打造创新经营模式
机器人在金属冲压行业生产自动化的实现
滤波电容器的选择方法
STM32单片机SPI极性和相位的设置方法
巅峰对决!vivo Xplay6与华为P10谁是国产第一机皇?
劲爆!解析特斯拉为何与Mobileye停止合作!
EEPROM的存储原理以及EEPROM特点的介绍
北斗的全球化时代到来,5G+北斗将重塑价值
小编科普功率放大器的特点有哪些
5G的广泛应用推动了东环监控市场的增长
格力奥克斯互掐,国家市场监管总局连夜介入
国家电网蒙东试点配置配电网感知系统
广和通L610 Cat 1模组赋能视频监控无线联网
温度传感器的电路结构及原理
怎样用NE555做定时开关
工控机让智能扫地机器人变得触手可及
USB +串行RGB背光字符LCD背包的制作
静止无功发生器(SVG)的工作原理及应用