Vivado+PetaLinux 系统搭建教程

PetaLinux 是基于 Yocto project

DDR SDRAM
双倍数据率同步动态随机存取存储器(英语:Double Data Rate Synchronous Dynamic Random Access Memory,简称DDR SDRAM)为具有双倍资料传输率的SDRAM,其资料传输速度为系统主频的两倍,由于速度增加,其传输性能优于传统的SDRAM。

FTP文件传输
在ubuntu系统下搭建FTP服务器
在windows系统下安装FTP客户端

传输方式是使用网络进行传输

遇到的问题
**

问题一

**
sudo 密码忘记了始终报错 不正确 但是root 密码知道
通过命令
su -
passwd rgw
输入新密码进行更改即可

问题二

在安装petalinux时 安装vsftpd 通过命令安装 sudo apt-get install vsftpd
但是一直安装不上 显示网络问题 是下载源的问题

通过
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup # 备份原始配置
sudo nano /etc/apt/sources.list # 使用 nano 编辑器打开 sources.list 文件

通过这个命令更改下载源

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

把下载源改成以上的清华大学的镜像源 然后更难改后
sudo apt-get update

再通过命令更新下 在 sudo apt-get install vsftpd 对vsftpd进行下载

这样vsftpd就下载成功了

然后sudo vi /etc/vsftpd.conf

通过命令对 vsftpd配置进行更改
在这里插入图片描述
这样就可以启动vsftpd服务了 长度
再通过命令sudo /etc/init.d/vsftpd restart 启动
在这里插入图片描述
这里启动后检查FTP服务是否正常运行 通过命令
sudo systemctl status vsftpd
遇到问题时 报错
在这里插入图片描述
显示的是配置资源有问题 但是我根据文档改的配置资源没有问题 最后没有解决问题 最终我又直接把vsftpd卸载重新安装了一下 就可以了 再次检查是否成功启动 显示已经成功了
在这里插入图片描述

客户端windows安装fileZilla
在这里插入图片描述
博客的安装教程

https://blog.csdn.net/SoloVersion/article/details/124579221?ops_request_misc=&request_id=&biz_id=102&utm_term=fiezila%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-124579221.142v99pc_search_result_base2&spm=1018.2226.3001.4187

安装好后 开始搭建

第一步就是对所选的板卡进行配置 设置一些PS配置

建立vivado工程 首先创建一个工程 选择板子对应的型号
建立blockdesign 选择好zynq ps zynq这里是一个基本的配置 当之前你选择完板子型号 然后run block automation 勾选Apply Board Preset 就会根据选择的板卡型号 增加一些其他的ps接口
在这里插入图片描述
顶层设计的理解: FPGA所有设计的最高层 把所有的子模块 IP核 与FPGA外部相连的接口 集合在一起。 然后与外部世界交互 这里的外部世界指的就是pl端 非ps端的内容

在这里插入图片描述
对这句话的理解就是 ps端是cpu中央处理器 ps里的DDR接口 通过映射的方式 把ps的地址 数据 信号连接到pl端的地址上 一般ps的DDR与外部pl端的DDR SDRAM存储器通过映射的方式连接在一起。 PS中的FIXED_IO与DDR一致 都是需要将这些接口引出到FPGA顶层。然后通过映射的方式与外部引脚连接起来

PS中的固定引脚
外部引脚不能直接访问PS中的MIO引脚,而只能通过PS内部的映射关系进行访问。这是硬件设计中的一种限制和规定,确保系统的可靠性和一致性。 例如 PS_MIO0 只能对应 G6引脚。
在这里插入图片描述

DDR:是动态随机存取存储器(DDR SDRAM)

这是zedboard板子上的信息
在这里插入图片描述
丝印XXX就是指pcb板子上的丝印XXX在板子上的位置 具体是为了原理图与实际物理板之间建立关联

这是PS配置

观看下DDR配置

在这里插入图片描述
这里就是DDR的配置 为什么必须要有DDR ?
PS-DDR(DDR 是运行 PS所需的最基本的外设,显然一个系统没内存就没法运行) 以上是zedboard的版上的DDR的配置。

设置下MIO EMIO 的I/O接口

在这里插入图片描述
看一下MIO的引脚配置 哪些功能对应哪些引脚

因为后面用不到USB控制器 所以取消掉 后面还要用到UART1 从外部控制选择EMIO 将PL连接到PS上

配置一下PS PL端的

主要是用到什么协议进行配置
在这里插入图片描述
可以看到只有 M AXI GP0被勾选了。我们额外勾选上 S AXI HP0 interface,这是为了提供 PL访问 PS-DDR 的
路径,为 Central DMA IP 核提供搬运 PS-DDR 数据的可能

PL 访问 PS 中PS-DDR 要用到S AXI HP0 interface

在这里插入图片描述
这里主要指的是 以下这三个含义
在这里插入图片描述

修改PS 提供给PL的时钟

PL中的一些逻辑需要的时钟不同 所以要把ps提供给pl的时钟进行修改

在这里插入图片描述
比如这里用到的就是 FCLK_CLK0 这个时钟

添加PL to PS 的中断

在这里插入图片描述
IRQ_F2P 是 PL提供给 PS的中断,通常用于把 PL外设的中断反馈给 PS。例如,PL中部署的 UART控制器可
能需要在收到数据后用中断告知 CPU“我收到了数据”。另外,可以把这些中断连接到 PL外的按键上,用来实现按
键中断。

然后就可以搭建PL系统

第二步就是设置PL端 搭建PL系统

原本ps端都有的 如果你想用到外设PL端上 设置好后他就会在芯片上显现

因为我们ps uart用得是与外部相连接EMIO 扩展得外部接口 所以这里我们要用uart 1 引出去 来实现PS PL得数据交互 缺点就是速率较慢 优点是较方便 一般可以用AXI总线来实现 速率比较快
在这里插入图片描述
右击Make External 就可以把这个接口引出block design

在这里插入图片描述
这样就把uart_1引出block design了

搭建AXI-GPIO外设

AXI GPIO这是一个外设控制得IP核 ps能通过 M_AXI_GP0接口访问 axi_gpio_0 的 AXI从接
口,但他们之间并不能直接连接,而是要通过一个 AXI Interconnection(AXI交叉开关,简称 AXI桥)

ps上得AXI 与axi_gpio上得axi相连接 是不能直接相连的需要一个axi得交叉开关 简称AXI桥
通过Run connection Automation 自动生成 并且连接起来 新的block design 就已经建立了
在这里插入图片描述

这是新的增得一些ip核
在这里插入图片描述
其中ZYNQ右下角得两个时钟信号FCLK_CLK0 FCLK_RESET0_N从ps端输出到rst_ps_100M这个IP核当中根据ps输入得时钟连线顺序可以看出 经过rst_ps_100M这个ip核 输出了一个信号 这里就是把两个不同时钟得信号进行了 时钟上得统一

这个rst_ps_100M这个IP核得作用在于同步复位时钟
在这里插入图片描述
又新增了一个ps_axi_periph这个ip核 他主要得作用是处理PS与PL之间得地址映射 确保PL可以正确得访问PS提供得地址空间 以及正确得数据位宽读取或写入数据
地址转换和数据位宽变换

在这里插入图片描述
对于这个ip核 左侧得从机接口连接得是zynq得AXI_GPIO接口 右侧主接口连接其他外设 也就是这里得axi_gpio

配置GPIO 应为要用8个led 所以这里得GPIO的位宽应设置8位
在这里插入图片描述
这里的Default Output Value这个值为55 这里设置输出的值为55
在这里插入图片描述
再把这个输出的引脚 引出到block design 外
在这里插入图片描述
这样这里的GPIO引脚就引到外边去了 这样GPIO的配置就结束了

搭建AXI-UARTlite外设

在这里插入图片描述

加入这个IP核
首先auto 这里就可以根据连接得时钟是多少,从而设置它自己的工作时钟
设置没有校验位
**校验位:**校验位(Parity Bit)是在串行通信中用于检测传输错误的一种方法。它是通过在数据位中插入一个额外的位来实现的。校验位的作用是使得数据的位数具有一定的特定性,以便在接收端检测出传输过程中是否发生了错误
**在传输过程中,**发送端和接收端必须使用相同的校验方式。发送端计算校验位并将其添加到数据中,接收端在接收数据后计算校验位,如果校验不通过,则表明在传输过程中可能发生了错误。

在这里插入图片描述
这里又复制了一个 这样就有了两个axi_uartlite 我们需要配置一下 因为想要与pl进行通信 使用得axi总线 需要axi桥来进行地址数据得映射 所以需要与axi桥进行连接 从而与ps端相连
所以双击ps_axi_periph进行配置
在这里插入图片描述
这里设置成3 因为额外连接两个从机
配置完后这里多出现了两主接口
在这里插入图片描述
右侧不只多加了 俩个这个 左侧还多加了 M01 ACLK , M01 ARESETN ,M02 ACLK ,M02 ARESETN .

右侧是把axi_uartlite 挂载到AXI桥上 左侧是解决时钟问题
在这里插入图片描述
**

搭建 Central DMA (CDMA)

**
用来实现 PS-DDR 的数据的快速拷贝
对CDMA模块进行配置
在这里插入图片描述
去掉
“Enable Scatter Gather”(启用分散聚集)通常是指在输入/输出(I/O)系统中启用分散聚集(Scatter-Gather)功能。这是一种用于提高数据传输效率和灵活性的技术,通常在操作系统、驱动程序或硬件控制器中实现。

这里配置的读写位宽64位 是因为外设 通过ps的HP接口访问ps中的ddr 这个HP 接口的宽度就为64bit 所以这个位宽设置在高也不会有提升了因为 那个通道也就是64bit 所以DMA这个性能瓶颈也就是跟接口也有关系

CDMA DMA区别
在这里插入图片描述
我们勾选掉 Enable Scatter Gather功能,使用最简单的 DMA 机制,这种 DMA只需要配置源地址、目的地址、
长度,就能进行 DMA 传输。 配置好后 ok

在这里插入图片描述

点击 OK配置好 Central-DMA模块。可以看到,新添加的 Central-DMA模块(axi_cdma_0)具有一个 AXI从
接口(S_AXI_LITE)和一个 AXI主接口(M_AXI)。其中,S_AXI_LITE 接口需要连接到 ps_axi_periph 上,PS
通过 S_AXI_LITE 接口来控制 DMA;M_AXI是 DMA搬运数据使用的接口,M_AXI需要通过 ps 的 HP 接口来访
问 PS-DDR,这样才能实现 DDR数据的搬迁。

s_axi_lite_aclk和 s_axi_lite_aresetn 分别是 S_AXI_LITE 接口
的时钟和复位;而 m_axi_aclk 是 M_AXI接口的时钟。

连接中断信号

在zedboard中中断信号IRQ_F2P

axi_uartlite_0、axi_uartlite_1、axi_cdma_0 都各有一个中断输出信号,它们需要连接到 ps 的中断输入引
脚(IRQ_F2P) 目的是把这三个中断合并成3个信号组 由PS板子上的IRQ_F2P中断信号一同控制。

PL系统搭建完毕 开始分配地址

分配地址

AXI Interconnect 负责对地址进行转换,根据主机的读写请求中的地址把请求路由到对应的外设中
在这里插入图片描述
对这些进行地址分配

可以看到上图只有一个分配了地址 然后其他都没有分配地址
在这里插入图片描述
可以按照这种方式进行分配

在这里插入图片描述
这里就配置好了

在这里插入图片描述
Base Name 是 HP0_DDR_LOWOCM,这意味着对于 axi_cdma_0 来说,它能访问 0x00000000~0x1FFFFFFF这
512MB的地址空间,这个空间对应的就是 PS 的 DDR

Block Design 综合、生成 Wrapper

这样就完成了block design的设计 然后进行验证设计的是否有问题 通过
在这里插入图片描述
通过这里去检查验证。

在这里插入图片描述
我这里就报错了 显示一个ps_axi_periph的时钟没有连接

检查错误进行连接就ok了
在这里插入图片描述
在进行验证 就没有报错误了。

对你设计好的部分生成IP核

在这里插入图片描述
对设计好的进行生成 Generate Output Products

在这里插入图片描述
这三个选项的含义是:

  1. Global:全局综合、当 Block Design被改变时,重新综合 Block Design 内部的所有 IP 以及 Block Design
    外部的所有 Verilog 代码。这种方法很低效,有时候我只是修改一点东西就要重新综合整个工程,因此
    不推荐。
  2. Out of context per IP:每个 IP 核独立进行综合,当修改 Block Design内的一个 IP 核时,只重新综合这个
    IP,不需要综合其它没有变的 IP,推荐选这个
  3. Out of context per Block Design:如果 Block Design中的一个 IP 被修改,那么整个 Block Design中的所有
    IP 都要重新综合。
    然后生成

然后我们用 vivado 自动生成该 Block Design 的 HDL Wrapper,这个 Wrapper文件其实就是一个套在 Block
Design外面的 Verilog 文件,以方便 Block Design 能被其它 Verilog文件调用。右键 bd,点 Generate HDL Wrapper,
在这里插入图片描述
然后生成Generate HDL Wrapper这个文件

  1. Copy generated wrapper to allow user edits:生成的 Verilog 文件不会自动更新,当用户修改 Block Design
    时,需要手动的重新生成 HDL Wrapper。
  2. Let Vivado manage wrapper and auto-update:当用户 Block Design后,HDL Wrapper 会被自动修改。
    我们选择 Let Vivado manage wrapper and auto-update,然后点 OK。生成了一个 bd_wrapper.v,打开它可以发现,
    该 Verilog 模块包含了 Block Design 中所有引出的接口,例如 DDR、FIXED_IO、UART 等。

对wrapper的理解
在FPGA设计中,将PL(Programmable Logic,可编程逻辑)端的各个IP核、模块或接口结合成一个模块,然后使用Verilog或VHDL语言进行描述,形成一个包装(wrapper)模块。这个包装模块会包含所需的接口、信号连接、时钟和复位逻辑等。

第三步就是写编写 Verilog 顶层文件

以上生成了bd_wrapper.v的文件

不建议大家修改 bd_wrapper.v,而是在
bd_wrapper.v 外套一层 top.v,在 top.v 内编写你 Verilog 的逻辑,因为 bd_wrapper.v 可能会被 Vivado 自动修改,从
而导致你编写的代码消失。

新建一个 top.v 文件作为整个工程的顶层,右键 Sources 选项卡中的 Design Sources,在弹出的框中点 Add
Sources
在这里插入图片描述
创建一个top.c的文件
在这里插入图片描述
根据生成的wrapper文件 连编写top.v的文件
在这里插入图片描述

建立引脚约束

需要把 top 模块中的所有属于 PL 的引脚约束到 PL 的 IO 口上,其中 DDR 和 FIXED_IO 开头的信号是属
于 PS 的,不需要约束
,只需要约束 3 对 UART 和 8个 LED。
在这里插入图片描述
然后创建.xdc文件 实现引脚约束

引脚的约束要根据手册进行配置

进行制作SD卡启动镜像

zynq的linux启动有三个步骤
步骤一 zynq上电后,会根据5个模式进行引脚配置 MODE[4:0]=00000 对应JTAG模式 MODE[4:0]=01000 对应QSPIflash启动
MODE[4:0]=01100 对应从SD卡启动
步骤二 zynq开始运行BOOT程序,BOOT程序先后分为三部分 1 FSBL 、Bitstream和UBOOT。
FSBL负责初始化PS-DDR;
Bitstream是加载到PL里的比特流;
UBOOT负责从QSPI、SD卡、以太网等外设中加载Linux镜像(Linux镜像一般是一个叫image.ub的文件),并运行。

		   进入UBOOT时,如果打断倒计时,会进入一个简易的命令行(UBOOT命令行)我们可以在UBOOT命令行输入命令来从外设加载Linux镜像到memory 然后从memory中启动Linux   不打断倒计时 UBOOT就会从默认的外设中加载Linux镜像并启动  默认的配置可以在Petalinux中设置

步骤三 运行Linux镜像 Linux启动 进入Linux 命令行终端

安装petalinux

linux上的共享文件和vmwaretools工具都安装好见文章linux学习有讲解

安装petalinux要先进行安装依赖具体依赖如下

在这里插入图片描述
不要在root超级用户下安装 切回普通用户 先创建一个petalinux2019文件夹 然后进入到文件夹后 安装完依赖在对下载的petalinux进行安装 这里注意 安装petalinux要的磁盘大小在100g左右运行给到了8g 之前不知道 扩展磁盘一堆问题又重新安装了一遍 麻烦的很
安装好后要运行source settings.sh脚本文件 设置petalinux运行环境 导出petalinux的环境变量

遇到个小插曲就是虚拟机上复制东西到不了windows上 解决问题就是
解决方法一:安装 VMware Tools

  1. 查看vmware Tools是否安装

     打开虚拟机 ,点击上方导航栏 ‘虚拟机’ 查看VMware Tools是否安装,如果未安装,安装即可
    

加粗样式
解决方法二:命令行解决
如果第一种方法不行,可以试试第二种方法

    1.输入命令,切换到 /usr/bin 目录下输入命令     vmware-user

解决方法三:重新安装组件

这里petalinux主要的设计流程是
1 搭建vivado工程 主要的目的是导出hdf文件硬件描述语言
2创建一个petalinxu工程
3在把hdf文件导入petalinxu工程当中(就是将vivado设计应用到petalinux工程中)
4配置petalinux 并且配置内核 配置U-boot以及根文件系统
5编译petalinux工程(U-boot镜像、内核镜像以及rootfs,bitstream,fsbl镜像文件)这是编译得到的结果
6启动开发板
**

要把刚才在vivado中生成hdf硬件描述语言传过来可以用ftp share方式将文件从windows穿过来

传完之后

开始创建petalinux工程

第二步 通过petalinux -create -t project -n zynq7060 --template zynq 创建一个petalinux工程 名字为zynq7060 平台是zynq平台创建
在这里插入图片描述
第三步 把hdf导入这个petalinux创建的工程当中
也就相当于配置信息的一部分
在创建的petalinux目录下把hdf文件复制过去
在这里插入图片描述
根据你设置的工程名称和生成的sdk以及相应的目录进行配置
在这里插入图片描述
会进入这个对话框 键盘控制选项
在这里插入图片描述
进行硬件配置
选择memory setting
在这里插入图片描述
这里页面是根据你vivado配置的一些数据相配置的 比如这里的System Memory Size 大小是0x4000000(大小为1G) 这个意思是制作出来的系统会使用1G地址空间作为内存 我们把这里设置成0x20000000 512MB 这样linux内核和应用会使用前的一半的DDR 而后一半的DDR我们用来Central-DMA数据搬运

在这里插入图片描述
改好后退回原来的地方

进入serial settings选项
在这里插入图片描述

这里一般是你vivado中生成hdf的配置的一些设置
在回退进行配置
在这里插入图片描述
在这里插入图片描述
配置primary以太网 这里的以太网只是对Uboot而言 为linxu提供以太网启动方式
在这里插入图片描述
因为不需要以太网启动 所以这里设置manual
再回退一步
在这里插入图片描述
进入flash settings
在这里插入图片描述
partition 0 存放FSBL Bitestrem UBOOT 这里Bitestream较大 FSBL和UBOOT较小 大概不会超过8M 所以把partition大小放 置8M
partition 1 使用默认0x20000 不做改动
partition 2 存放 Linux Kernel(image.ub),一般 image.ub 一般在 5MB~20MB 之间。考虑 QSPI flash 有 32MB,我们可以给 partition 2 分配尽量多的空间,这里我们分配 0x1500000(21MB)
前三个分区加起来大小是 0x1d20000(29.125MB),注意在分配空间时前三个分区不要把 32MB 全用完,会
出一些莫名的 bug。
partition 3 和 partition 4 不要动,
在这里插入图片描述
配置好后 这几个分区配置后
在回退到原来的地方
进入SD/SDIO
在这里插入图片描述
这里可以设置 Primary SD 控
制器,例如这里默认设置的是 ps7_sd_0,这样,UBOOT 会默认从 PS 的 SDIO0 中加载 image.ub
**在这里插入图片描述**
然后回退 1 步回到 Subsystem AUTO Hardware Settings,进入 Advanced bootable images storage Settings,这里,
我们把 boot image settings和 kernel image settings 设为 primary sd(保持默认设置即可)。
这样,BOOT 程序和 Linux 镜像都会从 SD 卡中加载
在这里插入图片描述
在这里插入图片描述

然后回退 2 步回到 ZYNQ Configuration,进入 Ycoto Settings,勾选 Enable Debug Tweaks(使用 y键)
至此我们完成了 petalinux 工程的基本设置,然后在下方多次点 Exit 一路退出,在最后一部点保存(Save),回到
命令行终端,然后 PetaLinux 会花一些时间完成配置。配置完后如下图:
在这里插入图片描述
需要等待一些时间
在这里插入图片描述
这里就是配置完成了

然后我们配置 Linux 镜像,给它加入 axi_uartlite IP 核的设备驱动的支持,这样,PL_UART0 和 PL_UART1 会
在 Linux 中变成两路 tty(字符终端设备)。
运行一下命令:
petalinux-config -c kernel 这里是linux 内核会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。
在这里插入图片描述

这里要花一定的时间才能够打开
在这里插入图片描述
经过一段时间后会弹出一个和上一步类似的配置界面,我们进入 Device Drivers → Character Devices → Serial
drivers ,勾选 Xilinx uartlite serial port support(默认一般是勾选上的)。然后一路按 Exit退出,最后保存。回到命
令行终端。PetaLinux 会花一写时间进行配置。

在这里插入图片描述

配置好后 进行编译

petalinux-build 编译好后进入目录进行查看
在这里插入图片描述
petalinux-package --force --boot --fsbl images/linux/zynq_fsbl.elf --fpga
images/linux/system.bit --u-boot images/linux/u-boot.elf

通过该命令把
把 FSBL、Bitstream、UBOOT 打包成 SD 卡的 BOOT 程序
在这里插入图片描述
解释下uboot是什么?
u-boot全称universal boot loader 通用启动 引导程序
主要作用终极目标就是启动 引导 Linux内核或其他的内核
需要
1把镜像文件一般存放在sd卡或qspi等这些外存设备中
2一定将内核镜像文件拷贝DDR内存当中
3所以u-boot 需要将内核镜像文件从sd卡或qspi中读取出来 并且拷贝到ddr中
4uboot程序中肯定包含了sd卡或者qspi等这些设备的驱动程序
5还需要DDR的驱动程序 需要拷贝到ddr之前将ddr进行初始化

u-boot作用启动linux内核
fsbl是开发板在开机上电之后运行的第一段代码
要先制作一个启动文件boot.bin
这个启动文件一般包括fsbl+用户裸机程序+bit
静态情况下 boot.bin是存放在qspi或者SD卡里边的
系统启动后fsbl 代码会第一个运行 作用是引导 启动用户裸机程序

这里就会生成一个boot.bin 之后就可以用sd卡启动

了解SD卡
先说下sd卡的问题 一般单片机 一般断电数据会丢失掉 但是有一些数据需要保存起来 所以有一些芯片就要断电后要把数据保存起来,
第一个就是e方prom 就是用来当断电后保存相应数据的 e2prom一般与微控制器mcu之间通过i2c协议进行传输使用2跟线一个是scl 一个是sda

iic 短距离 抗干扰能力差 一般适用于电路版上的芯片间传输 因为发收器接收器共用一根总线 所以可以发送任意字节 9个时钟发送一个数据
起始位是高电平 uart是低电平

一般三种i情况 1.主机给从机发数据
2.从机给主机发数据
3.主机先给从机发数据 在从从机给主机发数据
1.主机给从机发数据
在这里插入图片描述
首先主机发一个7位 找到从机地址 然后0就是主机给从机发数据 然后从机应答 然后主机发数据从机应答一直循环 当主机发送最后一个字节数据后 从机应答 然后停止 还有是主机发送最后一个字节 从机不想接收就不应答 直接停止(注意这里是主机发送停止)

2.从机给主机发数据
在这里插入图片描述
主机发送一个7位地址找到从机的地址然后1表示从机给主机发送数据 然后从机应答A 然后从机发送数据 主机在应答A 从机在发送主机在应答 主机发停止信号 从机发送数据 主机不应答 主机发送停止信号。

3.主机先给从机发数据 在从从机给主机发数据
在这里插入图片描述
主机先发起始信号 发送字节数据发送从机地址 然后是0 主机给从机发送数据 从机应答 主机在发送数据 从机可应答不应答 主机发送起始信号 在发送从机地址 然后1是从机给主机发数据 从机应答从机发送数据主机非应答 主机发送停止信号。

总结一下 都是先主机发送起始信号 然后发送从机地址 然后通过0 1来判断是主机给从机发还是从机给主机发 然后发送到被接收的一方来判断应答还是非应答 然后主机发送停止信号。

e方prom优点
1 每个单元可独立访问 读和写
2 数量少
3 写入前不用擦除

在这里插入图片描述
在这里插入图片描述
scl迟到早退

在这里插入图片描述
scl低电平 主机把数据依次放到SDA上 并释放SCL 从机在scl高电平期间读取数据位
在这里插入图片描述
在这里插入图片描述

flash存储器 (一闪 顾名思义写入速度读出速度快) 常用芯片为w25x16
1 容量大
2扇区地址 字节地址
3写入之前必须先擦除
4擦除是以扇区为单位的
大多数flash存储器与mcu的协议是spi协议进行传输的

flash流程 就是先把flash中的扇形区内的所有数据拷贝到mcu中然后在mcu的ram中改对应数据 然后再把数据传回flash中
(这里单片机ram空间要容纳flash扇区内的数据 才可以实现写入)

(文件系统是为了解决大容量数据的存储器的)
sd卡 安全数据存储卡

1读取sd卡的一个扇区
2写sd卡的一个扇区
3获取sd卡的状态
4给sd卡做一个配置用什么通信方式进行传递数据 成为sd卡初始化

这个整体成为时sd卡的驱动程序

sd卡的驱动
1.磁盘概念的推广
2.sd卡驱动的实现
1sd卡的硬件接口
三种方式
1 spi 串行外设接口 cs mosi miso sclk 这是spi通信协议
2 sd模型 一个是一线sd 一个是4线sd模式

SDIO控制器 不支持spi模式

SD/SDIO控制器与arm之间是通过AHB总线进行数据通信

sd卡 FATFS系统

文件系统是什么 就是负责管理和存储文件信息软件机构称为 文件管理系统 称文件系统
FAT/FATFS系统

在这里插入图片描述
ps端实现读写txt文本实验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python因果推断库5】使用 CausalPy 进行贝叶斯geolift 分析2

目录 NHEFS 数据 评估平衡 估计平均处理效应 结论 再次,InversePropensityWeighting 类封装了检查倾向性得分分布以及在不同加权方案下评估平均处理效应的功能。 result1.plot_ATE(method"raw", prop_draws10, ate_draws500); 这里我们在三个图板中绘…

DDS基本原理--FPGA学习笔记

DDS信号发生器原理: timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2024/09/04 15:20:30 // Design Name: hilary // Module Name: DDS_Module //module DDS_Module(Clk,Reset_n,Fword,Pword,Data);input Clk;input Reset_n;input [31:0]…

ROS2 2D相机基于AprilTag实现3D空间定位最简流程

文章目录 前言驱动安装下载安装方式一:方式二: 相机检测配置config文件编译、运行程序注意 内参标定标定板运行程序 apriltag空间定位标签打印下载安装可视化结果 前言 AprilTag是一种高性能的视觉标记系统,广泛应用于机器人导航、增强现实和…

ComfyUI中IC-Light节点的Detail Transfer节点参数测试

🎆背景 ic-light是一个能重绘画面光影的节点,但是在重绘的过程中,难免会将图像本身的细节进行重绘,尤其是在电商的场景中,文字和商品的细节很多时候会被重绘的乱七八糟。 针对这种情况,Comfyui-IC-Light节…

Java Web全栈开发技术指南

本文还有配套的精品资源,点击获取 简介:Java Web开发涉及前端JavaScript、后端Java Servlet、JSP等技术。本指南涵盖了JavaScript、JSP、Servlet、MVC模式、Web容器、HTML/CSS/JS、AJAX、RESTful API、JSON、前后端分离、数据库连接和操作以及安全性等…

Mysql8.0安装以及递归表达式使用

mysql安装 以centos7为例安装! 安装wget yum install wget -y 给CentOS添加rpm源,并且选择较新的源 官网地址 wget dev.mysql.com/get/mysql84-community-release-el7-1.noarch.rpm 下载安装的rpm源文件 yum install mysql84-community-release-el7-1.no…

国有企业如何高效开展虚假贸易排查?

▶虚假贸易排查最新动向 2023年10月,有关文件提出“十不准”,严禁央企开展各类虚假贸易业务。 2024年5月,明确表示将依法加大对排斥限制潜在投标人、规避招标、串通投标、以行贿手段谋取中标等违法犯罪行为的惩处力度。 2024年7月&#xf…

深智城基于超融合数据库MatrixOne的一站式交通大数据平台改造

在智慧交通应用中,数据处理需求极为复杂,涉及人、车辆、道路和环境等多个方面,产生了大量异构数据。交通管理人员需要对这些数据进行实时分析和决策,以应对各种交通事件。然而,在实际生产中会发现数据处理缺陷、管理复…

负载均衡 Ribbon 与 Fegin 远程调用原理

文章目录 一、什么是负载均衡二、Ribbon 负载均衡2.1 Ribbon 使用2.2 Ribbon 实现原理 (★)2.3 Ribbon 负载均衡算法 三、Feign 远程调用3.1 Feign 简述3.2 Feign 的集成3.3 Feign 实现原理 (★) 一、什么是负载均衡 《服务治理:Nacos 注册中心》 末尾提到了负载均…

信息安全发展阶段与形式

关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 0x01:信息安全的发展阶段 信息安全的发展阶段可以参照下面的思维导图: 0x02:我国的信息安全形式 2013 年,“棱镜门” 事件在全球持续发酵&#xf…

idea配置连接数据库的操作方法(适配不同版本)

文章目录 一、IDEA找不到database图标的解决方法二、链接数据库 一、IDEA找不到database图标的解决方法 首先很多小伙伴说我左右侧边栏都找了找不到数据库图标 解决办法: 第一种:选择 View --> Tool Windows --> Database 如果你的idea版本在这里…

ASP源码 发布站改制最终版 原来3000ok网通大站的源程序

ASP源码 新服发布站改制最终版 原来3000ok网通大站的源程序 这个是非常完整 兼容性很强的。 后台地址:http://你的域名/admin 账号:admin 密码:admin 会员发布地址:http://你的域名/gamevip 源码下载:https://downlo…

Splasthop 安全远程访问帮助企业对抗 Cobalt Strike 载荷网络攻击

一、背景 根据 FreeBuf(标题为:潜藏系统2个月未被发现,新型网络攻击瞄准中国高价值目标)和 The Hacker News(标题为:New Cyberattack Targets Chinese-Speaking Businesses with Cobalt Strike Payloads&a…

『功能项目』项目优化【21】

我们打开上一篇20主角身旁召唤/隐藏坐骑的项目, 本章要做的事情如以下几点: 1.优化资源包Resources下的层级分类 2.优化脚本包Scripts下的脚本分类 3.地形Terrain的优化(只让主角点击地面移动跳过其他石头山树等其他物体) 首…

Windows系统下的Spark环境配置

一:Spark的介绍 Apache Spark 是一个开源的分布式大数据处理引擎,它提供了一整套开发API,包括流计算和机器学习。Spark 支持批处理和流处理,其显著特点是能够在内存中进行迭代计算,从而加快数据处理速度。尽管 Spark …

Lua 代码编码规范

lua代码格式 vscode stylua 插件 配置文件stylua.toml column_width 240 line_endings “Unix” indent_type “Spaces” --使用空格 很重要,保证不同编辑器打开是一样的 indent_width 4 quote_style “AutoPreferDouble” --字符串引号样式双引号 call_paren…

0.3 学习Stm32经历过的磨难

文章目录 用库函数传参 能否按位或STM32库函数XXX_GetFlagStatus和XXX_GetITStatus的区别关于MDK导入文件后报错 Browse information of one files is not available 用库函数传参 能否按位或 答案是看清况,而不是一股脑的写!(血泪的经验啊&…

以太网通信之UDP

免责声明: 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济…

DML、DQL、DCL的基础介绍

1.DML、DQL、DCL 1.1DML-介绍 DML英文全称Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作 添加数据(INSERT)修改数据(UPDATE)删除数据(DEL…

github中action作用和讲解

1,简介 GitHub Actions 是 GitHub 的一个自动化功能,它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务,比如: 自动测试:每当代码被推送到仓库时,自动运行测试…