RK3568笔记分享之“如何挂载SPI FRAM铁电存储芯片”——飞凌嵌入式

2023-09-22 08:00:00

对于做快速存储采集数据类产品的用户来说,在处理突发掉电情况时需要保存现有数据并避免数据丢失,这种情况下有很多种解决方案,铁电存储器(FRAM) 就是个很好的选择。FRAM是一种具有快速写入速度的非易失性存储器,既可以进行非易失性数据存储,又可以像RAM一样操作。

本文将借助飞凌嵌入式OK3568-C开发板来为大家介绍一种采用FRAM的方案——使用SPI0挂载PB85RS2MC (FRAM) 芯片。本文所描述的驱动文件和应用文件,可联系飞凌嵌入式的技术支持获取。

图片

修改思路——

我们要添加一个SPI设备,需要进行如下操作:在设备树中添加描述→设备树描述中对应设备驱动→设备驱动添加到内核。

修改结果——

修改  OK3568-linux-source/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi 

修改如下:

图片

接下来笔者为大家介绍一下适配的过程。



 1 驱动程序

我们在menuconfig中搜索fm25、pb85等比较常用的FRAM字眼,发现并没有类似的驱动程序,这时就需要手写或者移植一个驱动程序。在搜遍各大网站之后找到了一个W25Q64的驱动,对比了一下PB85RS2MC的各种操作码以后,发现两者的操作码大差不差,因此就决定将W25Q64的驱动移植过来。根据PB85RS2MC芯片手册中叙述,各种操作码为:

图片

图片

因此,在驱动程序中宏定义以下操作码,以便在接下来的驱动程序中使用:

图片

首先要在驱动程序中进行初始化函数和退出函数,也就是spidev_init和spidev_exit,init函数里就是进行字符设备的初始化,注册等的操作,exit函数就是要把我们注册的东西在退出时都释放掉,再者就是驱动程序和设备树匹配,匹配是通过compatible属性值匹配的,这里我们一定要和设备树中的compatible属性值一致,否则会匹配不成功。驱动程序中.compatible值如下图所示。

图片

驱动和设备树匹配成功以后就要执行probe函数,这里probe函数执行了一些初始化和注册主次设备号的操作。我们可以通过是否打印spi_probe success!来判断驱动程序,是否和设备树匹配成功。

图片

从PB85RS2MC芯片手册中看读的条件,读取FRAM存储单元的数据,需要READ的操作码,任意24位地址输入到SI。第一个spi_transfer 结构体用于发送命令cmd 到SPI设备,在读取数据之前准备设备,第二个是发送地址到SPI设备,第三个是接收从设备读取的数据。

图片

这段代码实现了从 SPI设备中同步读取数据,并将数据复制到用户空间的功能。

图片

从PB85RS2MC芯片手册中看写的条件,WREN命令用于设置写使能锁存器。需要在写操作(WRITE命令) 之前使用WREN命令设置写使能锁存器,WRITE命令将数据写入 FRAM存储单元阵列。WRITE操作码、任意24位地址和8位写入数据输入到 SI。

下面这段代码实现了向SPI设备发送写入使能命令的功能。

这段代码实现了向SPI设备同步写入数据的功能。它先发送写入使能命令,然后发送地址信息和数据。

图片

下面这段代码向 SPI设备中同步写入数据的功能,将用户空间的数据复制到设备的发送缓冲区,并调用spidev_sync_write 函数将数据写入SPI 设备。

图片

 2 应用程序

向SPI设备写数据,调用lseek来改变写入数据的位置,这样就可以在整个SPI设备里写数据,如./writeframAPP /dev/pb85rs  0  forlinx 

0是要写入的地址,forlinx是要写入的内容)。

图片

从SPI设备读数据,调用lseek来改变读取数据的位置,这样就可以在整个SPI设备里读数据,如./readframAPP /dev/pb85rs  0 

0是要读取数据的地址)

图片

 3 实际测试

(1)首先将fram.ko, readframAPP, writefram APP拷贝到OK3568-C开发板的任意文件夹中。

图片

(2)用insmod加载fram.ko模块,出现spi_probe success!说明驱动和设备树匹配成功。

图片

(3)在/dev/下看有没有pb85rs设备。

图片

(4)使用./writeframAPP /dev/pb85rs  1500  forlinx 

向设备写数据,1500是地址,forlinx是要写入的内容。

图片

(5)使用./readframAPP /dev/pb85rs  1500 

1500是要读取数据的地址)

图片

 4 断电测试

断电一天后重新读取PB85RS2MC的数据,发现数据仍然存在。验证了PB85RS2MC铁电存储芯片的断电数据保留特性。

图片

至此,我们就完成了在OK3568-C开发板上添加一个新的SPI铁电存储芯片的操作!

更多推荐

Git操作

前期准备:1、安装2、身份认证gitconfig--globaluser.name"your_username"gitconfig--globaluser.emailyour_email@domain.comgitconfig--list查看所有配置常见的Git命令gitstatus.命令用于显示工作目录和暂存区的状态

React useRequest解读

源码结构:可以看到虽然是一个hooks(具有一定功能且具备状态的单一函数)但是各种文件功能分得也是很细的,方便抽离和复用useRequest.ts抽离的原则还是单一功能原则可以看出真正的hooks实现是在Implement里对于类型type的引入我们需要显示声明这是importtypeuseRequestImpleme

华清 Qt day5 9月21

QT+=coreguisqlnetwork/*****************************************************************/#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QWidget>#include

为何学linux及用处

目前企业使用的操作系统无非就是国产类的,windows和linux类。我们要提升自己的技能,需要学习这两款。我记得在大学时期,学习过windows以及linux,但当时觉得又不常用,就学的模棱两可。毕业之后,你会发现,其实这两种操作系统是很主流的。为什么学?下面就是一些工作中遇到的例子分享一下。我记得在企业中有次遇到数

【python第7课 实例,类】

文章目录一、实例1.1实例的变量1.2实例方法1.3构造方法1.4析构函数1.4预置实例属性:二,类1.1类变量1.2类方法1.3静态方法1.4类属性的增删改查一、实例1.1实例的变量使用示例classdog:def__init__(self,k,c,a):self.kinds=kself.color=cself.ag

【Hash表】两数之和-力扣 1 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

Docker笔记

安装卸载旧版本以及相关的依赖项sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine安装所需的软件包

leetcode分类刷题:二叉树(一、简单的层序遍历)

二叉树的深度优先遍历题目是让我有点晕,先把简单的层序遍历总结下吧:配合队列进行的层序遍历在逻辑思维上自然直观,不容易出错102.二叉树的层序遍历本题是二叉树的层序遍历模板:每次循环将一层节点出队,再将一层节点入队,也是所有可用层序遍历解二叉树题目的模板,只需要在模板里稍加改动即可解题fromtypingimportLi

Docker学习大纲

Docker是一个用于自动部署应用程序在轻量级容器中的平台。下面列出一些Docker的基础和必知概念。1.容器(Containers)容器是独立的应用程序运行环境。命令:dockerrunhello-world解析:该命令会从DockerHub下载一个叫做“hello-world”的镜像,并运行一个容器。2.镜像(Im

模型分类model

模型可以按照多个维度进行分类,以下是常见的几种模型分类方式:(1)根据应用领域分类:数学模型:基于数学原理和方程式来描述和解决问题,如微积分模型、线性代数模型等。物理模型:基于物理原理和规律来模拟和解释现象,如力学模型、电路模型等。经济模型:用于研究和预测经济系统的行为和变化,如供求模型、消费者行为模型等。生物模型:用

token登录的实现

token登录的实现我这种token只是简单的实现token,就是后端利用UUID生成简单随机码,利用随机码作为在Redis中的键,然后存储的用户信息作为值,在每次合理请求的时候对token的有效时间进行刷新(利用拦截器),以确保用户信息的有效性。为什么要用token使用令牌(Token)进行身份验证和授权是一种常见的

热文推荐