最后更新:2022-03-26 19:33:28 手机定位技术交流文章
摩托罗拉的SPI协议是通信协议(SerioPeripheral界面)。这是连环外围设备接口。这是辆全时高速通讯巴士它通常在ADC、LCD和其他装置以及MCU之间使用。需要加快通信速度。
SPI通信设备有共同连接器。

SPI通讯采用三条公共汽车线路和一条片段线路,三条公共汽车线路依次为SCK、MOSI和MISO。
(1)(SlaveSelect):从设备中选择信号线,常称为片选信号线,它被称为NSS,CS。以下用NSS表示。当设备通过多个 SPI 连接到 SPI 主机时,设备的额外信号线SCK、MOSI和MISO都与同样的SPI公共汽车相连。换句话说,不管设备产生多少设备,所有三条公共汽车线路都同时运行,每条线路都有来自该装置的自己的NSS信号线。光是这个信号线就取回主机的脚即有多少个从设备,有多少人选择信号线?在I2C协议中,使用装置的地址找到地址,在公共汽车上选择一个装置并与之互动;在SPI协议中,没有设备地址。它使用NSS信号线定位地址当主机从列表中选择设备时,将设备 NSS 的信号线设为低水平 。该从设备即被选中,即片选有效,然后,主机开始与设备中指定的SPI进行通信。因此,SPI的通信从一条低水平的NNS线开始。作为最后信号 NSS线路被启动
(2)SCK(SerialClock)它由通信主机创建,确定通信速度,有各种最大时钟频率,有不同的设备支持,例如STM32的SPI时钟最大fpclk/2频率,两个设备之间的通信速度限于低速设备。
(3)MOSI(MasterOutput,SlaveInput)主机上的数据从信号线中导出,从信号线中读取主机的数据,即连接数据指向主机和离开机器。
(4)MISO(MasterInput,,SlaveOutput):设备输出的主要设备输入/腿。主机读取该信号线的数据并将其导出至主机,即该线上的数据正在从计算机传输到主机。
与 I2C 一样, SPI 协议定义了通信中的起始和停止信号、 数据有效性、 时钟同步化等等 。
SPI 通信通信时间

这是主机通讯的时间顺序主机控制NSS,SCK和MOSI信号MISO 信号由机器生成,主机接收从机器获得的数据。 MSI 和 ISO 信号只有在国家统计系统处于低水平并在SCK 的每个时钟周期发送一个数据时才有效。
先前沟通过程中的信号细分如下:
该项目是我们人权观察社特别报道的一部分(CC BY-NC-SA 2.0)。NSS信号线现在不高,而是低。这是SPI通信启动信号NSS是机器专用的信号线在机器检测到NNS线上的第一个信号后,它做了以下工作:我不知道我是否被东道主选中 但我不知道我在说什么准备与主机进行互动在图中的标号处,NSS信号的力量已经从低到高增加。SPI通讯被这个信号阻断了表示本次通讯结束,无法关闭临时文件夹:%s。
在运输数据方面,SPI使用MOSI和MISO信号线。数据同步使用 SCK 信号线。MOSI 和 MISO 数据线在SCK每时钟周期发送一个数据包。数据输入输出同时进行数据传输时,无需首先使用最低运作安保标准或最低运作安保标准。因此,为了核实两个SPI通信设备使用同一协议,在TPI通信时间序列中,通常使用MSB第一线模式。
观察图中的标号处,在SCK上下过程中,MOSI和ISO数据输出变化。沿着SCK的直线取样也就是说 SCK在路上的衰落MOSI和ISO数据正确无误。数据“ 1” 表示高海拔。0值表示低压时间。在其它时刻,数据无效,MOSI和MOISO正在准备即将进行的数据列报。
SPI可以是每个数据传输8或16比特,对每次传输的单位数量没有限制。
前一系列的时间序列只是SPI的通信手段之一。SPI支持四种通信模式。两者之间的主要区别是公共汽车免费时SCK的时钟状态和数据取样的时间。为方便说明,引入了CBOL和CSCHA理念。
当SPI通信设备闲置时,CBOL指SCK信号线的平面信号(即SPI通信启动前高空NSS线的状况)。 CPOL=0,SCK为低端,自由为低端,CPOL=1,反向。
CHPHA指数据取样点。当CPHA=0时,MOSI或MISO数据线上的信号将在SCK时钟的“奇缘”上取样。当CPHA=1时,SCK的“偶边缘”为数据线取样。图CPHA=0显示SPI通信模式,图CPHA=1显示SPI模式。

让我们先看CPHA = 0 时间轴。 有两种情景取决于空闲时SCK 信号线的电子高度。 当 SCK 信号线为低高度时, CPOL = 0; 当高高度时, CPOL = 1 。
不论《刑事诉讼法》等于0或1,由于我们的时钟安排 CPHA=0在图中可以看到,采样时间在SCK的离岸边。当CPOL是零时注意时钟异常的边缘 上下上下下。而CCPOL等于一个当,当,时钟怪异的边缘 正在下降。因此,SPI的取样时间不受上下轴的制约。在SCK的奇特边缘 MOSI和MOISO数据线的有效信号保持恒定数据信号将在SCK奇特边缘取样。在非采样时刻,MOSI和ISO的有效信号被交换。
同样,当CHP=1不受CCPOL影响时,数据信号在SCK的平面进行抽样,如CHP=1的SPI通信方法所示。

如表SPI所示,SPI根据CPOL和CPHA的状况分为四个模式,主机和机器在正常通信中必须以同样模式运作,在模式0和3中更常见的是模式0和模式3。

STM32芯片与I2C输出一样,已被纳入专门用于SPI协议通信的外部芯片。
STM32上的 SPI 接口旨在发挥通信主机和接口的作用。最大SCK时钟频率为fpclk/2(默认情况下STM32F103型芯片组为fpclk1至36MHz)。(Fpclk2在72兆赫运行。 )四个SPI协定模式得到了充分支持。数据框架长度可以修改为 8 或 16 比特。数据可以首先配置为 MSB 或 LSB 。它还允许双线全时工作(详见前几小节)、双线单线工作和单线模式。数据可按一个方向传输,使用双线单向模式的MOSI和MOISO数据线。传输速度可以加倍 。单线模式有助于减少硬件连接的数量。当然,税率可能会改变。我们只是去翻翻双线全时模式

地图左侧的MOSI、MISO、SCK和NSS线构成所有SPI硬件结构的基础。STM32芯片有多种聚苯乙烯。其SPI通信信号被传送到各种GPIOs。使用此特性时, 您必须设置这些特定的拉动 。以STM32F10x为单位的SPI表格。在重用GPIO的底部时它以STM32F10x形式要素提供。以它为准。

例如,SPI1是一个APB2装置。通信最高费率为36兆比特/秒。SPI2和SPI3是APB1设备,也用于这一目的。最大通信速度为18兆比特/秒。除了通讯速率,其他职能没有区别。首先,SPI3利用了下载界面的拉动。下载是这些踢出的默认值 。IO 函数为第二个 。如果您想要使用 SPI3 接口, 您必须使用 SPI3 接口 。然后,这些IO的下载必须被屏蔽。一般而言,资源并非稀缺。这些IO用于下载和调试应用程序。它将不作为SPI3使用。
SCK线的时钟信号波特速率发电机通过BR[0:2]比特控制在控制登记册CR1中。对于折叠时钟,这是分数频率系数。fpclk 的频率是 SSCK 脚的输出时钟频率 。计算时使用表BR-bit中显示的 fpclk 频率。

fpclk 频率是 SPI 所在的 APB 公共汽车频率;APB1 是 fpclk1, APB2 是 fpckl2。
生产者价格指数的配置方式可以与先前审查的四种生产者价格指数类型相同,具体指明“控制存储器公司”的“CPOL”和“CPHA”空档。
SPI的MOSI和MISO都与数据传输登记册连接。数据源和目标接收和传输缓冲区以及ISO和MOSI线都得到支持。在与外部世界沟通的同时数据传输登记册将“发送缓冲区”用作数据源。数据通过数据线逐条发送;当从外部收到数据时,数据传输登记册将抽样数据线逐条保存在“接收缓冲区”内。SPI “ 数据存储器 DR ” 用于用数据填充发件人缓冲区 。“数据库存储处DR”通讯接收缓冲区的内容可以进入。“ 控制登记器 CR1” 中的“ DFF 位元” 用于指定 8 和 16 位模式的框架长度; “ LSBFIRST 位元” 用于首先选择 MSB 或 LSB 。
一般控制逻辑是负责协调整个SPI结构。控制逻辑的操作方法因我们选定的“控制记录器”(CR1/CR2)的设置而异。如前所述,基本控制参数包括:SPI模型、波特费率、LSB、主模型、一对一模型等等。在外设工作时,控制逻辑根据工作状态修改“静态登记册”(SR)。我们需要做的就是找到 最先进的记录登记系统因此您可以监测 SPI 的工作进展如何 。除此之外,控制逻辑也取决于需求。控制建立SPI中断信号、DMA请求和控制NSS信号线。
在实践中,我们并不使用由STM32SPI扩大的常规NSS信号线, 而是标准GPIO, 控制其平流输出的软件, 创建通信启动和停止信号。
STM32使用SPI外部通信,在通信的不同阶段为“国家登记员SR”的不同数据位位写参数,我们通过阅读这些登记信号来理解通信状态。
“主要模式”程序是主要发件人通信程序,即当STM32是SPI连接、数据接收和发送程序的主机时。

以下是关于接收和接收程序和活动的主要模式的说明:
(1) NSS信号线控制和启动信号生产(图中没有说明);
(2) 将数据写入DR,在传送缓冲区中保存。
(3) 通信开始,SCK时钟开始工作,MOSI一次从缓冲区发送数据,MISO一次将数据储存在接收缓冲区。
(4) 发送数据时,“TXE标志”将在1号的“国家登记册SR”上张贴。表示传输完一帧,分配缓冲区也空缺。一旦你收集到数据“RXNE标记”将适用于1。表示传输完一帧,接收缓冲区非空;
(5) 直至TXE标记达到1为止。如果您想继续发送数据,必须重复此进程。您可以再次将数据发送到数据存储库 DR; 但是, 您必须等待 RXNE 标记为 1 。通过读取“数据寄存器DR”接收缓冲区的内容可以进入。如果我们能阻止TXE或RXNE当 TXE 或 RXNE 设定为 1 时, 生成 SPI 断裂信号 。输入与以前相同的中断服务功能。当SPI中断服务时登记册的位置可用于确定事件的性质。再分别进行处理。DMA技术也可用于传输和接收数据存储库DR的数据。
跟其它外设一样,为了建立SPI外差因素,STM32标准图书馆包括SPI初始化结构和初始化方法。在“ stm32f4xx_spi” 库文件“stm32f4xx_spi” 中, 初始化结构和函数定义。 h” 和“stm32f4xx_spi.c” )在编程期间,我们可以利用或查询一个参考图书馆,协助处理在两个档案中都有意见的文件。一旦我们掌握了第一个框架 我们就可以加入SPI了
SPI初始化结构体

这些结构的元素将括号中的文字指定为相关STM32参数规定的宏:(1) SPI_Drection
该成员指导SPI的传播战略。它可以配置为双线全双倍反应( SPI_ dirrection_ 2Lines_ FullDuplex) 。(PI_Diraction_2Lines_Rx Only) 只有两线收件 (PI_Diraction_2Lines_RxOnly)有单线接受模式( SPI_ Direption_ 1Line_ Rx) 和单线分布模式( SPI_ Direption_ 1Line_ Tx) 。
(2)SPI_Mode
此元素配置 SPI 以在主机模式( SPI_ Mode_ Master) 或机器模式( SPI_ Mode_ Slave) 中运行 。SPISCK信号线的时间序列是两种类型之间最重要的区别。在通信中,主机生成SCK时间序列。如果您被设置为机器模式,STM32上的 SPI 接口用于接收 SCCK 的外部信号 。
(3)SPI_DataSize
成员可以指定 SPI 通讯的数据框架大小是 8 (SPI_DataSize_8b) 还是 16 (SPI_DataSize_16b) 。
SPI_CPOL和SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA SPI_CPHA
两位成员使用的时钟是时钟极极CBOL和时钟PCHA。SPI的通信方式受到这两个机制的影响。前面的“通信模式”部分提到了关于民警和人道执委会的意见。钟极CDOL的成员,可以调整到高(SPI_CPOL_High)或低(SPI_CPOL_Low)水平。SPI_CPHA_1Edge(在SCK奇边缘收集数据)或SPI_CPHA_2Edge(在SCK偶边缘收集数据)可指定为CPHA时钟阶段。
(5)SPI_NSS
此元素为 NSS 脚本设定操作模式 。您可以选择使用硬件模型( SPI_ NSS_ Hard) 或软件模型( SPI_ NSS_ Soft) 。在硬件模式中,SPI视频选择信号由SPI硬件自动生成。为了创建非狙击和电影选择信号,软件模型要求我们人工增加或减少相应的GPISIO端口。实际上,有更多的软件模型应用。
(6)SPI_BaudRatePrescaler
该成员指定了港口速率分裂频率系数, 时钟是 SPI SSCK 信号线的时钟频率 。 该会籍参数可以在 fpclk 的亚频为 2 、 4 、 6 、 8 、 16 、 32 、 64 、 128 、 256 时更改 。
(7)SPI_FirstBit
所有通信线路要么先有MSB(前方高层次数据),要么先有LSB(前方低层次数据),并且STM32中的SPI模块可以配置,使用这一结构的组成部分来控制这一特征。
(8)SPI_CRCPolynomial
这是一个多式版本的 SPI CRC 校验, 如果我们使用它, CRC 值是使用该会员的参数( 多式) 计算的 。
一旦明确了这些结构的成员,我们希望运行 SPI_Init 功能,将这些参数存储到登记册中, 初始化 SPI, 然后拨打 SPI_Cmd 以提供 SPI 。
FLSAH内存也称为闪存库。它有EPROM和EPROM,这是一个储存装置,在停电时不会丢失数据。另一方面,FLASH储存能力往往大于EPROM。其地位基本上已被取代。U盘、SD卡、SSD固态硬盘,以及用于在我们的SSM32芯片中存储程序的技术,我们每天都使用所有这些芯片。所有这些系统都是FLASH式的储存系统。在存储控制上,主要区别是,FLASH芯片只能写在一块大片土地上。我们从"I2C"知道EPROM可能会擦字节
本节解释SSM32利用使用SPI通信的系列FLASH内存芯片进行读写实验,实验中STM32的SPI以主要方式外推,以确保通过事件调查进行定期通信。

试盘中的FLASH芯片(型号:W25Q64)是一个NOFLASH内存,通过SPI协议进行交流。其CS/CLK/DIO/DO与STM32中的SPS/SCK/MOSI/MISSO相配。SSM32的NS脚是普通的GPIO这不是SPI独有的NNS。因此,我们必须在应用中包括软件控制。
FLASH芯片有W和HALD。书写保护由WP制导脚控制。当脚脚是低的的时候,禁止写入数据。我们直接接电源,不使用写保护功能。HOLD脚可以用来暂停谈话该引脚为低电平时,通讯暂停,数据输出拖动腿输出的高抗力状态,数据输入铅足和时钟都无效 。我们直接接电源,不允许利用电信中断功能。
有关FLASH芯片的更多信息可参见其数据手册W25Q64。如果实验板FLASH的模型或控制脚与你使用的实验板FLASH的模型或控制脚不同,就足以根据我们的项目加以改变,而且技术也遵循同样的原则。
为了改进项目的结构,阅读和编写与《联邦卫生法》有关的法典是分开和分开的。方便以后移植。“bsp_spi_flash”现在可用。“c”和“bsp_spi_flash”是变量。h)“文件,这些文件也可以根据您的选择命名。它们未列入STM32数据库。我们根据申请的要求创建了它。
(1) 用于通信和港口时钟的目标均已启动。
(二) 允许将SPI外部设置的时钟;
(三) 设置SPI外部模式、地址、速度等等,并将SPI外部化。
(4) 为基本SPI开发逐字节例行程序;
(5) 设立FLASH清洁以及阅读和写作活动的职能;
(6) 创建测试脚本以验证数据读写。
与SPI有关的宏观硬件的定义
在宏形式中, 我们指定 SPI 硬件相关设置为“ bsp_spi_flash” 。 “ H” 文件
与宏链接的 SPI 硬件设置

基于硬件连接,上述代码包括SPI、GPIO等等。 在宏观信封中,用于与FLASH进行通信,并构建宏观以调节CS(NSS)脚输出,同时产生和停止信号。
为SPI建立GPIO。
使用上面的宏, 创建 SPI 初始化函数 。
SPI 初始化常规(GPIO初始化部分)


与所有GPS设置一样,使用的GPS基建模式与所有GPS设置一样,被初始化并配置供再利用。
(1) 使用GPISO_InitTypeDef,具体说明GPSO的初始结构变量,以便利用以下变量存储GPS设置;
(2) 为了使用全球定位系统端口钟进行SPI上岗培训,请调用图书馆功能RCC_APB2Periph2PeriphClockCmd。
(3) 启动GPIO的结构性捐赠,将SCK/MOSI/MOTO基础初始化为重新使用模式,此外,CS(NSS)由于使用软件控制而起步,我们将其设为定期推进输出模式。
(4) 使用上面初始化结构的设置,调用GPSO_Init函数,向发送者写参数,完成GPSO的初始化。
配置SPI的模式
这些只是SPI使用的引信设置 SPI 外部模式。在设置 STM32 的 SPI 模式之前,我们需要从飞机尾部进入SPI模式这一样本可见于FLASH数据手册W25Q64。FLASH芯片说它支持SPI模式0和3。支持双线全双工,我们正在以MSB第一线模式运作最高通信时钟频率为104兆赫。数据帧长度为8位。我们需要匹配这些设置 在STM32的SPI。
配置SPI模式


这段代码中,SPM32 SPI是作为东道主设置的。双线全双工模式,数据帧长度为8位,使用了SPI模式3(CPOL=1) 。CPHA=1),NSS基础由软件和MSB第一线模式管理。该代码将SPI的时钟频率改为4分钟频率。事实上,它可以设置为两点频率,以加速传输速度。欢迎读者自己尝试。CRC计算器是最后一部分。因为我们与FLASH芯片的连接 不需要CRC的核查它对斯皮尔斯人阵的《儿童权利公约》没有影响。目前,《儿童权利公约》公式的成员资格价值无效。
使用 SPI_ Init 库函数将这些配置写入到提供值结束后的登记册, 然后调用 SPI_Cmd 函数来启用配置 。
SPI用于发送和接收字节数据。
在外部初始化 SPI 后, 我们可能会使用 SPI 。 单个字节生成复杂的数据传输。 让我们检查一下它是否是代码 。
SPI用于发送和接收字节数据。


SPI_FLASH_SendByte 提供一个字节函数,对等待事件进行超时处理,类似于 I2C, 此处没有重复。
上述“SPI通信方法”是通过SPI_FLASH_SendByte函数实施的:
(1) 由于这一功能不包括SPI启动和停止信号,而是接收和接收的核心过程,因此启动和停止信号操作在调用这种方法之前和之后进行。
(2) 可变SPITIMEOUT分配给大型SPIT_FLAG_TIMEOUT。在下面的循环中, 这个 SPITimeout 变量每循环降低一个 。此循环通过执行 SPI_ I2S_ GetFlag Status 库方法来检测事件 。若检测到事件,这是交流过程中的下一步。如果该事件尚未查明,它将一直留在原地,直到查明为止。如果尚未发现SPIT_FLAG_TIMEOUT,则认为传送失败。SPI_ TIMEOUT_ 用户回调用于输出调试信息 。并退出通讯;
(3) 通过探测TXE标记获得缓冲区的交付状态,表明如果缓冲区的交付是空的,先前已交付任何数据;
(4) 在等待缓冲区释放和空空后,请图书馆函数 SPI_I2S_SendData 写入数据 " 位子 ",发送到 SPI 数据储存库,SPI 数据储存库中的数据将由SPI 保存和发送;
这是政府第一次有机会就此事作出决定。这是缓冲区收到的非空置事件。由于MOSI和MISO之间的数据传输以SPI双线全时模式同步(参见“SPI通信程序”)。当缓冲区不是完全空的的时候,这个故事是我们对2011年埃及抗议的特别报导的一部分。在缓冲区,还获得了新的数据。
(6) 等待缓冲区的接待是非空的,使用图书馆方法 SPI_I2S_ReceiveData 读取 SPI 数据库 DR,接收缓冲区将提供新的数据。作为 SPI_ FLASH_ SendByte 函数的返回值,代码使用“返回”一词。因此,我们可以观察到SPI接收数据的方法SPI_FLASH_ReadByte,该方法在下面有进一步的具体说明。它只是使用 SPI_FLASH_SendByte 方法发送数据“ Dummy_Byte ” 。然后他们获得返回值(因为他们不在乎他们发送的数据)。因此,输入参数“Dummy_Byte”现在可以使用任何值。这是可以实现的,因为SPI的接收方法与发送过程相同。收发同步进行,我们的顶级应用程序掌握着钥匙重点是数据是否转移或收到。
FLASH 控制命令
在完成SPI的基本分发模块后,还必须了解如何读写FLASH芯片。大量指示由FLASH芯片定制。通过通过SPI公共汽车控制SSM32,我们能够向FLASH芯片发出指示。有关操作将在收到FLASH芯片后进行。
而这些指令,就东道主(STM32)而言,为了交流数据,它只使用最基本的SPI通讯协议。然而,在装置的尽头(FLASH芯片),这些数据被解释为意味着各种事物。所以才成为指令。可在脸书上查阅FLASH芯片数据文件W25Q64。理解它所定义的许多指示的职能和格式,查看典型FLASH芯片的说明表。

表中的第一个名字被称为具有启发性的名称。第二列为指令编码,N栏3至N的具体内容根据指令不同。括号内的字节,它正在前往FLASH传输主机的路上即命令响应,主机对FLASH的广播没有使用括号。在表格中,“A0-A23”指FLASH芯片内部内存的地址;“M0-M7”指制造商(MANUFACTURID);“ID0-ID15”指FLASH芯片的ID;“fumite”指FLASH内部储存矩阵中可以查阅的任何数据的内容;“D0-D7”指FLASH的内部储存矩阵。
如FLASH数据手册设备识别说明所示,FLSAH芯片每类FLASH芯片都有固定的制造商编号(M7-M0)和独有的编号(ID15-ID0)。

读取命令表中的 ID 指示“ JEDECID ”, 产生两个整数 。指令的代号是"9FH"16位数的“9F”(C语言对应 0x9F)表示为“9FH”。紧接命令代码后的三个字节是FLASH芯片输出“(M7-M0)”,“(ID15-ID8)”和“(ID7-ID0)”。以下是这样的指令的例子:除了教育时间表之外,我还能够描述它。见FLASH时间序列,读取ID指示JDEC_ID。

初始字节“ 9Fh” 由主机通过 MOSI 线发送到 FLASH 芯片 。在FLASH芯片收到数据后与主机发送的"JEDEC指令"相同它随后对该订单作出反应,将其制造商编号(M7-M0)和芯片型号(ID15-0)传送到MISO线路的主机上。主机收到命令响应,可予以确认。读取设备标识是一个常用的应用程序,其中主机测试设备用于正常连接。或用于识别设备。
其他FLASH芯片指令类似,尽管有些含有几个字节,或者答案提供了补充数据。
实际上,某种模式驱动写作设备最初,我们必须确定该装置使用了哪些通信协议。因为前一章中的EEPROM使用了I2C,SPI在本章FLASH中使用。因此,让我们从它的传播安排开始。选择 STM32 硬件模块 。并设置相关的 I2C 或 SPI 模块。接着,我们必须了解目标设备的适用指示。因为不同的设备,有许多指示。例如,在EEPROM中,第一批数据被理解为内部储存矩阵地址(内容为命令)。此外,FLASH还界定了其他命令。有写指令,读指令,读ID指令等等。最后,按照本规章的格式标准,使用通讯协议向装置提供指示。控制设备目标已经实现。
创建 FLASH 命令编码表 。
为了让事情变得容易些,我们将将FLASH芯片的标准指令代码包在宏中,并在稍后给出指令代码时立即使用。
FLASH 命令编码表

需要阅读FLASH 芯片身份证
我们写下将FLASHID 读成一个函数的程序 根据JDEC命令的时间序列。
需要阅读FLASH 芯片身份证


此代码控制 CS 温度, 使用宏“ SPI_ FLASH_ CS_ LOW/ HIGH ” 和先前制作的字节函数 SPI_ FLASH_ SendByte 。JEDECID 命令的时间序列显然已经实现: 发送一个字节命令代码“ W25X_ JedecDeviceID ”然后读取3个字节,得到FLASH芯片对订单的反应。最后,三个已读变数合并成一个单一变数,Temp。然后,作为一个函数,返回值。要比较返回值到定义的宏“ sfLASH_ID”,您可以检查以确定 FLASH 芯片是否正常运行 。
FLASH 写作能力和阅读现状
要在将数据写入 FLASH 芯片存储矩阵之前能够写入操作, 您可以使用“ WriteEnable” 命令 。
写使能命令

与EEPROM类似,因为FLASH芯片需要时间 将数据输入内部存储矩阵巴士开完时没有完成。因此,你必须确保FLASH芯片在完成程序后可以自由地再次写信。为了反映他们目前的就业状况,FLASH芯片是一种国家记忆检查FLASH芯片的状态记忆

我们只对这个州储户的零位“Busy”感兴趣, 这表明FLASH芯片正忙碌, 可能在内部存储矩阵上擦拭或“数据写”。
FLASH芯片状况登记簿的内容可通过使用指令表格中的“Readstatus Register”指示查阅,其时间序列见状态读数登记时间序列。

我们只对这个州储户的零位“Busy”感兴趣, 这表明FLASH芯片正忙碌, 可能在内部存储矩阵上擦拭或“数据写”。
FLASH芯片状况登记簿的内容可通过使用指令表格中的“Readstatus Register”指示查阅,其时间序列见状态读数登记时间序列。

只要读取系统的指示被传送到FLASH芯片,FLASH芯片将继续将最新的国家记录器信息归还主机,直到收到来自SPI通信的停止信号为止。 在这个前提下,我们已经建立了一个功能,其最终功能将等待FLASH芯片的写作。
在等待FLASH芯片投入使用的同时读取国家记忆

本代码为“ W25X_ ReadstatusReg” 之后的读状态登记册提供一个命令代码,该代码基于以下内容:在整个周期内,不断收集登记册的内容,并测试其“WIP_Flag”标志(即比特(BUSY))。要退出此函数,请等待输入标记。保持FLASH芯片的数据连接
FLASH扇区擦除
因为FLASH内存的特性 要求它只能改变数据位置 最初的数据位置是“ 1” 改为“ 0 ” 。初始的“ 0” 数据槽无法轻易改写为“ 1 ” 。这就是数据“原谅”的概念。在写入前,必须删除目标储存矩阵。将矩阵中的数据位转换为“ 1 ” 。在数据写入的时候,如果您想要保存值 “% 1 ”,因此,不改变储存矩阵。当您想要保存值“ 0” 时才更改该位。
用于消除储存矩阵的基本操作单位往往很多字节,例如本例中的FLASH芯片,它使 " 部门清除 " 、 " 街区清除 " 和 " 全面清除 " 成为可能,正如这个实验性的FLASH芯片清除装置所显示的那样。

FLASH芯片最小的可移动单位是一个部门(区),一个区(区)有16个部门(区),如FLASH芯片储存总表所示,内部储存矩阵分散在16个部门。

FLASH芯片的写作开始由部门清洗指令“部门Erace”的使用加以规范,其顺序由部门的时间顺序显示。

命令代码是扇区第一个字节擦除命令, 之后是三个字节, 以识别要删除的存储矩阵地址 。 重要的是要注意, 在扇区擦除命令之前, 必须发送“ write 推进器” 指令, 在发送扇区擦除器指令后, 区擦除操作必须完成, 其方式是读取“ 状态” 注册指令是扇区第一个字节擦除命令, 之后是三个字节, 以识别要删除的存储矩阵地址 。 重要的是要注意, 在扇区擦除命令之前, 必须发送“ write 推进器” 指令, 在发送扇区擦除器指令后, 区擦除操作必须读读登记册状态 完成 。
擦除扇区


此代码所引用的函数先讨论, 只要您知道当指示被删除时地址是高的, 就会先讨论此代码所指的函数。 当联系一个区域以删除命令时, 请确定输入的地址与 4KB 一致 。
FLASH的页写入
随着目标部门的取消,你可以在数据中保存它。和EEPROM类似FLASH芯片上还有页写指令。您只能在使用页面写作指令时将256个字节的数据发送到 FLASH 。这是我们使用的页面大小单位。FLASH 芯片页面显示 FLASH 页面上所写的时间序列 。

从时序图可知,第一个字节是“页面写说明”的代码。2 -4字节写到"地址A"我接下来要写的东西就是我所知道的最多可发送256字节的数据。信息将首先以"地址A"开始。依序写给FLASH存储矩阵。如果提供的数据超过256比特,中,您将提前覆盖所提供的数据。
与擦除指令不一样,编写说明的页面上的地址不需要256字节对齐。足以检查目标储存装置是否已被擦除(即删除后没有重写)。所以,如果您在“ adressx” 可执行文件中添加命令,通信在传输200字节的数据后结束。下次我们见面时 我们会把页面上的写作指示付诸行动从地址(x+200)写入200字节同样不是问题(价值小于256)。基本清理模块的实际使用量仅为4KB。通常在部门中读写。想深入了解,我们的FLASH档案系统可以教你一两招
作为函数,封存撰写页面的时间序列。
FLASH的页写入


代码包括以下步骤:停止“ Write Capable” 命令, 启动页面的写作时间序列, 发送命令代码、 地址, 将数据逐个发送, 发送后结束通信, 检查 FLASH 状态登记册, 等待 FLASH 内部写作结束 。
不定量数据写入
当使用时,我们经常写出不可量化的数据, 直接调用“页面写作”功能是不方便的, 所以我们设计了基于此功能的“无法量化的数据写作”功能。
不定量数据写入




代码与 EEPROM 章节的“ 快速写入多字节” 函数相同 。本节不再重复计算程序。差别在于页面大小和实际数据写入时的大小。使用FLASH芯片的页面写作功能,当您使用这个未量化的数据写入函数时,还将注意确保目标部门正在逐步取消。
FLASH 数据应读为:
FLASH芯片读起来比写起来容易得多,使用“ReadData”命令来阅读数据,其顺序在SPI_FLASH时间序列中表示。

收到命令代码和读取起始地址后, FLASH 芯片将存储矩阵的内容按地址递增返回;需要读取的数据数量是无限的, FLASH 芯片只要通信不中断,就会返回数据。
FLASH 数据应读为:


由于可以阅读的数据数量没有限制,因此在订单结束前接收NumByte To Read数据是适当的。
接下来,我们将构建主功能 并做FLASH芯片读数和写数检查。
main函数



函数以设置 LED、序列和 SPI 外部化,然后读取用于核查的 FLASH 芯片代号,如果ID 得到验证,将测试数据写入 FLASH 的具体地址,然后读取该地址的数据,如果读写正常,则进行测试。

通过USB线路连接开发委员会的“USBTOUT”界面和计算机,然后在计算机上启动序列调试助理,然后将已建软件下载到开发董事会。 从 FLASH 测试中调试信息可以在序列调试助理中查阅。
本文由 在线网速测试 整理编辑,转载请注明出处。