目录

DDR4的工作原理以及寻址方式

DDR4是什么?

DDR4硬件详细设计

DDR的硬件设计步骤

DDR内存颗粒选型

DDR的硬件电路搭建

特性与电气参数

DDR4有哪些特性?

DDR4有哪些关键信号?

除了眼图,DDR4还看那些电气参数?


DDR4的工作原理以及寻址方式

DDR4是什么?

DDR4全称,DDR4-DRAM,与其他DDRDRAM一样,是当前电子系统架构中使用最为广泛的的RAM存储器。
这句话可以分解出3个关键字:存储器、DRAM、DDR4。

先说存储器

说到存储,顾名思义,它是个动词,以生活为例,假如有个酸奶,你不想吃的时候,将酸奶存到某冰箱、某层、某个位置,当你想吃的时候,在某冰箱、某曾、某个位置中取出该酸奶。
这个过程,我们称为存储,结合生活,我们可以看到存储要有3个关键动作:

  1.  酸奶放哪了,你得知道。如果不知道放哪了,酸奶就跟丢了一样。这个过程,映射到电子领域中,称为“寻址”。
    
  2.  存储酸奶、取出酸奶。你需要先走到某冰箱跟前,拉开某层抽屉,在具体某个位置,拿出酸奶,这个过程,映射到电子领域中,称为“读/写”
    
  3.  酸奶放到那个位置,在需要的时候,得还能吃。这个过程,映射到电子领域中,称为“数据保存”。
    

所以,概括一下,存储器就是“可以寻址”、“能读写数据”、“能保存数据”的一种电子器件。

我们再说说DRAM
DRAM全称Dynamic Random Access Memory,翻译过来为动态随机读取存储器。所谓随机,指的是“想存哪个位置,就存哪个位置”,听起来很自由,很灵活。所谓动态,指的是保存数据过程中,需要不断的补充电量,听起来很耗电,很费劲,为啥我们还要用DRAM结构?因为在电路结构上,DRAM结构比SRAM简单很多。

最后说说DDR
我们聊到DDR,大家都会联想到存储器,但是实际上DDR并不指代存储器,DDR实际是一种技术,全称Double Data Rate,翻译过来为双倍速率,只是这都技术广泛使用在DRAM上,所以人们习惯将DDR代指为存储器,所以宝宝们在后续的硬件设计过程中,在其他总线上看到DDR,请不要惊慌,因为你看到的DDR可能不一定和存储有关。那双倍速率指的是什么?我们可以简要说下,初代存储器在读写数据时,每次都在时钟信号从低变高或从高变低时,采样数据,在1个时钟周期,只能采样1个数。后续聪明的人类在时钟从低到高时,采样一个数据,时钟从高到低时,再采样1个数据,一个时钟周期,可以采样2个数据。所以读写速度比以前快了2倍。这种技术手段,就指的是DDR。

所以,概括下:DDR4-DRAM是第四代支持双数据读取,支持随机位置存取的静态存储器.

DDR4-DRAM的工作原理

其引脚按照功能可以分为7类:前3类为电源、地、配置。

后4类为:控制信号、时钟信号、地址信号、数据信号

电源、地、配置信号的功能很简单,在此不赘述。控制信号主要是用来完成DDR4与DDR4 Controller之间的状态切换。

DDR4中最重要的信号就是地址信号和数据信号。

如上DDR4芯片有20根地址线(17根Address、2根BA、1根BG),16根数据线。在搞清楚这些信号线的作用以及地址信号为何还有复用功能之前,我们先抛出1个问题。假如我们用20根地址线,16根数据线,设计一款DDR,我们能设计出的DDR寻址容量有多大?

按照课本中学到的最简单的单线8421编码寻址的方式,我们知道20根地址线(连读写控制信号都不考虑了)的寻址空间为2^20,16根数据线可以1次传输16位数据,我们能很容易计算出,如果按照单线8421编码寻址方式,DDR芯片的最大存储容量为:

Size(max)=(2^20)x16=1048576x16=16777216bit=2097152B=2048KB=2MB。

但是事实上,该DDR最大容量可以做到1GB,比传统的单线编码寻址容量大了整整512倍,它是如何做到的呢?
答案很简单,分时复用

我们把DDR存储空间可以设计成如下样式:
首先将存储空间分成两个大块,分别为BANK GROUP0和BANK GROUP1,再用1根地址线(还剩19根),命名为BG,进行编码
若BG拉高选择BANK GROUP0,拉低选择BANK GROUP1。(当然你也可以划分成4个大块,用2根线进行编码)

再将1个BANK GROUP区域分成4个BANK小区域,分别命名为BANK0、BANK1、BANK2、BANK3。然后我们挑出2根地址线(还剩余17根)命名为BA0和BA1,为4个小BANK进行地址编码。

此时,我们将DDR内存颗粒划分成了2个BANK GROUP,每个BANK GROUP又分成了4个BANK,共8个BANK区域,分配了3根地址线,分别命名为BG0,BA0,BA1。然后我们还剩余17根信号线,每个BANK又该怎么设计呢?这时候,就要用到分时复用的设计理念了。

剩下的17根线,第一次用来表示行地址,第二次用来表示列地址。

原本传输1次地址,就传输1次数据,寻址范围最多16KB(不要读写信号,(2^17/1024)/8=16KB)。
现在修改为传输2次地址,在传输1次数据,寻址范围最多被扩展为2GB(2^17 * 2 ^17/2 ^30)/8=2GB)。虽然数据传输速度降低了一半,但是存储空间被扩展了很多倍。这就是改善空间。

所以,剩下的17根地址线,留1根用来表示传输地址是否为行地址。

在第1次传输时,行地址选择使能,剩下16根地址线,可以表示行地址范围,可以轻松算出行地址范围为2^16=65536个=64K个
**在第2次传输时,行地址选择禁用,剩下16根地址线,留10根列地址线表示列地址范围,可以轻松表示的列地址范围为2^10=1024个=1K个,**剩下6根用来表示读写状态/刷新状态/行使能、等等复用功能。

这样,我们可以把1个BANK划分成67108864个=64M个地址编号。如下所示:

在每个地址空间中,我们16根数据线全部用起来,一次存储16位数据

所以1个BANK可以分成65536行,每行1024列,每个存储单元16bit。
每行可以存储1024x16bit=2048B=2KB。每行的存储的容量,称为Page Size。
单个BANK共65536行,所以每个BANK存储容量为65536x2KB=128MB。
单个BANK GROUP共4个BANK,每个BANK GROUP存储容量为512MB。
单个DDR4芯片有2个BANK GROUP,故单个DDR4芯片的存储容量为1024MB=1GB。

至此,20根地址线和16根数据线全部分配完成,我们用正向设计的思维方式,为大家讲解了DDR4的存储原理以及接口定义和寻址方式。

DDR4硬件详细设计

DDR的硬件设计步骤

作为硬件工程师,我们通常收到需求是:该产品内存配置为DDR4,容量8Gb(1GB=8Gb)。
而我们通常需要把这个“简陋”的需求,转化为具体的电路,该如何去实现呢?
其实,很简单。DDR4的硬件设计过程可以总结为:为某个平台搭配一颗DDR内存颗粒,并保证平台与DDR内存颗粒均能正常工作
所以可以分为2部分,如何为平台选型1颗DDR内存颗粒?如何保证DDR相关电路能正常工作?

DDR内存颗粒选型

目前很多芯片都会把CPU与外围控制电路(例如:FLASH控制电路,DDR控制电路,USB控制电路)集成到1颗芯片中,像高通MDM8909,类似这样的芯片,我们称为“平台芯片”。平台芯片中DDR控制电路,我们称为“DDR Controller”,翻译过来为:DDR控制器。
为DDR控制器搭配它能控制的DDR内存颗粒,你就必须先了解下:DDR控制器需要什么样的内存颗粒?
硬件设计第一步:查阅平台芯片规格书中,关于DDR控制器部分的描述。

It has 16/32 bits DDR3L/4 up to 2400 MT/s, parallel NAND, serial NOR interfaces.

所以我们了解到了:

该平台芯片,支持DDR3L或者DDR4内存颗粒,数据位宽为16位或者32位,最高数据传输速度为2400MT/s,即频率为1200MHz(DDR是双边沿数据传输,1个时钟周期传输2次数据,1s传输了2400M次,即意味着1s时钟变化了1200次,即频率为1200MHz)。

结合产品需求:容量8Gb,那我们基本可以锁定DDR的详细规格了。

在正式选型之前,还要引入1个概念“RANK”。我们知道,DDR即支持多个内存颗粒扩展容量,又支持多个内存颗粒扩展数据位宽。
例如,我们的DDR控制器支持32位数据位宽,那我们可以用8个4位DDR,或者4个8位DDR,或者2个16位DDR,或者1个32位DDR进行数据位扩展。假如我们用8个4位DDR颗粒进行设计,我们的RANK数量就是8,我们戏称为“8-RANK设计”,当然实际生活中,我们肯定不会这么蠢,拿8个4位DDR去扩展32位。

所以,再确定我们的RANK数量后,需求被锁定了。
容量设定为8Gb,类型为DDR4,数据宽度为32位,最高频率为1200MHz。由于目前大部分DDR内存颗粒最高支持16位数据宽度,所以RANK数量为2,即我们说的Dual-RANK设计。
根据这个需求,可以在DDR官网上去寻找合适的“DDR芯片”了。例如在镁光官网产品页,选定DRR4-SDRAM,选定8Gb,DDR4。

网页会为你推荐很多型号。像数据位宽是8位的,可以直接跳过。

数据位宽为16位,频率为1200Mhz(2400MT/s)的,仍然有很多。这时候就是考验硬件工程师职业素养的时候了,我们不仅要考虑硬件性能,还要考虑下物料成本,物料采购周期。考虑成本,就尽量不要有“过设计”的地方,所以速率为3200MT/s的器件排除掉。如果我们是消费类商规产品,所以温度范围选择较窄的商业级器件,其次,为了增进你和采购的感情,


这样下来,我们选型基本就锁定到MT40A512M16JY-083E了,用量为2片(容量16Gb了)。
此时,开始阅览器件规格书,了解电气性能,设计外围电路,让DDR控制器和DDR内存颗粒都欢快的运行起来。

DDR的硬件电路搭建

设计逻辑器件电路,就要有逻辑思维,最简单的逻辑思维,就是分组。
所以,先了解DDR控制器的硬件接口。控制器硬件PIN脚可以分为电源组,配置组,控制组,时钟组,地址组,数据组。

电源组和配置组接口如下,供电,接电阻就可以完成,1.2V的供电,尽可能要平稳,此处忽略。ZQ电阻是用来校准ODT阻抗的,我们后面会讲到。

分好组后,就要根据DDR的工作原理来进行外围硬件设计了。

控制信号中,需要注意CS0和CS1,2个片选信号的可以用来进行多RANK内存容量扩展的,说明DDR控制器,最多支持2组RANK
每组RANK分配单独的片选信号。我们此处设计2个16位芯片组成1个RANK,即CS0要同时接在目前选的2个DDR颗粒的CS上,组成菊花链。其余控制信号一般无时序要求,能传递逻辑即可。

地址信号通常要参考时钟信号,来进行寻址,所以地址信号要严格与时钟信号保持长度一致,来保证所有地址位在采样的时候同时到达。因为同一块单板上,每根线上电子的传递速度是一样的,所以信号线长度约长,信号越晚到达,信号线长度越短,信号越早到达,地址采样的时候,是有时间期限的,所以,所有的地址信号必须保证在采样时间范围内,全部到达,因此要求地址线相对时钟线进行长度控制。前面一节我们讲了内存寻址原理,先用BG信号选择BANK GROUP,再用BA信号进行BANK选择,再用A[0:16]进行行选择,再用A[0:16]进行列选择,完成寻址。可以看到,Address信号在进行行选择和列选择时,BG和BA信号都是保持的,所以BG信号和BA信号的等长要求会相对略宽。

DDR控制器有2根BG信号,2根BA信号,17根Address信号。
同一个RANK有2个DDR颗粒,每个DDR颗粒有1根BG信号,2根BA信号,17根Address信号,前面CS0同时连接了2个DDR颗粒的片选,所以寻址时两颗DDR会被同时片选,那么DDR控制器如何区分开寻址其中1颗DDR颗粒呢?硬件又该怎么连接?

其实很简单,根据上节讲的内存寻址原理,我们知道每个DDR颗粒有2个BANK GROUP(1根BG信号),4个BANK(2根BA信号),与CS扩展容量的原理一致,我们把BG0接在DDR颗粒1上,BG0拉高拉低,我们可以寻址CHIP1的8个BANK。BG1接在DDR颗粒2上,BG1拉高拉低,我们可以寻址CHIP1的8个BANK。BA、ADDR进行菊花链连接,同时接在2颗DDR芯片上。

接下来,我们看看数据信号的链接,数据信号是内部分组的,由于DDR数据信号传输的时候双边沿数据传输,而且如果所有信号都参考时钟去做等长,会导致等长控制非常困难,增加DDR的设计难度,所以聪明的人类想出了另外一招,额外增加数据选通信号来作为数据信号的采样时钟,每8位信号,参考一组差分。
所以我们很轻易可以看出DDR控制器有4组DQS差分信号,32根数据信号。我们的RANK中有2个DDR颗粒,每个颗粒有2组DQS差分信号,16根数据信号。
所以

控制器的DQS[0:1]连接DDR CHIP0的DQS[0:1],
控制器的DQ[0:15]连接DDR CHIP0的DQ[0:15]。
控制器的DQS[2:3]连接DDR CHIP1的DQS[0:1],
控制器的DQ[16:31]连接DDR CHIP1的DQ[0:15]。

至此所有信号连接完成。

接下来是阻抗匹配,地址信号都需要外部加39.2ohm(不一定需要参考datasheet)匹配电阻到电源或者GND,数据信号,则不需要。因为DDR内部集成ODT功能,只需要通过配置,即可完成每组数据线的阻抗匹配。此外有专门的VTT驱动芯片来提供。

特性与电气参数

DDR4有哪些特性?

DDR系列有DDR,DDR2、DDR3、DDR4、DDR2L、DDR3L、DDR4L、以及最新出现的DDR5。虽然技术在不断进步,但是每一代之间又有很多相似之处。我们观察下DDR主流系列产品的特色,就不难发现规律。

很明显,电压越来越低了,频率越来越高了,数据总线由单端发展为差分了。我们发现这与总线的发展史有异曲同工之妙。

科技的根源仍旧是人类最普通的智慧,不信?那我们来举个不恰当的李子,栗子,例子。假如河的这边有很多李子,河的对面有很多栗子,如果只用人力,尽可能快的把河对面的栗子和这边的李子来回搬运,你有哪些办法?你会很轻易地提出若干方案,多找人同时搬;找游泳快的兄弟;在河比较窄的地方搬;2个人为一组,A扔李子,B扔栗子….

你想你故在,聪明的前辈们也和你一样,把这种思维运用在了DDR的设计上。最开始找了很多人一起搬,所以DDR最开始是并行走线设计;后来找游泳快的人,所以DDR的频率在不断提高;游泳快但是累啊,得找窄点的地方游,所以DDR工作电平越来越低(电流传输速度是一定的,所以电压越低,耗时越短)。一直来回游泳也不是个事啊,能不能两人成组,你负责搬0,我负责搬1,所以DDR总线逐渐也在由并行向差分演进。

如上就是DDR的技术发展规律,也是很多总线的发展规律。掌握规律,我们再来看特性,DDR4电平1.2V,DQS信号走差分,频率在1600Mbps~3200Mbps.

DDR4有哪些关键信号?

DDR4都有哪些关键信号呢?一张图就可以看明白。有CK,ADDR,DQS,DQ,DQM信号,在电路之外,还能看到使能,复位,ODT,ZQ。

那么这些信号都有什么作用?我们接下来做简要介绍。

CK,Address,DQS,DQ,DM信号都有哪些作用?
CK是DDR的数据通信时钟信号,当CK和Address信号配合工作时,可以进行CMD(命令)操作和Address(地址)信号传输。由于地址信号和命令信号在DDR操作过程中属于控制信号,相对DDR的数据传输,属于小众场景,所以DDR的地址信号和CMD信号目前仍然走的是单端走线,工作频率比起数据传输也比较低。所以我们不难发现,ADDR信号仍然是单端信号,且大部分匹配电阻仍然外置。

由于数据传输才是DDR的主要业务,所以在DDR进行数据传输时,需要增加额外的措施来保证数据传输,所以DDR4增加了新的角色,DQS,DQ,DM信号。

数据选取脉冲(DQS)是DDR中的重要功能,它的功能主要用来在一个时钟周期内准确的区分出每个传输周期,并便于接收方准确接收数据。每一颗芯片都有一个DQS信号线,它是双向的,在写入时它用来传送由CPU发来的DQS信号,读取时,则由DDR生成DQS向CPU发送。完全可以说,它就是数据的同步信号。甚至可以这么说,CK和DQS配合起来,作为DQ数据线的参考时钟,这也是为什么走线时,DQS和DQ要放到一起考虑的原因。

在数据连续传输过程中,随着时钟的变化,CPU可能会读取到DDR中位置1,位置2,位置3,位置4的数据,假如在这个连续传输过程中,CPU不想要位置2的数据,又不想中断数据传输,那么有什么办法呢?DQM就派上用场了,在传输到位置2时**,DQM使能,就可以屏蔽掉位置2 的数据。**

什么是ODT?
芯片终端端接匹配电阻On-Die Termination简称为ODT。ODT是从DDR2后期的产品才开始出现的,并随着产品的升级,ODT呈现更多的数值。当前,ODT主要是用于数据(data,DQ)、数据选通(DQS/DQS#)和数据掩码(Data Mask,DM)三类信号线。ODT的功能就是代替了常规的电路匹配设计,使原本在芯片外部的分立端接电阻集成到芯片内部,其简化电路结构如下图所示。

ODT电路的引入,是DDR发展的里程碑,ODT有如下优势:

去掉了PCB板上的分立端接电阻元件,降低了硬件设计成本。
由于没有端接电阻,使PCB设计有更多的布线空间,方便EDA布线。
由于ODT通过内部的寄存器进行调节,可以通过软件开启和关闭,减少了调试工作量。
芯片内部端接比板级端接更加有效,这样没有过多的寄生效应。
减少了外部元件的数量,在可靠性上也获得了优化。

ODT的引入,为进一步提高DDRx内存的工作频率做了铺垫。当然,ODT也并不都是优点,因为使用了ODT,匹配电阻的种类和数值已经确定并无法修改;在某种程度上也会带来一定的功耗增加,所以在一些消费类的产品上也并不都是开启ODT功能。

什么是ZQ校准?
ZQ是DDR3之后新增的一个引脚,而DDR3正是通过ZQ进行输出电阻(Ron)和 ODT的校准,这个校准过程在DRAM初始化过程中都会完成。ZQ在原理设计上比较简单,ZQ引脚通过一个低公差240Ω(一般公差为1%)的电阻直接连接到地即可。

除了眼图,DDR4还看那些电气参数?

DDR4设计是否设计OK,就需要看DDR4的量测参数是否满足JEDEC规范。那规范中都定义了哪些电气参数呢?每个电气参数又代表了什么意义?接下来我们做简要介绍。

  1. 过冲与下冲。
    信号如果在传输过程中阻抗不连续,就会出现反射,反射表现在示波器波形上,就是信号上冲和下冲,在DDR设计过程中,我们关注的不是信号在某个时间点的过冲幅值,而是过冲在时间维度的积分。关注的是一个过程,而不是一个点。

    对于每个信号,协议规范都会在这4个维度上对信号完整性进行定义规范。

  2. 信号的高电平和低电平。
    在高速信号传输中,信号能否达到协议规定的高电平最低门限和低电平最高门限,也直接决定了产品的稳定性。在DDR规范中,单端地址和控制命令、单端数据和数据掩码信号的AC和DC输入电平,差分时钟和数据选通信号的AC和DC输入电平都会被明确定义。仿真和测试过程中,只需要关注特定场景下的实测值有无达到协议规定值即可。


3. 差分信号交叉点电压。
为了满足信号的建立和保持时间,差分信号单端交叉点必须保证在一定的范围内。

交叉点以V DD/2作为参考电压,测量的是相对于V DD/2的偏离,偏离得越小越好。

4. 时序要求。
有时序关系要求的主要有3组:地址、控制和命令信号与时钟信号之间;数据选通信号与时钟信号之间;数据、数据掩码与数据选通信号之间。所以在PCB设计时,也按信号进行分组设计,地址、控制和命令信号与时钟信号作为一组,数据、数据掩码信号与数据选通信号每一个字节作为一组,相同组的信号在设计时基本会保持长度相差在一定的范围之内,并且设计的方式基本一样(如同组布线在同层、有相同的过孔数等),这样才能保证满足时序的要求。

5.斜率降额。
总线的规范中有两种测量斜率的方式,分别是常规的测量方式和切线测量方式,以地址、控制和命令信号为例,其定义如下图所示。

这两种测量方式主要由获得波形的质量决定,如果波形的单调性比较好,则以常规方式测量;如果单调性不好,出现一些回钩或台阶,则用切线方式测量。
图中红色框框代表常规斜率测量方法,绿色箭头代表切线方式测量方法。在DDR中,信号的建立和保持时间并不是唯一不变的,会随着斜率的变化而变化,为了弥补斜率造成的影响,在仿真最终的“建立和保持时间”时,测量的时序参数需要与降额参数相加。降额参数与信号的斜率和时钟/数据选通的斜率有关。


转自-------每日硬知识

DDR4原理、硬件设计相关推荐

  1. DDR4原理及硬件设计

    DDR4-DRAM的工作原理 其引脚按照功能可以分为7类:前3类为电源.地.配置. 后4类为:控制信号.时钟信号.地址信号.数据信号 电源.地.配置信号的功能很简单,在此不赘述.控制信号主要是用来完成 ...

  2. DDR4 硬件设计笔记

    1 DDR4概述 DDR4全称,DDR4-DRAM,与其他DDR系列DRAM一样,是当前电子系统架构中使用最为广泛的的RAM存储器.DRAM全称Dynamic Random Access Memory ...

  3. PADS Logic电路原理pcb设计(线路硬件设计实践问题总结)

    电子线路硬件设计实践过程问题总结 一.原理图常见问题 1.没有正确设置显示格点和设计格点,导致在建立原理图库文件时管脚与管脚之间的距离不均衡或者在连线时经常对不齐,连续容易扭曲.如图所示: 图:设计格 ...

  4. 四位行波进位加法器_【HDL系列】硬件加法器原理与设计小结

    硬件加法器种类繁多,对于不同的设计,加法器的需求也不一样.在前端设计中,使用符号"+"便可轻而易举地实现加法器.只是在特殊的情况下,指定选择加法器类型,或许可以用到.其他情况,可以 ...

  5. 硬件设计:电源设计--DC/DC工作原理及芯片详解

    硬件设计:电源设计--DC/DC工作原理及芯片详解 参考资料:DC/DC降压电源芯片内部设计原理和结构 MP2315(DC/DC电源芯片)解读 DC/DC电源详解 第一次写博客,不喜勿喷,谢谢!!! ...

  6. [Altium Designer 2020 硬件设计]原理图封装库创建及多部分组成单个器件原理图库创建

    通用准备工作 1.创建一个工作区,用于保存本教程内的所有工程. 2.创建一个原理图库. 3.绘制原理图库封装. 1.创建一个新的设计工作区 文件->新的->设计工作区 2.右击工作区,选择 ...

  7. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...

    程序的大部分代码都可以在必要的时候才加载到内存去执行,运行完后可以被直接丢弃或者被其他代码覆盖.我们PC上同时跑着很多的应用程序,每个应用程序使用的虚拟地址空间几乎可以整个线性地址空间(除了部分留给操 ...

  8. 快速入门ESP32的硬件设计原理以及典型应用案例UART串口转WIFI智能硬件,以及ESP32-Lyra(智能音频台)设计方案。

    前言:可私信免费领取 该手册是中文版的ESP32硬件设计指南,提供了ESP32 系列产品的硬件信息,包括ESP32 芯片,ESP-WROOM-32 模组以及ESP32-DevKitC 开发板.包含开发 ...

  9. 51单片机实战教程基础硬件篇(二 电子元件原理图库设计教程)

    AD原理图库设计,重点是绘制元件的电气连接单元Pin脚,然后添加其PCB 封装.Pin脚号(或名称)一定要与元件工程图中的编号(或名称)一致:Pin脚号一定要与元件的PCB封装号一致:一旦弄错而未发现 ...

最新文章

  1. 情感分析研究的新视野
  2. 程序猿充电的五本优质编程技术书
  3. 【14】GO语言的接口类型
  4. Netweaver和Windows,Ubuntu的数据共享
  5. Thymeleaf –片段和angularjs路由器局部视图
  6. stm32f103移植到f0_STM32F042替换STM32F103
  7. Tosca 注意事项(持续更新)
  8. Error creating object Microsoft Data Access Components 2.1 (or later) have been properly installed
  9. 数据库基础 MySQL
  10. 01数据结构——绪论
  11. 云安全到来 手动更新病毒码将成为历史
  12. 开源软件的总拥有成本指南
  13. 推荐——《梦想金山》
  14. 简述RAID 0,1,5,10区别
  15. 良品铺子的2021:营收创新高后的“战术调整”
  16. MATLAB周边第三期-坤坤的唱跳rap
  17. 自然语言处理系列十七》中文分词》分词工具实战》Python的Jieba分词
  18. windows远程提示credssp加密数据库修正问题解决
  19. 四苯基卟啉铜TPP-Cu(2+) cas14172-91-9分子量676.26600分子式C44H28CuN4
  20. 实用!!服务器监测邮箱报警

热门文章

  1. mysql share nothing_分布式数据库的Share Nothing / Share Disk / Share Storage
  2. element走马灯自动_[转]vue Element UI走马灯组件重写
  3. 招聘季“金三银四”:玩家们蠢蠢欲动,却难获企业与求职者的好评
  4. 数据分析技能点-Excel的36个常规操作
  5. 网站日志采集和分析流程
  6. win10:打开了很多窗口,但任务栏上一个都不显示
  7. 百度松果 合成大数字 (vector模拟)
  8. 对jdk5.0中可变长参数的理解
  9. win10安装mysql8
  10. 微信小程序实现保存图片到本地