0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

PSRAM避坑指南-关键知识点讲解

嵌入式USB开发 来源:嵌入式USB开发 作者:嵌入式USB开发 2023-06-08 11:25 次阅读

本文转自公众号,欢迎关注

PSRAM避坑指南-关键知识点讲解 (qq.com)

一. 前言

前面的文章https://mp.weixin.qq.com/s/wC79XEXMAK-3SGX8JkrFKw,完整的介绍了PSRAM的相关内容,比如接口时序等,但是该文章内容较多,需要花费一些时间慢慢阅读。对于一些开发人员可能只是想大概了解一下PSRAM的关键信息点,或者说遇到问题了不知如何查起,想直接看看有没有一些常见的坑,来对照排查自己的问题,本文就是针对此而写。本文重点介绍PSRAM时序中几个关键的点,也是没有调试过PSRAM的开发人员可能会理解错误的点,以及时序的training算法等。每一个知识点都是从工程实践出发,都是真金白银的干货,基本上这一些信息就包括了可能遇到的大部分问题了,先看这篇文章,基本就能避免各种坑了。

注意以下以APS256XXN为例,其他芯片不排除略有差异,但是关键时序不会有差异都是一样的。

二.PSRAM关键知识点

2.1 总线宽度

默认是x8模式,可以通过寄存器修改为x16模式。

但是命令字和地址的发送始终是8位模式的,不过抓包可以看到此时高8位内容会和低8位的内容完全一样。

2.2 地址空间

对于x16模式,因为其单位是x16bits即2B,所以页内偏移地址即列地址,只需要CA[9:0]10位就足够,可以表示2048字节,而x8模式需要CA[10:0]11位表示2048字节,行地址则不管是x8还是x16都是RA[13:0]。

又由于是DDR模式,即双边沿都传输数据,所以数据的最小传输单位是一个CLK,一个CLK就对应两个总线宽度,对于x8模式是2B,对于x16模式就是4B,所以x8和x16模式最小的数据传输大小就是2B和4B,即列地址的bit0 CA[0]必须始终是0。

寄存器操作没有以上限制可以从任意寄存器开始,但是也要注意由于是DDR所以一个CLK,PSRAM会发出连续两个寄存器的值,CLK不停则连续的两个寄存器重复发出。

即对应下表

比如读MA0则依次返回MR0和MR1,CLK不停则MR0和MR1重复返回.

图片

2.3 命令地址的锁存

在CE#变为LOW之后,指令字节在CE#拉低后**第一****个** **CLK上升沿被锁存** **,** 注意这里是第一个上升边沿,如果CE#拉低后首先出现的是CLK的下降沿则这个下降沿会略过,也是没问题的。

按照时序要求,指令字节需要一直保持到第一个CLK上升沿之后的下降沿,然后保持一个保持时间tHD,但是实际测试可能只需要保持到第一个CLK上升沿并且保持保持时间tHD就就够了。实际应用还是建议完全按照手册要求来,一直保持到下降沿之后的保持时间,这样确保安全。这里还要注意CE#拉低到CLK拉高有一个最小的tCSP时间(2nS)要求,还有CLK上升沿之前数据的最小建立时间tSP。

如下所示

图片

地址在第三、第四、第五和第六CLK边沿(第二CLK上升沿、第二CLK下降沿、第三CLK上升边沿、第三CL下降沿)被锁存,以上边沿计数是从CE#拉低之后的CLK上升沿开始作为第一个CLK边沿计数。

如下是一个实际的应用中抓取到的波形,CE#拉低之后首先出现的是CLK的下降沿,这也是没问题的

图片

2.4 写数据-DM

注意DM和DQS是复用的,都是发送方驱动,但是DQS和DM的含义完全是不一样的。

DQS是读数据时PSRAM驱动,用于表示数据就绪,控制器这边根据DQS的边沿延迟一定时间进行数据采样。

而控制器发送数据,PSRAM并不是通过DM来采样的,DM表示的是数据是否MASK掉,PSRAM是通过CLK的边沿来采样的,CLK的边沿采样再来结合此时DM电平表示对应的字节是否要写入,如果DM为高则MASK掉指定字节不写入。

所以结合DM可以实现单字节的写入。

由于写数据时是CLK边沿采样,且DM和数据是同时变化的,要相对CLK的边沿有数据建立时间和保持时间分别是tDS,tDH。

如图所示

图片

2.5 读数据-DQS

注意读数据不一样不再通过CLK的边沿锁存数据,而是通过DQS来锁存数据了。

读数据时PSRAM同时更新DQS和总线信号,但是两者信号类型不一样,一个是时钟信号一个是总线数据信号,所以其物理上经过的路径就是不一样的,到达引脚时存在时间差,这个时间差就是tDQSQ,比如对于166MHz这个值就是最大不超过0.5nS,所以接收方需要在DQS的边沿延时该时间之后再采样才能保证采样到正确的数据。大部分读不到数据基本都是接收方这个时间设置不对,正常来说接收方会有一个PHY可以通过寄存器配置该时间,接收training也就是不断调整该时间然后确定一个合适的中间的值。

图片

图片

2.6 x8和x16的存储映射

不管是x8还是x16模式页的大小都是2K,但是x8模式和x16模式数据在页内的放置是不一样的。

X8模式按照字节序列写入页内的0~2047字节

X16模式则1字节写入页内的01022处,另外字节写入页内的10232047处。

所以要注意如果动态切换模式,则读出的数据内容就不一样了。

图片

2.7 读写数据的长度

普通模式读写数据最长由Burst Type决定,不能超过一个PAGE的大小;

写最小长度是一个CLK对应的长度,x8模式就是一个CLK两个边沿2字节,X16模式就是一个CLK两个边沿2x2=4字节;读没有最小长度限制。写数据可以结合DM来MASK写入单字节,而读数据没有MASK。读写数据的开始地址和长度要是2(x8)或者4(x16)字节对齐。

读写数据如果是使能了RXB且使用Linear Burst 读写模式则理论上读写最长字节数没有限制,但是要受限于tCEM即CE拉低的时间限制

图片

对于标准温度最长CE可以拉低4uS,如果算200MHz时钟,4uS有 800个CLK,不考虑命令地址,延迟等时间,800个CLK最多可以传输800x2x2个字节。

如果是扩展温度1uS,算200MHz时钟,4uS有200个CLK,不考虑命令地址,延迟等时间,200个CLK最多可以传输200x2x2个字节。

所以也不多,一般都是一次传输读写256个字节。

2.8 training

所谓的training就是针对读和写两个关键的时序参数来进行

读即DQS延迟tDQSQ时间之后再进行采样

写即数据在CLK边沿tDS之前建立,都是数据建立时间的概念。

根本原因是因为时钟信号和数据总线信号走的路径不一样,所以出现在引脚上的时刻也不一样(内部逻辑电路是时序逻辑电路都是在时钟的边沿进行数据更新的,理论上数据源是同步的)。

对于发送时,控制器的逻辑电路修改数据是在CLK边沿进行的,但是传播到引脚上时数据较CLK延后了,哪怕不延后数据也最多只能和时钟保持同步,不能满足数据建立时间要求,所以就要人为的在CLK的输出路径上加上延迟,以满足建立时间的要求。

对于接收,同样的道理,数据在出现在引脚上时已经滞后DQS了,这个时间就是tDQSQ,所以不能DQS边沿采样了,需要延迟一段时间采样,所以需要在DQS的输入路径上人为的添加延迟。

这两个延迟是由PHY去控制的,会提供寄存器接口给软件控制,软件就是控制这两个延迟时间来进行training。

所谓的training就是,不断尝试读写,通过判断读是否正确,来判断参数是否合适,得到一个范围的参数,取中间值。修改这两个时序如果能正确读写就认为这个参数可行,然后在所有可行的参数中取中间值,以获得较高的冗余度。读写是否正确一般通过读某个有固定值的寄存器来确定。

具体算法如下:

由于有两个参数,一个决定发送,一个决定接收,由于一次传输比如读寄存器,需要先发送命令地址,然后读,涉及到两个过程,任意一个过程错误都不能读到正确的数据。

所以两个参数都需要遍历尝试,实际就是两层嵌套遍历。

一般可以读内容是固定的寄存器,比如厂商ID对应的寄存器,假设CLK延迟参数可以配置为099,DQS延迟参数可配置为099

那么组合就有100*100次尝试,也可以增加递增间隔以减少尝试次数。

先固定CLK延迟,遍历DQS延迟,记录能读到正确数据的DQS延迟范围

再递增CLK延迟,遍历DQS延迟,记录能读到正确数据的DQS延迟范围

在所有能读到正确数据的DQS延迟范围中选择范围最宽的,取其范围的中间的DQS延迟值作为最终的DQS延迟值。

在所有能读到正确数据的CLK延迟中取中间的CLK延迟值作为最终的CLK延迟值。

三. 实测波形

如下地址有使用逻辑分析抓包的实际PSRAM读写寄存器和数据的波形记录,可以参考。

注意这些记录波形是实际测试过程中抓取的,不是最终的最好状态,不能作为标准波形参考,标准波形需要参考手册。

链接:https://pan.baidu.com/s/1HHGEvwz_NHT_tra4ONe-RQ?pwd=45b9

提取码:45b9

四. 总结

以上分享了PSRAM接口一些关键的知识点,大部分是容易理解错误,且导致问题的点,基本上理解这些点就能解决大部分问题了,作为入门参考也可以先看这篇,先有个大概了解。作为遇到问题不知如何解决时也可以参考这篇文章,基本上能解决大部分问题。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4983

    文章

    18286

    浏览量

    288492
  • 接口
    +关注

    关注

    33

    文章

    7640

    浏览量

    148507
  • PSRAM
    +关注

    关注

    0

    文章

    32

    浏览量

    13159
  • 时序
    +关注

    关注

    5

    文章

    357

    浏览量

    36959
收藏 人收藏

    评论

    相关推荐

    运放知识点

    `运放知识点`
    发表于 08-20 20:58

    嵌入式C/单片机C/标准C知识点

    : 9条基本语句和32个关键字  知识点6:函数组成和函数关键两句话  知识点7:数组组成和数组典型应用  知识点8:指针(指针组成、指针含
    发表于 10-24 14:42

    工程师总结了一些C语言的知识点

    类型(函数、数组、指针、结构体等类型)知识点4:常用的运算符和关系表达式,例如:|||^~等知识点5: 9条基本语句和32个关键知识点6:函数组成和函数
    发表于 07-25 10:23

    【信盈达】C语言知识点的总结

    : | || ^ ~等 知识点5: 9条基本语句和32个关键知识点6:函数组成和函数关键两句话知识点7:数组组成和数组典型应用
    发表于 10-08 14:41

    19212~19221工作中遇到的知识点讲解

    19212~19221工作中遇到的迷的知识点
    发表于 06-02 13:23

    【视频课程】MATLAB知识点讲解1

    大家下午好!今天给大家带来赵云老师的MATLAB知识点讲解视频,本次视频为第一期,全部免费公开。我们会持续进行更新,有问题可以留言一同交流讨论。
    发表于 04-22 15:33

    电机与拖动知识点及其试题

    电机与拖动知识点分析一、基本知识与基础知识知识点常考题目二、直流电机一、基本知识与基础知识
    发表于 06-29 07:10

    独立看门狗知识点

    独立看门狗知识点关键字寄存器IWDG_KR:a、写入0xCCCC,开始启用独立看门狗;此时计数器开始...
    发表于 08-02 08:13

    STM32基础知识入门指南

    。好了下面就开始今天的踩吧!!!关于使用工程模板的问题这里其实稍微细心的人就会发现,在视屏讲解中(具体是《第
    发表于 08-03 07:30

    STM32外部中断知识点概述

    STM32外部中断概述知识点(1)知识点(2)知识点(3)中断服务函数外部中断常用库函数外部中断的一般配置步骤知识点(1)STM32的每个IO都可以作为外部中断输入。STM32的中断控
    发表于 08-16 07:43

    学习STM32H7的必备知识点电源,复位和时钟系统

    第14章 STM32H7的电源,复位和时钟系统本章教程继续为大家讲解学习STM32H7的必备知识点电源,复位和时钟系统。掌握这三方面的知识点对后面的学习大有裨益。目录第14章 STM32H7的电源,复位和时钟系统1...
    发表于 08-18 07:46

    数控电源的知识点讲解

    话说最近做了一个数控电源首先原理图来一个 看看原理既然讲到数控电源,难免讲解一下数控电源的知识点,升降压 MOS管,我所做的是BUCK降压电路 一、Buck电路原理图    Buck电路,又称
    发表于 10-28 07:51

    分享一些嵌入式系统编程中内存操作相关的指南

    在嵌入式系统的编程中,内存操作是我们常用到的,但往往也是易错的地方,怎么避免呢,今天给大家分享一些相关的指南。数据指针...
    发表于 12-17 07:18

    STM32学习中会遇见的C语言基础知识点讲解

    C语言是单片机开发中的必备基础知识,这里就列举部分STM32学习中会遇见的C 语言基础知识点。01位操作下面我们先讲解几种位操作符,然...
    发表于 02-28 07:11

    PADS关键知识点解答

    本文档内容介绍了基于PADS关键知识点解答,供参考
    发表于 03-02 14:31 11次下载