【SPI总线协议以及其在SPI NAND FLASH中的应用】

目录

1. SPI物理层

2. SPI协议

3. SPI NAND FLASH

3.1 读

3.2 写 

 3.3 擦除


1. SPI物理层

先看一下一些SPI接口的外设器件(GD5F1GQ4UAYIG)

                                                 SPI接口

                               

管脚定义

SPI通信物理模型

SPI是一种主从物理结构的通信协议,允许1主机多从机,通SS片选信号激活以及选中需要通信的从机。

SPI总线:

      SCLK:时钟信号线,用来同步主从机通信的时钟,只能有主机发送,从机接收。

      SS:片选信号线,只有片选上的从机才接收总线上的数据,又称CS#,低电平有效。

      MOSI:数据线主机发送数据,从机接收数据。

      MISO:数据线从机发送数据,主机接收数据。

      WP#:写保护,低电平有效。从机接收到此信号,将不接收后来的program,也可以当数据线使用。

      HOLD#:挂起,低电平有效从机接收到此信号,将不接收后来的命令。也可以当数据线使用。

2. SPI协议

四种模式

POL(polarity):极性,也称CPOL(clock polarity);定义clock信号的空闲状态;0表示低电平为空闲,1表示高电平为空闲。

PHA(phase):相位,也称CPHA(clock phase);定义发送数据以及接收数据的边沿(跳变沿);0表示在第一个边沿接收数据,1表示在第二个边沿接收数据。

第一边沿:

        若极性为0,则第一边沿就是从低电平到高电平变化的边沿就叫第一边沿。

        若极性为1,则第一边沿就是从高电平到低电平变化的边沿就叫第一边沿。

第二边沿:

        若极性为0,则第二边沿就是从高电平到低电平变化的边沿就叫第二边沿。

        若极性为1,则第二边沿就是从低电平到高电平变化的边沿就叫第二边沿。

如下图:

主从设备需要配置在同一种模式下方可正常通信。

3. SPI NAND FLASH

3.1 读

  1. 先将数据从flash存储cell中读取数据到到spi nand 的cache中

        命令:13H

        时序:

从时序中可以看到在13H+Adress后,host端需要发送OFH+Address,该Address通常是反映flash数据从cell到cache的状态的地址。

        2. 再从cache中把数据传输到请求(host)端

此时有 三种不同的数据传输方式:

1单线传输(03H/0BH)数据;

2线传输(3BH)数据;

4线传输(6BH)数据。

3.2 写 

写分三步:

       1. 发送write en(06H)到device  

        2. 把数据从host传到device的cache ,此时有两种传输方式:1线(02H)和4线(32H)

     

    

    3. 在把cache中的数据刷到存储cell中(命令10H+Address执行刷cache数据到cell中)

      

 3.3 擦除

 

擦除操作分三步:

  1. 先发WRITE ENABLE COMMAND(06H)到device
  2. 再发D8H+Address擦除命令擦除对应的block
  3. 最后通过OFH获取擦除的状态,判断是否擦除成功

待续.....

在Ubuntu中使用VSCode配置OpenCV并编写孔明棋的步骤大致如下: 1. 安装OpenCV:首先需要在Ubuntu系统中安装OpenCV库。可以通过以下命令在终端中安装OpenCV: ``` sudo apt-get install libopencv-dev ``` 2. 安装VSCode和C/C++扩展:如果尚未安装VSCode,可以访问其官方网站下载并安装。安装完成后,需要安装C/C++扩展,以便在VSCode中编写和运行C/C++代码。 3. 创建项目文件夹:在合适的位置创建一个新的文件夹作为项目目录。 4. 创建C/C++源文件:在项目目录中创建孔明棋的源代码文件,例如`kongmingqi.cpp`。 5. 配置VSCode的`tasks.json`:需要配置一个编译任务来编译C++代码。右键点击项目目录中的`.vscode`文件夹(如果不存在则创建一个),选择“在终端中打开”,然后输入`code .`打开VSCode,并创建或修改`tasks.json`文件,加入如下配置: ```json { "version": "2.0.0", "tasks": [ { "label": "C++ build", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-std=c++11", "-I/usr/include/opencv4" ], "group": { "kind": "build", "isDefault": true }, "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared", "showReuseMessage": true, "clear": false }, "problemMatcher": [ "$gcc" ] } ] } ``` 6. 配置VSCode的`c_cpp_properties.json`:确保你的C++环境路径配置正确。这可以在VSCode的设置中通过“C/Cpp: Edit Configurations (UI)”命令来完成。 7. 编写孔明棋代码:在`kongmingqi.cpp`中编写孔明棋的逻辑代码。 8. 构建和运行:在VSCode中按下`Ctrl+Shift+B`启动构建任务,然后可以通过在终端中运行编译后的可执行文件来运行孔明棋。 请注意,孔明棋的实现细节取决于具体的游戏规则和你打算如何实现它。你需要编写相应的算法来实现棋盘的布局、棋子的移动规则以及游戏的胜负判断逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值