QRB5165 硬件设计指南(2)

150 篇文章 7 订阅
25 篇文章 0 订阅


4 SoC子系统

4.1 处理器

Kryo 585 应用处理器
Kryo 585应用处理器的特性如下:

  • 定制的 64 位 Arm® v8.2 兼容八核 Kryo 应用处理器
  • 八个 Kryo 核心组织成两个集群:
    • 四个高性能 Kryo 核心 – Gold cluster
      • 三个目标频率为 2.5 GHz 的 Gold 核心
      • 一个 Gold prime 核心,主频为 2.8 GHz
    • 四个低功耗 Kryo 核心,四核目标频率为 1.7 GHz – 银色簇
  • 每个 Kryo Gold 核心和每个 Kryo Silver 核心都有专用的 L2 缓存
  • L3 共享缓存 4 MB
    请添加图片描述
图片 : 1.Kryo 585 应用处理器

Kryo 585 总线电源

SMPS 输出 S7A、S8A 和 S9A 在 PMIC 处连接在一起,并作为单个走线路由至 Kryo Gold 集群。SMPS 输出 S10A 作为单独的走线路由至 Kryo Silver 集群。

QRB5165 器件内的每个 Kryo 内核都有一个全局分布式头开关 (GDHS) 为内核供电。

将 3 端子 (3T) 输出大容量电容器尽可能靠近 QRB5165 器件放置,以减少串联电阻并确保瞬态性能。

请添加图片描述

图片 : 2.Kryo 585 电源

Kryo 时钟和电压控制器

高性能(金牌)集群和低功耗(银牌)集群以及各自的二级缓存可以在不同频率的不同时钟源上运行。

  • 在银色集群中,所有四个 CPU 和 L2 都是同步的。
  • 在黄金集群中,带有 L2 的 CPU7(主核心)有自己的时钟源,带有 L2 的 CPU4-6 是同步的。
    共享 4 MB L3 缓存(与 APC0 共享电源,但 L3 频率可以与 APC0 不同)。

在 QRB5165 器件启动期间,为了执行应用程序主启动加载程序 (PBL),仅打开 CPU0。

请添加图片描述

图片 : 3. Kryo 时钟和电压控制

4.2记忆

QRB5165 支持内部、外部、PoP、LPDDR 内存以及 UFS 存储。

4.2.1 内部存储器

QRB5165 内部存储器支持以下功能:

  • 引入系统缓存(3 MB)以提高内存系统的性能
    • 附加缓存容量
      • 为单线程工作负载提供 7 MB 总缓存(3 MB 系统缓存 + 4 MB Kryo L3 缓存)
    • 允许与其他块更好地共享数据
      改善服务质量
  • IMEM (256 KB) 用于系统内存
    • 这是片上存储器,以减少对LPDDR5的依赖
    • 这是处理器间内存
    • 这也是 TrustZone 内核的安全内存
  • GMEM (1.25 MB) 专用于图形用例
  • PIMEM(伪 IMEM)加密的、完整性保护的内存区域
  • 引导ROM
  • 此外,还有多个本地存储器 (SRAM) 支持每个子系统

4.2.2 外部存储器

下表列出了 QRB5165 支持的外部存储器配置和设备。

在这里插入图片描述
以下是 QTI QRB5165 + 4G/5G 平台上使用的一些内存:

  • K3LK2K20BM-BGCN (6 GB LPDDR5)
  • THGJFCT0T44BAIL (128 GB UFS3.0)
  • KLUDG4UHDB-B2D1(128 GB UFS3.0)

笔记
16 GB 的最大 DRAM 密度仅来自硬件功能,并且取决于内存供应/验证。

笔记
正式宣布芯片组通过 CS 后,所有经过验证的 DDR 部件号将在 Qualcomm 网站上列出(要查看这些部件号,请单击“硬件组件”选项卡并选择“内存”)。

4.2.3 弹出存储器

PoP 技术使用额外的顶部基板来容纳区域阵列内存封装。

QRB5165 器件 PoP 支持 64 位 (4 × 16) 4 通道堆叠存储器 LPDDR5,从而提高操作带宽并简化布线 — 无需预堆叠。该技术包括低封装翘曲。

有关详细信息,请参阅SM8250/SXR2130/QRB5165/QCS8250/QCS8245 的 PoP 内存建议(80-VP300-16)。

请添加图片描述

图片 : 1. PoP 内存

4.2.4 LPDDR内存

下表显示了 QRB5165-MPSP1099 的底部 BGA 引脚名称。

在这里插入图片描述
通过正确的 BOM 配置,可以实现支持 LPDDR5 的单个 PCB 设计,如下所述。

在这里插入图片描述

图:1.QRB5165原理图 – LPDDR5

LPDDR5 的控制 – VDD2H

  • 连接专用于 PM3003A 的 QRB5165 的任何未使用的 QUP I 2 C(非 SSC QUP)。这是推荐配置。
  • 如果使用所有 QUP I 2 C(非 SSC QUP),则 PM3003A 的 I 2 C 可以在任何 QRB5165 QUP I 2 C(其主控为 TZ)上与其他外围设备共享。
  • PM3003A I 2 C(非 SSC QUP)可在HLOS 控制的任何 QRB5165 QUP I 2 C 上与其他外围设备共享。这是最不推荐的配置。
  • 对于上述三种配置,请使用在开发期间安装在 PM3003A I 2 C 上的 0 Ω 串联电阻。这些 0 Ω 电阻需要在生产中进行 DNI 以避免恶意访问。

4.2.5 通用闪存 (UFS)

UFS 主机控制器符合以下规范:

  • 通用闪存存储 (UFS) (JESD220C) 的 JEDEC 规范 – v3.0
  • UFS 主机控制器接口 (JESD223C) 的 JEDEC 规范 – v3.0
  • MIPI 联盟统一协议规范 (UniPro) – v1.8(2 通道 UFS0)/v1.6(1 通道 UFS1)
  • MIPI 联盟 M-PHY 规范 – v4.1

笔记
QRB5165 提供 1 个 2 通道 UFS 3.1 端口。

请添加图片描述

图片 : 1.通用闪存
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
将RSA公钥表示成字符串的形式,在进行加密时需要先将其转换成公钥结构体类型,然后再使用mbedtls库提供的接口进行加密。 以下是一个示例代码,假设公钥数据已经以字符串的形式存储在`public_key_str`中: ```c #include "mbedtls/rsa.h" #include "mbedtls/pk.h" // RSA公钥字符串 const char *public_key_str = "-----BEGIN PUBLIC KEY-----\n" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw7Yj9RbqL6pG9Sv3GnZg\n" "h0T3Wz5c0XeX5G8tF/NVbzXUEDRqOZkdt3jv5+0fV5hX6gDZGxhW2k6B9GjPf4XQ\n" "TFYFhCjG5+Y2u4kR7BF0/3KzVcDKMxYmKo7rj2y5OvI5u5zPj6VhKRMoV9JNv5oM\n" "gGpZoF2LwRjuzl7a2MfPZz3+J8+htnLWlVwJyvGn1+sIi3rY9yjV9I6X1hPcqKb8\n" "0KaD0B20qRb4H7rG9yf9FwK7DcC+Zf9jJv4nI8UvRhQ/2zOj9fvy/1aRDN3qQ3Sf\n" "cLJ7fW1dK2RzB5E5XfJZkJwvZVfLHt/1QZGjz5QIg4sB9Xc2zQXmZL+LwN0CF0k+\n" "iwIDAQAB\n" "-----END PUBLIC KEY-----\n"; // 加密函数 int rsa_encrypt(const unsigned char *input, size_t ilen, unsigned char *output, size_t *olen) { int ret = 0; mbedtls_pk_context pk; mbedtls_rsa_context *rsa = NULL; // 初始化公钥结构体 mbedtls_pk_init(&pk); // 解析公钥字符串,填充到公钥结构体 ret = mbedtls_pk_parse_public_key(&pk, (const unsigned char *)public_key_str, strlen(public_key_str) + 1); if (ret != 0) { mbedtls_pk_free(&pk); return ret; } // 获取RSA公钥结构体 rsa = mbedtls_pk_rsa(pk); if (rsa == NULL) { mbedtls_pk_free(&pk); return MBEDTLS_ERR_RSA_BAD_INPUT_DATA; } // 进行加密操作 ret = mbedtls_rsa_pkcs1_encrypt(rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, ilen, input, output); if (ret != 0) { mbedtls_pk_free(&pk); return ret; } // 获取输出数据长度 *olen = mbedtls_rsa_get_len(rsa); // 释放资源 mbedtls_pk_free(&pk); return 0; } // 主函数 int main(void) { unsigned char input[] = "Hello, world!"; unsigned char output[256] = {0}; size_t olen = 0; int ret = 0; // RSA加密 ret = rsa_encrypt(input, sizeof(input) - 1, output, &olen); if (ret != 0) { printf("RSA encrypt error: %d\n", ret); return ret; } // 输出加密结果 printf("Encrypted message: "); for (size_t i = 0; i < olen; i++) { printf("%02X ", output[i]); } printf("\n"); return 0; } ``` 在上述代码中,`rsa_encrypt`函数用于进行RSA加密,输入数据为`input`,输入数据长度为`ilen`,输出数据为`output`,输出数据长度为`olen`。`main`函数中,调用`rsa_encrypt`函数进行加密,将加密结果输出到控制台上。 需要注意的是,在进行加密操作时,需要对输出缓冲区进行合适的大小分配。在上述代码中,输出缓冲区的大小为256字节,这个大小需要根据加密数据的长度和RSA密钥长度来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值