自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (6)
  • 问答 (3)
  • 收藏
  • 关注

原创 7-1_MSPI_NANDFLASH SDK例程详解

本文中主要讲解MSPI nandflash初始化流程。

2023-09-21 10:39:53 413

原创 7_Apollo4BlueLite MSPI

Apollo4BlueLite芯片的MSPI(Multi-Serial Peripheral Interface)总线是一种高性能的串行通信接口,用于在芯片内部连接各种外设设备,例如存储器、传感器和其他外部模块。与常规SPI(Serial Peripheral Interface)总线相比,MSPI总线具有以下几个异同点:(1)数据传输速度:MSPI总线支持更高的数据传输速率,因为它使用了高速时钟和多通道传输机制。相比之下,常规SPI总线的数据传输速度较低。

2023-08-17 09:38:49 459

原创 6-1_ADC示例分析

本篇基于Apollo4BlueLite 4.3.3版本的SDK中adc_measure.c示例的代码进行分析。

2023-08-15 15:20:49 230

原创 局部变量数组和malloc申请的指针使用区别和注意事项

大小和灵活性:函数内定义的局部变量的大数组大小在编译时就确定,而通过malloc申请的指针可以在运行时动态地调整大小,提供了更大的灵活性。数组越界:对于通过malloc申请的指针,特别是用于模拟数组的使用时,需要特别注意对指针进行正确的偏移和访问,避免数组越界访问的问题。栈空间消耗:函数内定义的大数组会在函数栈帧中占用一定的栈空间,而通过malloc申请的指针不会增加栈空间的消耗。内存位置:函数内定义的局部变量的大数组通常在栈上分配内存,而通过malloc申请的指针分配的内存位于堆上。

2023-08-11 15:25:31 446

原创 什么是NVME

NVM Express(NVMe),或称非易失性内存主机控制器接口规范(Non-Volatile Memory express),,是一个逻辑设备接口规范。他是与AHCI类似的、基于设备逻辑接口的总线传输协议规范(相当于通讯协议中的应用层),用于访问通过(PCIe)总线附加的非易失性内存介质,虽然理论上不一定要求 PCIe 总线协议。此规范目的在于充分利用PCI-E通道的低延时以及并行性,还有当代处理器、平台与应用的并行性,在可控制的存储成本下,极大的提升固态硬盘的读写性能,降低由于。

2023-08-10 09:51:23 1057

原创 6_Apollo4BlueLite_ADC

Apollo4 Blue Lite SoC集成了一个支持分辨率为8bit/10bit/12bit的ADC模块,可以用来检测内部和外度的电压。同时提供了8个可单独配置的slot用来管理不同采样输入的转换请求。这些请求结果会被存储到深度为16的FIFO中。固件可以利用各种中断通知来确定何时从FIFO或由DMA写入的缓冲区收集采样数据。ADC模块在自动管理其电源状态和时钟源方面非常高效。ADC使用HFRC时钟源运行。如果ADC是唯一请求基于HFRC的时钟的块,那么HFRC将自动启动。

2023-08-04 09:50:42 211

原创 5_Apollo4BlueLite Reset Generator

复位发生器(Reset Generator)是一种在嵌入式设备中常见的电路模块,用于生成复位信号并控制设备的初始化和复位过程。它主要实现以下功能:(1)生成复位信号:复位发生器会在设备上电或者外部触发条件满足时生成复位信号。该信号用于将设备的所有部分置于初始状态,并清除存储器、寄存器和其他内部状态,以确保设备的可靠启动。(2)控制初始化过程:复位发生器可以控制设备的初始化过程。在复位信号生成后,它会对设备的个模块和外设必要的初始化操作,设置默认状态、配置时和中断等。

2023-08-01 10:54:36 295

原创 4_Apollo4BlueLite电源管理

Apollo4BlueLite支持以下4种功耗模式:▪ Active▪ Sleep高性能模式不是arm定义的标准模式,从arm的角度来看,该模式和arm定义的active模式比较类似。Apollo4BlueLite定义的High Performance Mode是基于ambiq的turbo SPOT技术,实现了高频率,高性能的工作模式。在该模式下M4核和内存可以在较高的时钟频率下工作,并且ARM的时钟(FCLK, HCLK)也在较高的时钟频率下工作,使处理器保持高性能并且外设传输速率也保持为高。

2023-07-31 20:51:11 534

原创 gitignore配置只追踪特定后缀文件

本地工程中由于一般只修改.c和.h文件,有时为了调试,修改代码重新编译后会产生大量的中间文件,这样导致在查看代码差异时有大量不相关的文件都会被显示出来。3. 按照以上内容更新.gitignore文件,然后使用常规的git add流程提交即可。4. 如果发生gitignore不生效,请参考该链接中的处理方法。通过配置.gitignore文件即可,详细写法参考以下。

2023-07-26 18:19:39 498

原创 gitignore修改不生效

gitignore中已经标明忽略的文件目录下的文件,当我想git push的时候还会出现在push的目录中,原因是因为在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,这时候我们就应该先把本地缓存删除,然后再进行git的push,这样就不会出现忽略的文件了。

2023-07-26 18:17:42 415

原创 3_Apollo4BlueLite的内存映射

该区域用于连接私有外设总线的地址空间。这部分地址空间是为未来处理器功能扩展而保留的,并且由厂商自定义。该区域是用于存储程序指令的内部非易失性存储器(NVM)。这是存储代码的区域,通常位于 Flash 存储器中。该区域是用于外部设备的存储器地址空间。这些设备可能是与芯片连接的外部硬件,例如外部设备控制器或扩展模块。它位于芯片外部,用于存储变量、堆栈和额外的数据。该区域用于映射芯片内部的外设寄存器。通过访问这些地址,可以读写外设的控制和状态信息。这是保留的地址范围,未分配给具体的功能。

2023-07-26 18:05:27 215

原创 2_Apollo4BlueLite中断控制器NVIC

Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核,并集成了 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)作为其中断控制器。NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器,它具有以下基本特征和功能:(1)中断优先级和优先级分组:NVIC 支持配置和管理中断的优先级,可以根据需求将不同的中断分配到不同的优先级组中。这样可以确保高优先级的中断得到更及时的响应。

2023-07-26 16:30:37 1168

原创 1_Apollo4BlueLite芯片简介

Apollo4BlueLite是美国芯片制造公司Ambiq推出的一款超低功耗蓝牙SoC芯片。下面是关于Apollo4BlueLite芯片的概况介绍:(1)高性能:Apollo4BlueLite芯片具有较高的处理能力和性能表现。它采用了Arm Cortex-M4F处理器,主频可达192MHz,搭配高性能的DSP指令集和浮点处理单元,可实现各类复杂计算和信号处理任务。(2)超低功耗:Apollo4BlueLite芯片是针对低功耗应用场景而设计的。

2023-07-25 22:20:01 1933

原创 WSF操作系统基本概念

该操作系统是为物联网应用而涉及的,主要用于控制和管理无线传感器设备,实现对传感器的数据采集、传输、处理和控制等功能。WSF操作系统是专门为无线传感器和执行器网络应用设计的,它提供了一些特殊的功能,例如支持无线传感器网络协议、低功耗设备管理、网络安全、远程管理等,同时还提供了一些应用层协议和API,方便开发人员快速构建无线传感器网络应用。(5)开放共享:WSF操作系统是开源的,任何人都可以获取源代码、文档、工具等,并且可以自由地使用、修改、分享,促进了WSF操作系统的快速发展和创新。事件、消息传递和处理。

2023-03-30 09:53:24 885

原创 蓝牙协议下载

学习蓝牙的第一件事情,下载蓝牙协议,蓝牙协议是类似词典的资料,不建议直接翻看,但是有相关问题时可以参阅。按照上图中找到协议下载界面,当前蓝牙最新的协议是5.2,所以直接搜索“5.2”如上图所示,直接点击下载即可,这样就可以得到一份最新版本的蓝牙协议。

2023-03-29 17:06:26 523

原创 ZYNQ7000 FSBL加载启动代码详解

参考资料:https://blog.csdn.net/zhaoxinfan/article/details/54958641https://blog.csdn.net/asmartkiller/article/details/84072643https://blog.csdn.net/qq_40155300/article/details/89001808SDK版本:2017.4写在前面:该文档不足以使你清楚FSBL启动的寄存器级的操作细节,但可以让你看明白整个ZYNQ700

2021-07-14 17:51:52 4432 3

原创 Xilinx通过JTAG调试固化运行的程序

1. 问题发现在用户现场非在线调试的情况下,能否通过Xilinx JTAG调试监控正在运行的程序2. XSCT命令行套件XSCT(Xilinx Software Command-Line Tool),具体请参照UG1208; Jtag-uart 是比较偏门的一个应用,就是在没有外接uart的情况下,通过jtag口来获取处理器的stdio数据,实现jtag-uart的交互3. 实验环境(1)开发工具版本:Xilinx SDK 2017.4(2)开发硬件平台:microbla..

2021-04-22 14:16:11 2402

原创 ZYNQ7000固化流程

ZYNQ7000固化流程生成BOOT.bin文件(1)在SDK开发环境下,将FSBL.elf文件,FPGA.bit文件和FW.elf文件按次序添加并打包成BOOT.bin文件2. BOOT.bin文件固化(1)在xilinx SDK环境中通过JTAG进行固化,首先通过选项Xilinx->Program Flash进入到烧写界面(2)配置并完成固化3. 注意事项(仔细阅读)(1)生成BOOT.bin时使用的是FSBL....

2021-04-22 09:40:58 2501 2

原创 Xilinx SDK创建并使用静态库

1. 首先基于.hdf文件创建一个helloworld工程备用2. 创建一个库工程(1)File->New->Project(2)项目名自定义,我们这里创建库类型为静态库,OS平台standalone,处理器为microblaze(3)在库项目中添加.c和.h文件(4)文件添加完成后会自动编译生成静态库文件3. 添加静态库文件到helloworld工程中(1)在helloworld工程中新建...

2021-04-12 17:47:41 2221 3

原创 关于程序可以直接在Norflash中运行的理解

前言学习Flash过程中,了解到了现在市场上两种主要的非易失闪存技术,一种以Norflash为代表,而另一种就是nandFlash。经常听到程序代码可在NOR Flash上运行,而不能在NAND Flash上运行的说法,查阅资料一般都解释为NOR Flash支持XIP(eXecute In Place),即芯片内执行,这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM。关于这个说法容易给人造成误解,因为CPU执行代码分为取指、译码、执行三个步骤,所以真正运行代码的还是CPU,

2021-04-09 11:48:26 2663

原创 FreeRTOS vTaskStartScheduler流程

1. FreeRTOS是通过vTaskStartScheduler()函数来启动运行的。(1)在该流程中首先创建了idleTask(2)创建TimerTask(3)关中断portDISABLE_INTERRUPTS();void vTaskStartScheduler( void ){BaseType_t xReturn; /* Add the idle task at the lowest priority. */ #if( configSUPPORT_STATIC_ALLOCATION

2021-03-29 14:52:33 2145

原创 Sanitize Device

1. 基本概念Sanitize Device属于ATA指令中的一个功能特性。通过FEATURE字段值来识别当前指令属于Sanitize Device特性中具体哪个子命令Table 81 — Sanitize Device FEATURE field values Feature Value Command 0000h SANITIZE STATUS EXT (see 7.36.7) 0001h..00.

2021-03-25 20:03:46 1040 1

原创 vim配置

Vim 启动时,会根据配置文件(.vimrc)来设置 Vim,因此我们可以通过此文件来定制适合自己的 Vim。Vim 配置文件分为系统配置文件和用户配置文件:系统配置文件位于 Vim 的安装目录(默认路径为 /etc/.vimrc);用户配置文件位于主目录 ~/.vimrc,即通过执行 vim ~/.vimrc 命令即可对此配置文件进行合理修改。通常情况下,Vim 用户配置文件需要自己手动创建。注意,Vim 用户配置文件比系统配置文件的优先级高,换句话说,Vim 启动时,会优先读取 Vim 用户

2021-03-24 18:33:45 140 1

原创 git提交中文乱码问题解决

1. 问题现象Git无法正常显示中文2. 问题解决首先,先说下配置git支持中文。执行命令:git config –-global core.quotepath false好了,这样就可以支持中文了,之前显示的乱码可以显示了。...

2021-02-25 17:10:15 1011

原创 Xilinx SDK memory窗口内存数据导出

1.xilinx SDK内存数据导出可以使用XSCT/XSDB工具导出,如下图:(在线运行后会探出此窗口)2. 操作步骤(1)connect 【建立连接】(2)target 【查看可连接目标】(3)target 2 【连接到目标2】(4)cd 文件存储路径 【进入到指定目录,生成文件会保存在该目录下,注意路径分隔符用左斜杠】(5)mrd -bin -file filename.bin startaddr length 【通过该指令拷贝数...

2021-02-25 17:07:21 6217 1

原创 git如何提交空目录

1. 问题描述项目工程中新建了一个空目录,通过git status和git diff都无法查看到修改记录。2. 问题原因git和 svn不同,仅仅跟踪文件的变动,不跟踪目录。所以,一个空目录,如果里面没有文件,即便git add这个目录,另外在别处check out的时候,是没有这个空目录的。3. 问题解决有时候,确实需要在代码仓库中保留某个空目录。比如测试时需要用到的空目录。通过执行下面指令可以实现对空目录的追踪:find . -type d -empty...

2021-02-24 15:50:47 5139 1

原创 SATA接口的硬件基础知识

1. SATA接口常见的SATA接口的SSD盘如下图所示,包括电源接口和数据接口。​​​​​​​1.1SATA数据接口定义【问题】已知SATA接口是差分串行传输数据的,那么发送数据线和接收数据线是独立的,为什么不支持同时读写的功能呢?​​​​​​​1.2电源接口定义三路电源是为了兼容机械硬盘(HDD),12V是给主轴马达磁头臂供电的,3.3V很多机械盘也用不上,5V是给电路供电的。现在常见的固态硬盘一般使用的都是+5V...

2021-02-23 21:06:57 10575

原创 ZYNQ:从工程创建到固化

1. 工程创建1.1 FPGA(bit和hdf)首先需要由FPGA提供PL相应的bit文件和hdf文件。1.2 Helloworld工程创建打开XilinxSDK通过File->Switch Workspace->Other切换到新的工程目录中2. 基于FPGA提供的hdf文件创建一个helloworld工程首先根据FPGA提供的hdf文件生成新的硬件平台以及bsp。这里我们直接创建最简单的hellowor...

2021-01-23 17:42:50 1065

原创 SSD异常掉电数据是否会损坏

1. 问题发现基于X1 Master系统在整机下电时,对于SSD固态硬盘实际属于异常掉电,引发一些思考【思考】Master系统下电前会根据上位机发送的预关机指令,更新并保存文件系统信息到mram中,完成后对master系统下电但是这时对于SSD其实相当于一次SPOR(系统突然下电),那么对于SSD是否会发生缓存中的用户数据未及时保存或者映射表未能刷入闪存的情况2. SSD正常掉电应该如何执行?首先想到对于固态硬盘应该一定有类似于flush之类的指令来通知SSD把所有缓存落盘和映.

2020-11-04 13:59:16 2331

原创 Nand Flash入门基本概念

1. Nand Flash基本概念NAND Flash是一种非易失性随机访问存储介质,基于浮栅(Floating Gate)晶体管设计,通过浮栅来锁存电荷,电荷被储存在浮栅中,它们在无电源供应的情况下仍然可以保持。2. Nand Flash的加工过程NAND Flash是从原始的硅材料加工出来的,硅材料被加工成晶圆(Wafer),一片晶圆上可以做出几百颗NAND FLASH芯片。芯片未封装前的晶粒成为Die,它是从Wafer上用激光切割而成的小片,每个Die就是一个...

2020-10-30 15:17:11 12108

转载 嵌入式开发路线图

1. Nand Flash层次结构NAND Flash的容量结构从大到小可以分为Device、Target、LUN、Plane、Block、Page、Cell。一个Device有若干个Die(或者叫LUN),每个Die有若干个Plane,每个Plane有若干个Block,每个Block有若干个Page,每个Page对应着一个Wordline。Die/LUN是接收和执行FLASH命令的基本单元。不同的LUN可以同时接收和执行不同的命令。但在一个LUN当中,一次只能执行一个命令,不能对其中的某个

2020-10-30 15:00:06 541

原创 Trim除了提升固态硬盘性能,为什么还能提升使用寿命?

1.闪存读写和擦除单位不同:闪存的最小读取和写入单位为Page,典型的Page大小为4KB。而擦除的最小单位是Block,SSD块的典型大小是512KB或1MB,即128 Page或256 Page。SSD有一个重要特性,是颗粒一旦被写入,就不能覆盖写了,这点和基于磁介质的机械盘不同。为了能重复写,SSD需要对已经写入过的颗粒进行擦除操作(erase)2. 先擦后写带来的问题(1)电脑上的Windows操作系统在删除硬盘上文件时,操作系统仅仅是在文件分配表中做一个标记,并不会对存..

2020-10-28 09:58:57 1273

原创 进程和线程的区别(举例说明)

1. 一句话描述进程是资源分配的最小单位,线程是CPU调度的最小单位2. 举例说明(假设进程=火车,线程=车厢)(1)包含关系如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线程共同完成的,线程是进程的一部分,所以线程也被称为轻量级进程。【一辆火车可以有多个车厢,每节车厢都是火车的一部分】(2)资源开销每个进程都有独立的代码和数据空间,程序之间切换会产生较大的开销;线程可以看作轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数..

2020-10-19 15:44:22 3972 1

原创 BSS段为什么一定要初始化

1. 什么是BSS段?一个程序本质上都是由bss段、data段、text段三个组成的。BSS段通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。2. BSS段的特点bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0。如果把它们出现在程序下载文件中,会增加程序下载文件的大小。实际应用中,通常只需要把bss段的起始地址和结束地址保存起来,而不需要将程序下载文件中出现bss段(一堆0)将来真正运行程序的时候,再根据这两个数据进行bss段的初始化就行了.

2020-09-15 10:44:07 1251

原创 ELF文件的解析和加载

1. elf文件基本概念elf(Executable and Linkable Format)文件是一种目标文件格式,是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件。2. elf文件结构组成ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF.

2020-09-11 17:51:49 1664 1

原创 一图明白AHCI,SATA是接口还是协议

该图来源于《Linux开源存储全栈详解:从Ceph到容器存储》- 2.3 存储接口协议的演变物理接口:从物理形态上确定各种不同的接口(引脚形式等完全不同)传输协议:以SATA为例,可以了解一下SATA本身架构规定了四层协议实现传输功能,分别是物理层,链接层,传输层,应用层。上层协议:也就是我们常说的串行ATA高级主控接口,主要是在系统内存和串行ATA设备之间扮演一种接口的角色,而且它在不同的操作系统和硬件中是通用的。...

2020-09-04 11:35:19 7256 1

原创 SATA是什么?

一、基本概念 SATA(baiSerial Advanced Technology Attachment,串行高级技术附件)是一种基于行业标du准的串行硬件驱动器接口,是由Intel、zhiIBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。 SATA是总线接口,包含了物理接口、电气规范、传输协议等一系列标准,专用的逻辑层接口规范是AHCI。二、SATA特性1. 以串行方式传输数据,一次只传输1位数据。这样的结构在较少位宽下可以使用较高的工作频率来提...

2020-09-01 17:14:20 9415 2

原创 初识hello world

如果你也看过很多大师的著作,应该都会发现几乎所有的C语言入门都用到了“Hello World”这样一个简单的程序。从我自身而言,我似乎很早就明白hello world这个程序的一些原理机制,但随着进一步的知识积累发掘,才慢慢发现简单的事物背后往往蕴含着复杂的原理。如下是一段C语言编写的Hello World的代码:#include <stdio.h> int main(){ /* 打印Hello World字样 */ printf("Hello, World!

2020-07-13 09:31:40 170

原创 freeRTOS中中断无反应问题

在裸机下跑PS的timer计时器中断,PL到PS的按键中断均工作正常,但是将代码移植到freertos工程时,中断不执行,跟中断无关联的task可以运行。产生这个问题的主要原因,在于PS部分只有一个中断控制器,因此我们只能申请一个中断控制器设备,如果申请了两个,那么不工作是必然的。我们在裸机下申请了一个:XScuGicINST ,另外一个被FreeRTOS申请了,在如下图,这样就“冲突”了,所以...

2019-12-11 17:25:32 3074 2

原创 linux内核源码下载地址

官网链接:https://www.kernel.org/HTTP https://www.kernel.org/pub/GIT https://git.kernel.org/官网下载经常速度太慢,无法下载,提供另一个链接:http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/可以根据需要,下载对应内...

2019-11-29 08:55:08 204

FSBL_log.txt

FSBL_log.txt

2021-07-14

SATA相关文档合集.rar

本文档包括SATA3.0协议,AHCI协议,ATA协议,synopsys厂商HSATA controller手册,TI controller USER GUIDE,SATA技术相关的文档,以及学习sata过程中的笔记等。对于SATA入门和进阶非常有帮助,学习是积累的过程。

2019-09-24

serial-ata-ahci-spec-rev1_3.pdf

非常实用的SATA AHCI协议。非常有参考价值,详细地描述了寄存器内容及基本操作流程

2018-08-16

A comprehensive Serial ATA (SATA) course

Course Outline Why SATA Was Developed ATA Command Overview SATA Overview SATA FIS Details Link Layer Details Error Detection and Handling Physical Layer Details Native Command Queuing Port Multipliers and Port Selectors

2018-08-03

SATA学习笔记

SATA学习笔记,包含了SATA基本概念,结构框架,传输机制等内容。

2018-07-13

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除