jetbot 芯片手册
什么是芯片手册
控制芯片的详细说明。
3.1CPU芯片手册Tegra_X1_TRM_DP07225001_v1.3p.pdf - 891 KB
2.2板子芯片手册JetsonNano_DataSheet_DS09366001v1.0.pdf - 891 KB
3.2CPU里的ARM核的芯片手册DDI0488H_cortex_a57_mpcore_trm.pdf - 2.9 MB
各个功能主要的是参考3.1CPU芯片手册Tegra_X1_TRM_DP07225001_v1.3p.pdf
。
CPU 框图
NVIDIA Tegra X1移动处理器,它是一个集成了多种强大硬件组件的完整应用和数字媒体系统。主要包括:
GPU: NVIDIA GeForce Maxwell图形处理单元,支持多种图形标准,具有256个CUDA核心。
CPU: 四核ARM Cortex-A57,支持64位和32位代码执行,配备高速缓存。
内存控制器: 支持64位DRAM接口和LP-DDR4内存。
视频解码器和编码器: 支持多种视频标准和高性能硬件编码。
音频子系统: 基于Cortex-A9处理器,支持多通道音频和灵活的音频接口。
成像和显示: 高质量图像捕捉和双显示控制器,支持多种显示输出。
此外,Tegra X1还提供了多种外设接口,以支持无线通信、音频编解码和大容量存储控制器。部分型号还包括四核ARM Cortex-A53以提高性能。该文档旨在为编程者提供Tegra X1设备的硬件和寄存器接口指导。
首先我们来看核心区域。
它是CPU+GPU的一种异构架构,后面会进行细讲。
然后是我们的低速区,什么UART、传感器、Flash、时钟、高低电频来设置马达。
以及对应的一些寄存器。
还有就是我们的存储区域。
DDR接内存、WIFI、USB、…。
音视频区域。
AI识别、自动分类…
总线。
CPU核心区域
我们可以看到CPU部分:包括四个Cortex-A57和四个Cortex-A53处理器核心。
Cortex-A57核心有各自的L1缓存(指令缓存48KB,数据缓存32KB)和共享的2MB L2缓存。
Cortex-A53核心也有各自的L1缓存(指令缓存32KB,数据缓存32KB)和共享的512KB L2缓存。
缓存的作用在于很多数据我们不一定去内存中去取,可以考虑直接从缓存中去取,这样更快。
NEON指的是Advanced SIMD (Single Instruction, Multiple Data) 扩展,这是ARM处理器中一种用于加速多媒体和信号处理任务的技术。
NEON是一组指令集扩展,允许处理器在一个时钟周期内对多个数据进行并行处理。这种技术特别适合处理音频、视频、图像处理和3D图形等需要大量并行计算的应用。通过使用NEON,ARM处理器可以更高效地执行浮点运算和整数运算,从而提高整体的性能。
在框图中,NEON单元与Cortex-A53和Cortex-A57核心结合使用,帮助这些核心更快地处理涉及多媒体和数字信号处理的任务。(矩阵运算,图像处理)
上面的GIC-400 是 Jetson Nano 中的一个关键组件,负责管理系统中各种外设的中断信号,基于优先级和类型将这些中断分配给最合适的处理器核心,支持多核架构,确保所有 CPU 核心都能高效地处理系统中的中断,从而优化系统性能并减少中断处理的延迟。
往右边看还有一个CoreSight SOC-400
,它是 ARM CoreSight 技术的一部分,用于嵌入式系统中的调试和跟踪功能。
通过专有的硬件非入侵的实时记录程序执行路径和数据读写信息,然后压缩成Trace数据流。
通过专用的数据通道和输出端口传输至调试主机。调试主机中的开发工具解压缩这些Trace数据流。
恢复程序运行信息后,就可以进行调试和性能分析了。
AXI
AXI 代表的是 Advanced eXtensible Interface,这是 ARM 的 AMBA(Advanced Microcontroller Bus Architecture)协议的一部分,用于高性能、低延迟的片上通信。
术语 | 含义 |
---|---|
32-bit AXI | 宽度为 32 位的 AXI 总线,意味着在一个时钟周期内可以传输 32 位(4 字节)的数据,通常用于连接需要较小数据带宽的外设或模块。 |
MSelect | 多路选择器(Multiplexer),在不同的数据总线之间进行选择,负责将多个 AXI 总线的数据流选择并分配到不同的模块或总线中。 |
128-bit AXI | 宽度为 128 位的 AXI 总线,意味着在一个时钟周期内可以传输 128 位(16 字节)的数据,通常用于需要高数据带宽的模块,如高性能 GPU 或高速存储控制器。 |
简单来说:GPU 和 CPU 之间通过 AXI 总线传输数据,MSelect 多路选择器确保数据的高效传输和资源的合理利用,从而在多任务处理环境中实现高性能的数据交换。
总线
这里有三条总线:AXI、AHB、APB。从快到慢的排序。
总线名称 | 总线描述 |
---|---|
AXI(Advance eXtensible Interface) | 高级可扩展接口。(多通道并行)与GPU、FPGA的大数据传输 |
APB(Advance Peripheral Bus) | 高级外围总线(单通道)—>用于低速设备(如uart、i2c) |
AHB(Advance High-performance Bus) | 高级高性能总线(单通道)—>高性能高时钟频率场景 |
存储
PCIe(PCI Express) 是一种高速串行计算机扩展总线标准,用于连接高性能外设和主板,特别适合需要高带宽的设备,如显卡、固态硬盘(SSD)、网络接口卡(NIC)等。(周边设备高速互联)
EMC(External Memory Controller)接外部存储器(如内存)的接口。
MC(Memory Controller)内存控制器模块,处理来自内部客户端的请求并,进行仲裁其中分配内存宽带。
DDR(Double Data Rate SDRAM)双倍速率同步动态随机存储器,即内存。
LPDDR(Low Power Double Data Rate SDRAM)低功耗双倍速率内存。
SATA(Serial Advanced Technology Attachment)接硬盘的常用接口。
多媒体区
多媒体区域负责处理各种与图像、视频和音频相关的任务。
模块 | 描述 |
---|---|
VI (Video Input) | 视频输入 |
VIC(VIDEO IMAGE COMPOSITOR) | 视频图形合成 |
NVENG(NVIDIA Video Encoder engine) | 视频编码引擎 |
NVDEC(NVIDIA Video Decoder engine) | 视频解码引擎 |
NVJPG(NVIDIA JPG) | NVIDIA的jpg图片的处理 |
TSEC(Tegra Security Co-processor) | 一种嵌入式安全处理器,主要用于管理HDMI链路上的HDCP加密和密钥 |
ISP(Image Signal Processor) | 图像信号处理器,是相机处理硬件引擎管道 |
MIPI(Mobile Industry Processor Interface) | 移动处理器接口(一些移动设备的标准接口) |
CSI(Camera Serial Interface) | 摄像头串行接口 |
DSI(Display Serial Interface) | 显示串行接口 |
EDP(Embedded Display Port) | 嵌入式显示端口 |
HDMI(High-Definition Multimedia Interface) | 高清晰度多媒体 |
低速区
模块 | 描述 |
---|---|
IRAM | 片内存储器 |
IROM | 片内只读存器 |
Semaphore | 信号量 -> 多核互斥 |
ATOMIC | 原子操作 -> 同步 |
Clock | 时钟 |
Flow Control | 流控 -> 多核流程排序 |
GPIO | General Purpose Input/Output 通用输入输出 |
RTC | Real Time Clock 实时时钟 |
PWM | Pulse Width Modulation 脉冲宽度调制 |
UART | Universal Asynchronous Receiver/Transmitter 通用异步收发传输器 -> 串口调试(通过一根线发送,一根接收) |
I2C | |
SPI | |
PMC | Power Management Controller 电源管理控制器 |
UART是一种异步串行通信协议,常用于点对点的通信,如微控制器与传感器或电脑之间的通信。
TXD(Transmit Data):发送数据线,数据从发送端传输到接收端。
RXD(Receive Data):接收数据线,接收从发送端传来的数据。
工作原理:UART通信不需要时钟信号,它通过预设的波特率(比如9600、115200等)来同步发送和接收双方的数据流。
I2C是一种同步串行通信协议,常用于多个器件之间的通信,如微控制器与多个传感器或外围设备的连接。
SCL(Serial Clock Line):时钟线,由主设备(通常是微控制器)生成的时钟信号,用于同步数据传输。
SDA(Serial Data Line):数据线,用于传输数据。所有的设备都通过这条线发送和接收数据。
工作原理:I2C采用主从架构,主设备控制通信,使用SCL提供时钟信号,同时通过SDA线进行数据的双向传输。
SPI是一种同步串行通信协议,常用于高速数据传输,如微控制器与外部存储器、显示器或其他外围设备的通信。
SCLK(Serial Clock):时钟线,由主设备提供时钟信号,用于同步数据传输。
MOSI(Master Out Slave In):主出从入线,数据从主设备发送到从设备。
MISO(Master In Slave Out):主入从出线,数据从从设备发送到主设备。
SS/CS(Slave Select/Chip Select):从设备选择线,用于选择特定的从设备进行通信。
工作原理:SPI采用主从模式,主设备生成时钟信号,并通过MOSI和MISO线与一个或多个从设备进行全双工通信。
速度排名:SPI > UART > I2C
SPI在速度上最具优势,特别适合需要高速传输数据的应用。
UART的速度适中,适合点对点的通信。
I2C速度较慢,但在多设备通信和总线长度有限的情况下有独特的优势。
什么是Quad-SPI?
Quad-SPI 是 SPI 的一种扩展版本,顾名思义,”Quad” 表示它使用了四条数据线进行通信,相比于传统的 SPI 提供了更高的吞吐量。
更多可以参考这篇文章:https://doc.embedfire.com/linux/stm32mp1/hal/zh/latest/doc/chapter22/chapter22.html
PWM(Pulse Width Modulation)是什么?
PWM(脉宽调制)是一种通过调节信号的占空比来控制电压或电流的方法。占空比是指信号在一个周期内处于高电平的时间与整个周期时间的比率。PWM信号通常是一种方波,信号在“高电平”和“低电平”之间切换。
高电平时间:在PWM信号周期中,信号保持在高电平的时间。
低电平时间:在PWM信号周期中,信号保持在低电平的时间。
占空比(Duty Cycle):占空比是指高电平时间占整个周期的百分比。占空比可以从0%(全低电平)到100%(全高电平)之间调整。
例如,如果一个PWM信号的周期为10ms,其中高电平时间为2ms,那么占空比就是20%。
PWM信号在许多应用中被广泛使用,特别是在控制功率传输和模拟信号的模拟化(调制)方面。以下是一些常见的应用场景:
电机控制:通过调节PWM信号的占空比,可以控制直流电机的速度。较高的占空比意味着更多的功率传输,从而使电机转得更快。
LED调光:通过PWM调节LED的亮度。高占空比会让LED更亮,而低占空比则会使其变暗。
音频信号生成:PWM也用于生成音频信号,通过调节频率和占空比可以模拟不同的音频波形。
Atomic Ops Semaphores Mailboxes,EVs
Atomic Ops:确保多核或多线程操作的原子性,避免并发问题。
Semaphores:管理并发访问,确保线程安全的资源访问。
Mailboxes:提供跨线程或跨处理器的消息传递机制,便于通信与协调。
EVs:用于同步和协调线程的执行,基于事件驱动的编程模型。
Timer /Misc Registers
定时器是一个能够在指定时间间隔内生成中断或触发事件的硬件模块。定时器可以配置为单次触发或周期性触发,广泛用于实时操作系统(RTOS)、嵌入式系统、微控制器(MCU)等领域。
Misc Registers(杂项寄存器)通常是指系统中用于各种特殊功能或系统状态管理的寄存器。这些寄存器可能用于配置、状态监控、事件记录等各种操作。
地址映射
在系统中我们通过地址映射来找到对应的模块。
列 | 描述 |
---|---|
Description | 模块名称 |
Address Start | 标识内存或外设在地址空间中的起始点。 |
Address End | 标识内存或外设在地址空间中的终止点。 |
Offset Start | 起始偏移是指该映射区域在目标地址空间中的起始偏移量,这个偏移量通常用于特定的硬件设计中。用于调整或映射内存地址到设备或内存块中的特定地址空间。 |
Offset End | 这是该映射区域在目标地址空间中的结束偏移量。类似于起始偏移,它定义了地址范围中的偏移结束位置,通常与起始偏移一起用于定义内存或外设中的特定区域。 |
Default Length | 确定这个区域占用了多少地址空间。 |
剩下的请参考文档。
时钟
时钟就是一个标注的矩形波,在不同的区域矩形波的频率是不一样的。
PLL锁相环:把晶振稳定时钟频率输出。
晶振(Crystal Oscillator)是一种电子元件,全称为石英晶体振荡器,用于在电路中生成精确且稳定的时钟信号。
它是很多电子设备的核心时钟源。
图中:
OSC晶振 38.4MHz:这是系统的主要时钟源,提供了38.4MHz的基准时钟信号。
PLL(Phase-Locked Loop,锁相环):PLL是用来将晶振的基准时钟信号放大到所需的频率。通过调整PLL的倍频系数,可以生成不同频率的时钟信号,如图中的PLLP、PLLA、PLLC、GPUCLK、CPU时钟等。
————PLLP 外设 408M:可能用于外部设备的时钟。
————PLLA 音频 1.2G:可能用于音频处理器的时钟。
————PLLC 视频 1.2G:可能用于视频处理器的时钟。
————GPUCLK 2.6G、CPU 2.6G:这些是给GPU和CPU的高频时钟信号。
晶振工作原理
石英晶体:晶振内部有一个石英晶体,这是一种压电材料。当对石英晶体施加电压时,它会产生机械振动;相反,当对它施加机械压力时,它会产生电压。这种特性称为压电效应。
振荡:石英晶体在受到外部电场的影响下,会以特定频率振荡,这个频率非常稳定且不受外界温度、电压等因素的影响。因此,晶振可以提供一个非常精确的频率信号。
电路:晶振通过电路放大和反馈其振荡信号,从而产生一个稳定的交流信号(通常是正弦波或方波),这个信号可以作为时钟信号用在各种电子设备中。
晶振用途
晶振在电子设备中广泛应用,主要是作为时钟信号源来驱动设备的各种操作。例如:
微处理器和微控制器:晶振提供系统时钟,确保处理器以正确的速度运行。
通信设备:在通信系统中,晶振用于产生频率基准,确保数据以正确的速率发送和接收。
计算机系统:晶振用于主板上的时钟电路,提供系统时钟信号,协调处理器、内存和其他部件的工作。
音视频设备:晶振用于生成音频和视频信号的时钟,确保信号的同步和稳定。
寄存器设置
分别有三种使能、时钟选择和分频值。
概念 | 描述 |
---|---|
使能(Enable) | 使能通常指的是启用或激活某个功能或模块。在时钟管理中,使能指令用来控制某个时钟源是否被激活。如果时钟源未被使能,那么与之相关的模块将无法正常工作,因为没有时钟信号来驱动它们。 (举例:PLLP外设有一个按钮按一下就进行激活) 启用PLLP(再例如):在上图中,PLLP_ENABLE位的设置可以启用或禁用PLLP。如果这个位设置为1,PLLP会被启用,并开始生成时钟信号;如果设置为0,PLLP会被禁用,不会输出时钟信号。 |
时钟选择(Clock Selection) | 含义:时钟选择决定了一个模块或功能所使用的时钟源。在系统中,通常会有多个时钟源(如PLLP、PLLA、PLLC等),每个时钟源可能有不同的频率和特性。通过选择不同的时钟源,可以为不同的模块或功能提供最合适的时钟信号。 选择PWM时钟源:在CLK_SOURCE_PWM_0寄存器中,CLK_M字段可以选择PWM模块使用的时钟源。这个选择可以根据具体应用需求来决定。例如,某个应用可能需要高精度的时钟源,而另一个应用可能更注重功耗,从而选择不同的时钟源。 |
分频值(Clock Divider/Divisor) | 分频值用于将输入时钟信号的频率降低到所需的输出频率。 分频是通过整数倍数来实现的。 例如,一个输入时钟信号可能是1 GHz,通过设置分频值为2,可以将输出频率降低到500 MHz。 |
在文档中的第五个章节:时钟和复位控制器(CAR)模块负责管理Tegra X1设备的大部分时钟和复位信号。它包含了用于设置时钟频率和复位信号的所有必要逻辑。CAR模块提供了可以用来配置时钟频率(比如调整PLLs)和控制时钟源的寄存器。Tegra X1芯片的主要复位信号是上电复位(SYSRESET_N),由外部电源管理芯片(PMIC)提供。简单来说,CAR模块是Tegra X1的“时钟和复位管理中心”。
当然如何进行控制时钟呢?在5.2章节中写了一推寄存器进行控制。
在5.1.8中描述了:
元件 | 描述 |
---|---|
osc |
Tegra X1平台的主要时钟源是38.4 MHz的晶振。NVIDIA只支持38.4 MHz的晶振频率,其他频率不被支持。 |
clk_m |
由38.4 MHz的主时钟源派生,运行在19.2 MHz。 |
clk_s |
来自系统PMIC的32.768 kHz时钟。 |
使用PLL(Phase-Locked Loop)生成的时钟:这些时钟信号可以通过PLL进行放大或调节,用于不同模块的时钟需求。
时钟 | 描述 |
---|---|
PLLC | 用于相机子系统,频率由相机驱动程序决定。 |
PLLC2 | 用于SE、VIC、TSECB、NVJPG等模块,频率由相应驱动程序决定。 |
PLLP | 外围设备的固定频率PLL,输出频率为408 MHz。 |
PLLA | 用于音频,产生精确的音频采样频率。 |
其他PLL | 如PLLU(用于USB),PLLM(用于DRAM接口),PLLD(用于显示),PLLE(用于PCIe、SATA、USB3)等。 |
分频器设置:部分PLL的输出经过分频器处理,生成不同的时钟频率。
例如:
pllP_out1、pllP_out2:分别从pllP_out0和pllP_VCO进行分频。
pllA_out0:从pllA的输出进行分频。
重新编程时钟源:在增加时钟频率之前,软件需要确保为时钟源和下游设备提供足够的电压。如果时钟频率降低,软件可以通过降低电压来节省能量。
时钟切换和分频器设置:文中强调了在更改时钟源或分频设置时的一些注意事项,以确保系统的稳定性。
PLL模块 | 输出信号 | 频率 | 使用场景/用途 |
---|---|---|---|
PLLC | pllC_out0 | 1.2 GHz | 通用PLL,供给系统中不同的子系统,如音频、视频处理器等。 |
PLLA | pllA_out0 | 1.2 GHz | 用于音频处理,产生精确的音频采样频率。 |
PLLC2 | pllC2_out0 | 1.2 GHz | 用于SE、VIC、TSECB、NVJPG等模块。 |
PLLC3 | pllC3_out0 | 1.2 GHz | 用于NvENC、NvDEC等模块。 |
PLLP | pllP_out0 | 408 MHz | 外围设备的固定频率PLL,供给GPU、SD/eMMC等外设。 |
pllP_out1 | 204 MHz | 分频自pllP_out0,供给外设或其他模块。 | |
pllP_out2 | 56.448/73.728 MHz | 用于GPU功率时钟或其他外设。 | |
pllP_out3 | 102 MHz | 用于CPU时钟。 | |
pllP_out4 | 204 MHz | 分频自pllP_out0,供给其他模块。 | |
pllP_out5 | 56.448/73.728 MHz | 用于GPU功率时钟或其他外设。 | |
PLLM | pllM_out0 | 1.6 GHz | 用于EMC(内存控制器)和MC(嵌入式控制器)。 |
PLLA1 | pllA1_out | 1.2 GHz | 用于音频数字信号处理器(ADSP)。 |
PLLU | PLLU_out1 | 48 MHz | 用于USB2.0时钟。 |
PLLU_out2 | 480 MHz | 用于USB 2.0高速接口时钟。 | |
PLLX | pllX_out0 | 2.6 GHz | 用于CPU和其他需要高速时钟的模块。 |
PLLD | pllD_out0 | 1.5 GHz | 用于显示接口时钟,如DSI显示控制器。 |
PLLD2 | pllD2_out0 | 1.5 GHz | 用于eDP显示接口时钟。 |
PLLDP | pllDP_out0 | 2.5 GHz | 用于Display Port的参考时钟。 |
refPLLE | pllREFE_out1 | 100 MHz | 用于PCIe、SATA、USB3等高速接口。 |
UTMIPLL | - | 480 MHz | 固定频率,用于USB2.0时钟。 |
GHz(千兆赫兹)和MHz(兆赫兹)都是频率的单位,它们之间的换算关系是:
1 GHz = 1000 MHz
PCIE
PCIe(Peripheral Component Interconnect Express) 是一种高速串行计算机扩展总线标准,用于连接计算机主板与各种外围设备(如图形卡、固态硬盘、网络适配器等)。
PCIe有多个版本,每个版本的带宽都有显著提升
PCIe 1.0: 每通道带宽为250 MB/s。
PCIe 2.0: 每通道带宽为500 MB/s。
PCIe 3.0: 每通道带宽为近1 GB/s。
PCIe 4.0: 每通道带宽为近2 GB/s。
PCIe 5.0: 每通道带宽为近4 GB/s。
这幅图展示了PCIe(Peripheral Component Interconnect Express)通信协议的一个简化模型,特别是它在CPU与Wi-Fi模块之间的应用。图中展示了PCIe的各个层级及其在通信过程中如何进行数据传输。
左边是CPU(中央处理器),右边是Wi-Fi模块。这两个组件通过PCIe总线相连,进行数据交换。
图中展示了PCIe协议栈中的三个关键层级,从下到上分别是:
层级 | 描述 |
---|---|
物理层(Physical Layer) | 负责实际的电气信号传输,通过物理信号(如电压变化)在设备之间传递比特位。物理层包括发射(TX+、TX-)和接收(RX+、RX-)信号线,图中表示了信号的方向。 |
数据链路层(Data Link Layer) | 负责确保数据在传输过程中保持完整,并进行错误检测和纠正。这个层次还负责管理数据包的流量控制。 |
传输层(Transaction Layer) | 处理高层协议和数据的传输请求。传输层将数据打包成事务,并通过数据链路层发送出去。 |
图中展示了PCIe使用的四根差分信号线(TX+、TX-、RX+、RX-),它们负责数据的收发。RX表示接收数据,TX表示发送数据。
Tegra X1设备支持最多2个PCIe根端口控制器(root port controllers)。这些控制器用于管理设备与外部PCIe设备之间的通信。
第一个控制器可以配置为4个通道(lanes),第二个控制器可以配置为1个通道,这种配置称为x4 + x1。
也可以将第一个控制器配置为2个通道,第二个控制器保持1个通道,这种配置称为x2 + x1。
通道数量(如x4、x2、x1)表示的是数据传输的并行路径数,更多的通道意味着更高的带宽。
两个PCIe控制器都支持Gen1和Gen2两种速度:
Gen1:每通道的传输速度为2.5 GT/s(250 MB/s)(Gigatransfers per second,每秒千兆传输次数)。
Gen2:每通道的传输速度为5.0 GT/s(500 MB/s)。
如果有多个通道(例如x4),则总带宽是单通道带宽的倍数:
Gen1 x4 的总带宽为 250 MB/s × 4 = 1000 MB/s。
Gen2 x4 的总带宽为 500 MB/s × 4 = 2000 MB/s。
更多可以参考第34章节。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739