fuzidage
专注嵌入式、linux驱动 、arm裸机研究

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

1.MIPI CSI2的发送和接收

上图反映了sensor 和 soc 的数据关系,soc 通过 CCI (Camera Control Interface) 控制 sensor 寄存器,配置正确,sensor 将会通过 mipi 接口输出图像数据。

控制信息是 soc 通过 CCI 发送到 sensor,CCI 接口一般的就是 I2C 接口,最大支持400KHz。

data信息是CSI DPHY发送者发送到CSI DPHY接收者,由sensor端发送到soc的mipi-rx。

D-PHYDSI和CSI的物理层定义

D-PHY 是 MIPI 聯盟發布的高速物理層標準,規定了接口層的物理特性和傳輸協議。 DPHY 採用了 200mV 源同步的低压差分信號技術,每個 Lane 的數據綠率範圍支持到2500Mbps。 D-PHY 可以工作在低功耗 (Low Power, LP) 和高速 (High Speed, HS) 兩種模式下。

2.1、传输模式

LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz

HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 2.5Gbps] per Lane

传输的最小单元为 1 个字节,采用小端的方式,也就是 LSB first,MSB last。

相关缩写名词:

  • HS-RX:高速接收器
  • HS-TX:高速发送器
  • LP-RX:低功耗接收器
  • LP-TX:低功耗发送器
  •  LPS:  Low Power State, 封包之間的spacing間距。
  •    ST:    Start of Transmission (SoT), 封包的起始訊號, 一般為低速轉換為高速的暫態訊號。
  •    ET:    End of Transmission (EoT), 封包的結束訊號, 一般為高速轉換為低速的暫態訊號。
  •   PH:   Packet Header, 32 bit表示, 為封包的標頭。
  •   PF:    Packet Footer, 16 bit表示, 為封包的結尾。

2.2、Lane States

*  LP mode 有 4 种状态: LP00、LP01(0)、LP10(1)、LP11 (Dp、Dn)

* HS mode 有 2 种状态: HS-0、HS-1

HS 发送器发送的数据 LP 接收器看到的都是 LP00,

2.3、Lane Levels

* LP: 0 ~ 1.2V

* HS: 100 ~ 300mV,HS common level = 200mV,swing = 200 mv

2.4、操作模式 

  • 数据Lane的3种操作模式  

  •   Escape mode,
  •   High-Speed(Burst) mode
  •   Control mode

    • ①Escape mode request

LP-11→LP-10→LP-00→LP-01→LP-00

   exit:LP-10 -> LP-11

当进入 Escape mode 需要发送 8-bit entry command 表明请求的动作,比如要进行低速数据传输则需要发送 cmd: 0x87,进入超低功耗模式则发送 cmd: 0x78。

    • ②High-Speed mode request :

LP-11→LP-01→LP-00->SOT(0001_1101)

   exit: EOT -> LP-11

 

    • ③Turnaround request (LP-11→LP-10→LP-00→LP-10→LP-00)

这是开启 BTA 的时序,一般用于从 slave 返回数据如 ACK: 0x84。

    exit:LP00→LP10→LP11

 最常用的就是“低功耗进入高速模式”如下图:

 

我们的D0-D4都是一个差分信号,它从lowpower state进入到HS后,从hi speed mode 中sync出我们的data。

sensor控制的信号由绿色框圈出来,主要是以下三个讯号:

HS-Prepare:表示从low power mode进入到hi speed mode需要prepare一段时间

Hs-zero: 表示从low power mode进入到hi speed mode需要keep LP-00状态一段时间

Hs-trail:表示送完1 st data后需要keep一段时间后才允许进入low power mode,进行下一轮数据传输。

soc端的控制的信号由黄色框圈出来:

Hs-settle:表示soc要等一段时间才去开始去parse “sync code”, 当抓到sync code后表示sensor已经进入了hi speed mode, 这个时候就可以sync data了。

注意:

1.每次EOT(end of trans)结束讯号后,都会进入low power mode,而不是sensor 工作后就一直处于hi speed mode。也就是每传一个package,都会走一遍上述的过程。

2.hs-settle为mclk/8 *n(这个n表示配置几个clk,对应code的话配置这个mipi_dev_attr_s->dphy)

当hs-settle的时间太长会压到data中的“sync code”,那么就会出现sync code parse不到,出现ecc  err. 又或者从data中parse到一个假的“sync code”,那么最后就会出现数据不太对,出现ecc err.

Ecc还有一种出现可能就是lane mapping 出错,当我们传输数据出现ecc err, 有可能就是传输short pack时,4 byte的short pack拼接的不对(详见CSI的数据包结构),导致出现ecc error.

3.如果hs-trail持续的太短(拉高的太快),有可能会压到最后面的data,所以会出现crc/wc(word count ) err.另外,如果hs -settle太大,也有可能hs-trail也会是错误的数据,所以出现wc, crc err,因此不一定是hs-trail的问题,得先确保前面的ecc/decode无误后再来调整hs-trail

一般排查流程如下:

 

2.5 时钟模式

  • 连续时钟模式:数据包传输间隔,clk lane 保持在高速模式;
  • 非连续时钟模式:数据包传输间隔,clk lane 进入 LP-11 状态,退出hi speed mode;

2.6 时序要求
在调试 DSI 或者 CSI 的时候, HS mode 下的几个时序非常重要:T_LPX,T_HS-SETTLE ≈ T_HS-PREPARE + T_HS-ZERO,T_HS-TRAIL,一般遵循的原则为:Host 端的 T_HS-SETTLE > Slave 端的 T_HS-SETTLE。

2.7 Start-of-Transmission ( SoT )过程

当要进行数据传输的时候,data lane 将会通过信号(SoT)退出停止状态,进入高速模式。过程如下:

 TX Side   RX Side
 退出停止状态 ( LP-11 )  检测停止状态
 进入 HS-Rqst 状态 ( LP-01 ),并处于该状态的时间间隔为 TLPX  检测到 lane 从 LP-11 转变为 LP-01
 进入 Bridge 状态 ( LP-00 ),并处于该状态的时间间隔为 THS-PREPARE  检测到 lane 从 LP-01 转变为 LP-00,间隔 TD-TERM-EN 时间之后将使能传输
 同时退出低功耗模式,进入高速模式  
 处于 HS-0 状态,时长为 THS-ZERO  使能 HS-RX 并等待 THS-SETTLE,以忽略转换状态
   开始从数据流中等待同步序列
 时钟上升边缘插入 HS 同步序列 ‘00011101’  
   识别到同步序列 ‘00011101’
 高速模式开始传输有效数据  
   接收到有效数据

 2.8 End-of-Transmission ( EoT )过程

在数据完成传输时,通过结束传输(EoT)过程,数据通道退出高速模式并进入停止状态,这个过程状态变化如下:

TX Side  RX Side
传输数据  接收到数据
在完成最后一个字节数据的传输之后,保持该状态的时间间隔为 THS-TRAIL  
关闭 HS-TX,启用 LP-TX,并在 THS-EXIT一段时间内处于停止状态 ( LP-11 )  检测到 lane 状态进入停止状态 ( LP-11 ),关闭传输功能
  忽略 THS-SKIP一段时间内的 lane 变化,以忽略转换状态
  检测有效数据的最后一次转换,确定最后一次有效数据并忽略包尾序列

 接收器是如何判断数据将要开始传输了呢?

当出现LP11→LP01→LP00时,接收器将会判断,将会有数据达到,同时,使用示波器查看mipi波形,将会发现在PL00(THS-PREPARE)时会有一个小脉冲(峰刺),一般的,在这个小脉冲之后,接收器将会打开比较器(由于在THS-PREPARE会有这个小脉冲的存在,所以在接收器中,会通过设置接收器的settle time,避开这个小脉冲,在这个脉冲之后再打开比较器),准备接收数据。而HS-00011101则表示有效数据开始,同时数据的开头,将会有数据表明将要数据的数据量,所以mipi接收器将会按其数据量接收,直到接收完成。
每根 lane(data lane/clk lane)从 LP 模式切换到 HS 模式都会有 LP11→LP01→LP00 这样的一个时序,同时还要检查 HS-00011101 ,HS-00011101 主要是用于同步,只有前面正确采集到 00011101 ,才能保证 clk 和 data 相位一一对应。

mipi csi调试:
测量 sensor 有相应的 mipi 信号输出,但是主控并没有接收到数据,通过查看主控的 mipi 寄存器发现,mipi接收器还处于 LP 模式,这种情况一般是mipi没有检测到sensor发送的从 LP 进入 HS 的时序。此时可测量sensor 开始输出图像数据时,clk lane 是否有 LP11→LP01→LP00 这样的一个时序。同时,应该先开 mipi,sensor 再开始 mipi 数据传输
由于THS-PREPARE会有一个小脉冲的存在,所以,主控在接收mipi数据的时候,需要通过设置主控的settle time,这个时间需要在这个小脉冲之后,这样接收才不会有问题
当出现 sensor 有数据输出,但是主控没有接收成功,这个情况一般是 mipi 的时序问题,sensor 端的时序没有和主控端的配合好,这个时候,可以尝试的减小sensor端的THS-PREPARE,增大THS-ZERO和THS-TRAIL
由于一些主控的需求,在一帧数据完成之后,需要一定的时间才可以进行相应的ISP处理,当一帧传输完毕之后的LP11时间达不到主控ISP的时间要求导致ISP报错,可通过调节THS-TRAIL时间,以此得到ISP对帧间的时序长度要求 

3.CSI-2(定义mipi-rx的数据包规则)

CSI-2 是針對攝像頭的數據協議, 規定了主機與外設通信的數據包格式。CSI-2 可以支持不同像素格式的圖像應用, 數據傳輸的最小粒度是字節。 為增加 CSI-2 的性能,可以選擇數據 Lane 的數量, CSI-2 協議規訂了發送端將像素數據打包成字節的機制, 並指明多個數據 Lane 分配和管理的方式。字節數據以數據包的形式組織,數據包在SoT 與 EoT 之間傳輸。 接收端根據協議解析相應的數據包, 恢復出原始的像素數據。

CSI-2 的數據包分為長包和短包兩種,包含有校驗碼,能進行誤碼糾正和錯誤檢測。長包和短包都是在 SoT 和 EoT 之間傳輸,在數據傳送的間隙, D-PHY 處於 LP 模式。 CSI-2數據包的傳輸機制如圖所示。 PH 和 PF 分別表示 Packet Header 和 Packet Footer。

3.1.一个frame的数据包结构

 

 

3.2. 包类型

    • 短包:4 bytes (固定)

    • 长包:6~65541 bytes (可变) 

3.2.1 短包结构

一个short packet(也叫做pack head(PH))

 

  • 包结构(4个字节)

    •   数据标识(DI) 1个字节

    •   WC (长度固定为2个字节)

    •   错误检测(ECC) 1个字节

  • 包大小

    •   长度固定为4个字节

3.2.2 pack footer(PF)的结构:

3.2.3 长包结构

 

  • 包头部(4个字节)(PH)

    •   数据标识(DI) 1个字节

    •   数据计数WC (2个字节 )(PH和PF之間的資料個數)

    •   错误检测(ECC) 1个字节

  • 数据填充(0~65535 字节)

     •    长度=WC*字节

  • 包尾:校验和(2个字节)(PF)

长包 = 短包(包头) + 数据 + 包尾 

  • 包大小:

       • 4 + (0~65535) + 2 = 6 ~ 65541 字节

 3.2.4 H-blanking & V-blanking

传输多个pack和传输一个pack时对应的图像如下, VVALID/HVALID/DVALID可以先把它想成是影像的同步訊號VSync/HSync/DE,而Data就是影像資料,以方便理解。

从图中可以看到,当水平同步讯号HVALID为Low的这段区间,剛好就是每行的Blanking间隔, 也就是H-blanking。

从下图可以看到上一FE到下一FS之间的间隔为V-blanking。

frame的封包示意图:

 

3.2.5 MIPI帧数据类型DI

 

 Data Identifier (DI) 为虚拟通道(VC, 2 bit)和资料类型(DT, 6 bit)组成。

3.2.5.1 VC(virtual channel)

可以看出MIPI最多可以輸入4组影像来源,其ID为0~3,且內容可以是任意的內容,下图就表示用virtual chn来传输不同格式的数据。比如一般Sony, OV的HDR 模式基本都是VC mode,包括2帧HDR, 3帧HDR。

 

 

 3.2.5.1 DT(data type)

Data Type目前定义多种资料形态,范围从0x00~0x3F,其中0x00~0x0F为短封包类型,0x10~0x3F为長封包类型,如下表:

 用于同步的短包Data Type:

Data Type, 
OX13 
Ox14 
OX24 
ox05 
OX15 
OX16 
0137 
ox09 
OX19 
0139 
ox0A 
oxoa 
oxlC 
OXOD 
OXID 
Ox3D 
OXOE 
oxlE 
Ox2E 
Ox3E 
OXXO and 
oxXF, 
unspecified 
Data Type, 
binary 
000011 
01 0011 
100011 
00 0100 
01 0100 
10 0100 
00 0101 
01 0101 
000110 
01 0110 
11 0111 
00 1001 
01 1001 
10 1001 
11 1001 
01 1010 
00 1011 
00 1100 
01 1100 
10 1100 
00 1101 
01 1101 
11 1101 
00 1110 
01 1110 
10 1110 
11 1110 
xx 0000 
Description 
Generic snort WRITE 
, no parameters 
Generic Short WRITE, 
1 parameter 
Generic Short WRITE, 2 parameters 
Generic READ, no parameters 
Generic READ, 1 parameter 
Generic READ, 2 parameters 
DCS Short WRITE, no parameters 
OCS snort WRITE, 1 parameter 
OCS READ, no parameters 
Execute Queue 
Set Maximum Retum Packet Size 
Null Packet, no data 
Blanking Packet, no data 
Generic Long Write 
DCS Long Write/write LUT Command Packet 
Picture Parameter Set 
Compressed Pixel Stream 
Loosely Packed Pixel Stream, 20-bit YCbCr, 4:2:2 Format 
Packed Pixel Stream, 24-bit YCbCr, 4:2:2 Format 
packed Pixel stream, 16-bit YCbCr, 4:22 Format 
packed Pixel Stream, 
30-bit RGB, 10-10-10 Format 
Packed Pixel Stream, 
36-bit RGB, 12-12-12 Format 
Packed Pixel Stream, 
12-bit YCbCr, 4:20 Format 
Packed Pixel Stream, 
16-bit RGB, 5-6-5 Format 
packed Pixel Stream, 
18-bit RGB, 6-6-6 Format 
Loosely Packed Pixel Stream, 18-bit RGB, 6-6-6 Format 
Packed Pixel Stream, 24-bit RGB, R 8 R Format 
DO NOT USE 
All unspecified codes are reserved 
packet 
Size 
Short 
Short 
Short 
Short 
snort 
Short 
Short 
Short 
snort 
Short 
Short 
Long 
Long 
Long 
Long 
Long 
Long 
Long 
Long 
Long 
Long

soc到外设发送的包类型

 

外设到soc的数据包类型

 

4. mipi支持的图像格式

MIPI Rx 共支持五種pixel資料格式的傳輸, 包含 YUV422-8bit、 YUV422-10bit、 RAW8、RAW10 和 RAW12。

  •     RGB格式:

    传统的红绿蓝格式,比如RGB565,RGB888,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。

格式

描述

RGB565

1. 每个像素用16位表示,RGB分量分别使用5位、6位、5位。

2. 内存中排列(高字节->低字节):R R R R R G G G G G G B B B B B

RGB555

1. 每个像素用16位表示,RGB分量都使用5位(剩下1位不用)

2. 内存中排列(高字节->低字节):X R R R R G G G G G B B B B B(X表示不用,可以忽略)

RGB24(RGB888)

1. 每个像素用24位表示,RGB分量各使用8位。在内存中RGB各分量的排列顺序为:BGR BGR BGR ......

2. 内存中排列(高字节->低字节):B B B B B B B B G G G G G G G G R R R R R R R R

ARGB32(ARGB8888)

1. 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)

2. 内存中排列(高字节->低字节):B B B B B B B B G G G G G G G G R R R R R R R R A A A A A A A A

    •     YUV格式:

 YUV是一种色彩编码方法,是一种彩色编码系统,相对于RGB色彩空间,YUV传输带宽占用更低,传输数据不易出错。

  Y’UV、YUV、YCbCr、YPbPr 几个概念其实是一回事儿。由于历史关系,Y’UV、YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 是用在数字视频、图像的压缩和传输,如 MPEG、JPEG。今天大家所讲的 YUV 其实就是指 YCbCr。Y 表示亮度(luma),CbCr 表示色度(chroma)。

人眼的视觉特点是对亮度更敏感,对位置、色彩相对来说不敏感。所以在视频编码系统中为了降低带宽,可以保存更多的亮度信息(luma),保存较少的色差信息(chroma)。

luminance 亮度,luma 是在视频编码系统中指亮度值;

chrominance 色度,chroma 是在视频编码系统中指色度值。

Y’UV 设计的初衷是为了使彩色电视能够兼容黑白电视。对于黑白电视信号,没有色度信息也就是(UV),那么在彩色电视显示的时候只显示亮度信息。

  YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式。色度(UV)定义了颜色的两个方面─色调与饱和度,分别用CB和CR表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

YUV采样格式:(subsamping)

原则:在数字图像中,

 (1) 每一个图形像素都要包含 luma(亮度)值;

(2)几个图形像素共用一个 Cb + Cr 值,一般是 2、4、8 个像素。

主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。

•YUV 444 采样
全采样,对每个像素点的的YUV分量都进行采样,这样的三个分量信息量完整
 假设4*4像素,采样格式如下:
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]
[y u v] [y u v] [y u v] [y u v]

那么1920*1080文件的大小:1920*1080*3(B),那么一个像素对应3个字节
YUV 422 采样
•部分采样,可节省1/3存储空间和1/3的数据传输量。UV分量是Y分量采样的一半,Y分量和UV 分量按照2 : 1的比例采样。如果水平方向有10个像素点,那么采样了10个Y分量,而只采样了5个UV分量。其中,每采样过一个像素点,都会采样其Y分量,而U、V分量就会间隔一个采集一个

假设4*4像素,采样格式如下:

[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]
[y u] [y v] [y u] [y v]
[y v] [y u] [y v] [y u]

1920*1080文件的大小:1920*1080+1920*1080*0.5+1920*1080*0.5(B),那么UV的数量减少了一半,相对于YUV444空间节省了1/3
YUV 420 采样
•部分采样,可节省1/2存储空间和1/2的数据传输量。YUV 420采样,并不是指只采样U分量而不采样V分量。而是指,在每一行扫描时,只扫描一种色度分量(U或者V)和Y分量按照2 : 1的方式采样。比如,第一行扫描时,YU 按照 2 : 1的方式采样,那么第二行扫描时,YV分量按照 2:1的方式采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和Y分量相比都是2:1 。其实yuv420的取名方式不是很高明,更确切的命名为yuv420yuv402,也就是第一行只有U,而第二行只有V
假设4*4像素,采样格式如下:

[y u] [y] [y u] [y]
[y v] [y] [y v] [y]
[y u] [y] [y u] [y]
[y v] [y] [y v] [y]

1920*1080文件的大小:1920*1080+1920*1080*0.25+1920*1080*0.25(B)相对于YUV444空间节省1/2,因此也是比较主流的采样方式。

YUV存储格式

YUV的格式有两大类:planar(平面格式)和packed(打包格式)

1.对于planarYUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V

一般默认是3个平面,即y平面,u平面,v平面。但还有一种semi-planar是两个平面

也就是说uv为同一个平面,即一个y平面,一个uv平面。

  • YUV420 planar

     

     

     

  • YUV420SP(NV21/NV12)  two-planer双平面,Y一个平面,UV在同一个平面交叉存储

YU12/I420

 

第一行的Y1Y2和第二行的Y7Y8共同使用一组U1V1

② YV12

与YU12基本一样,唯一的区别是先存储V分量再存储U分量

  • YUV422 planar

① YUV422P/I422

在渲染时Y0与Y1会共用U0和V0.

 

假如一个16个像素的图像的该格式的存储分布如下。

 

2.对于semi-planarYUV格式

semi-planar是两个平面.也就是说uv为同一个平面,即一个y平面,一个uv平面Y

  • YUV420SP(YUV420 Semi-Planar )

① NV12就属于YUV420SP

该格式是先存储全部的Y分量,然后UV分量交叉存储。

 

② NV21

 

  • YUV422SP(YUV422 Semi-Planar )

 

3.对于packedYUV格式,每个像素点的YUV都是连续交叉存储的。

① YUYV

该格式属于4:2:2类型,且是用packed形式存储的,相邻的2个像素共用一个Cb(U)和Cr(V),以16个像素为例如下图:

 

② YVYU

与YUYV相似,只是存储时UV分量顺序不同而已。

③ UYVY

与YUYV相似,只是顺序不同而已.

 

    •     RAW data格式:

    RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。Raw data(Raw RGB)经过彩色插值就变成RGB。

sensor上每个像素只采集特定颜色的光的强度,因此sensor每个像素只能为R或G或B 。

bayer阵列:

人眼对绿色比较敏感,所以一般bayer格式的图片绿色格式的像素是是r和g像素的和,那么bayer格式一般有下面4种:

5. mipi CSI传输格式:

  raw 8:

 raw10:

 raw 12:

 

 从图像看,RAW8是一传输个字节对应一个pixel, 而raw10是5个byte去对应4个pixel,第5个byte用来存储pixel 0~3的bit[0:1]。同理raw12用3个byte存储2个pixel。

 

6. 彩色深度(色彩位数)

    8位彩色,有256种深度。

    16位彩色:65,536种颜色。

    24位彩色:每种原色都有256个层次,它们的组合便有256*256*256种颜色。

    32位彩色:除了24位彩色的颜色外,额外的8位是储存重叠图层的图形资料(alpha透明度)。

Date rate与像素时钟与带宽的换算:

 

7. 图像解析度/分辨率(Resolution)

1280 * 720 = 921600

1M

100万像素

720P

H65 sensor  

1920 * 1080 = 2073600

2M

200万像素

1080P

Imx307/imx327 sensor

2560 * 1440 = 3686400

2560 * 1600 = 4096000

2592 * 1944 = 5038848

4M/5M

400万像素

500万像素

2K

Imx335/sc4210 sensor

3840 * 2160 = 8294400

8M

800万像素

4K

Imx334 sensor

 

 

posted on   fuzidage  阅读(10511)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-12-09 s3c2440裸机-内存控制器(一、内存控制器的原理)
 
点击右上角即可分享
微信分享提示