首页 » 科学 » 三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数

三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数

萌界大人物 2024-12-05 19:32:45 0

扫一扫用手机浏览

文章目录 [+]

一、SPI初始化

在利用 SPI 进行收发数据之前须要在 Lua 代码中实行一次 LIBSpiMasterConfig() 初始化函数,LIBSpiMasterConfig() 函数先容如下:

函数名称:LIB_SpiMasterConfig(p1,p2,p3)

三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数 三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数 科学

函数描述:配置Core的SPI接口以master模式开始事情,SPI利用Core的CLK,MOSI,MISO,CS引脚把稳:该函数只能调用一次

三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数 三行代码实现单片机SPI读写NorFlash存储芯片_数据_函数 科学
(图片来自网络侵删)

示例代码:

--使能SPI以master模式事情在模式0,时钟为4Mhz的频率,MSB_First:每次先发送字节里的最高位LIB_SpiMasterConfig("4M","Mode0","MSB_First")

二、SPI发送和吸收数据

SPI收发数据函数为LIB_SpiMstTransmit(),干系先容如下:

函数名称:LIB_SpiMstTransmit(p1, ...)

函数描述:SPI主机开始发送和吸收数据,须要把稳的是每次收发的数据个数不能超过128个字节。

把稳:不同传输模式(p1参数)下,函数 LIB_SpiMstTransmit() 的输入参数和返回值不一样,下面的例子会先容不同模式下函数的调用方法

TxAndRx 类型传输的示例代码:

TxData = {1,2,3}RxLen = 3--全双模式,SPI主机发送3个数据同时吸收3个数据RxData = LIB_SpiMstTransmit("TxAndRx",TxData,RxLen)print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

TxThenRx 类型传输的示例代码:

TxData = {1,2,3}RxLen = 3--半双模式,SPI主机发送3个数据完成后,再紧接着吸收3个数据RxData = LIB_SpiMstTransmit("TxThenRx",TxData,RxLen)print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

Tx 类型传输的示例代码:

TxData = {1,2,3}--半双模式,SPI主机仅发送3个数据LIB_SpiMstTransmit("Tx",TxData)

Rx 类型传输的示例代码:

RxLen = 3--半双模式,SPI主机仅吸收3个数据RxData = LIB_SpiMstTransmit("Rx",RxLen)print(string.format("Spi master had recv %d bytes data,Data[1]=%d,Data[2]=%d,Data[3]=%d", #RxData,RxData[1],RxData[2],RxData[3]))

三、实例:SPI NorFlash 芯片厂商ID读操作

采取W25QXX系列SPI接口NorFlash芯片模块作为演示实例:

下面我们通过读取W25QXX芯片的厂商ID以及其他信息,来展示Core的SPI接口利用方法

LIB_SpiMasterConfig("1M","Mode0","MSB_First")--配置USB以虚拟串口模式事情LIB_UsbConfig("CDC")--开始大循环while(GC(1) == true)doTxData = {0x9F}RxLen = 3--半双模式,SPI主机发送1个数据(0x9F指令)完成后,再紧接着自动吸收3个数据RxData = LIB_SpiMstTransmit("TxThenRx",TxData,RxLen)print(string.format("ManufacturerID = 0x%02X,MemoryTypeID = 0x%02X,CapacityID = 0x%02X", RxData[1],RxData[2],RxData[3]))LIB_DelayMs(1000)end

代码运行结果如下图(可以看到厂商ID为0xEF,芯片类型ID为0x40,芯片容量类型为0x16):

附录:

W25QXX芯片数据手册中读取厂商代码的操作描述如下(更多信息请在华邦官网自行查阅W25QXX数据手册):

标签:

相关文章