【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)
文章目录
- 0. env
- 1. 软件
- 2. 硬件
- 10. 需求
- 1. 硬件
- 2. 软件
- 20. Datasheet
- CPU
- RTC
- 30. 调试步骤
- 1. 硬件环境搭建
- 2. UEFI 开发环境搭建
- 3. 修改步骤
- 1. UEFI 中使能RTC驱动、配置RTC信息等
- 1.1 使能RTC驱动
- 1.2 修改RTC对应的IIC配置信息
- 1.3 解决驱动冲突
- 1.4 验证波形
- 2. 修改对应RTC驱动,适配SD3077
- 1.1 修改IIC3的引脚复用
- 1.2 允许SD3077的写使能功能
- 1.3 验证时间
- 4. 验证
- 90. 附件
- 1. CPU 参考手册
- 2. RTC 参考手册
0. env
1. 软件
开发环境:ubuntu1804
toolchain:飞腾GCC4.9
UEFI:edk2-core-3.5
运行环境:kylin v10 | kernel-5.4 | aarch64 | arm64
2. 硬件
CPU:飞腾 腾锐D2000
RTC:SD3077
硬件连接:CPU(I2C3) — RTC
10. 需求
1. 硬件
RTC 这路的IIC要通信正常
2. 软件
UEFI 中完成RTC更新
linux中可手动更新date
20. Datasheet
CPU
腾锐D2000软件编程手册-V1.1.pdf // 官网下载:略
RTC
SD3077+datasheetv3.4.pdf // 官网下载:参考附件
30. 调试步骤
1. 硬件环境搭建
D2000 核心板 通过I2C3接口外接RTC SD3077
RTC供电3V3
CPU可单独上下电,不影响RTC供电
2. UEFI 开发环境搭建
ubuntu1804 搭建EDK2的环境,飞腾适配过的版本
安装对应toolchain:飞腾GCC4.9
制作bootloader的工程:略
3. 修改步骤
1. UEFI 中使能RTC驱动、配置RTC信息等
vi PhytiumPkg/PhytiumD2000Pkg/PhytiumD2000Pkg.dsc
1.1 使能RTC驱动
!if $(BOARD) == "DEMO"DEFINE HDA_SUPPORT = TRUE
- DEFINE SD3068 = FALSE
+ DEFINE SD3068 = TRUE
remark: 1. 使能这里的SD3068,
从而配置I2C slave addr 为:0x32
配置RTC使用的I2C controller Base Address 为:0x28009000 即I2C3的控制器
1. 如果I2C_RTC_USE没使能,使能后即可使用RTC-efi53 DEFINE I2C_RTC_USE = TRUE
1.2 修改RTC对应的IIC配置信息
- 使能SD3068后
1. 则RTC使用的slave address修改为:0x32529 !if $(SD3068) == TRUE530 gPhytiumPlatformTokenSpaceGuid.PcdRtcI2cControllerSlaveAddress|0x32531 !else532 gPhytiumPlatformTokenSpaceGuid.PcdRtcI2cControllerSlaveAddress|0x68533 !endif
2. 默认使用的是I2C0、I2C1的控制器来操作RTC;实际使用的是I2C3,所以这里的RTC使用的I2C controller的基质要修改为I2C3,即0x28009000 // 参考手册说明# RTC I2C Controller Register Base Address and Speed#
...
- gPhytiumPlatformTokenSpaceGuid.PcdRtcI2cControllerBaseAddress|0x28007000 // IIC1 飞腾空出了I2C0、I2C1
+ gPhytiumPlatformTokenSpaceGuid.PcdRtcI2cControllerBaseAddress|0x28009000 // IIC3 实际使用的是I2C3
- 使能I2C_RTC_USE后
1. 则使用的事Ds1339_RtcLib.inf,对应驱动:./PhytiumPkg/PhytiumD2000Pkg/Library/Ds1339_RtcLib/253 # Board Specific RealTimeClock Library254 !if $(I2C_RTC_USE) == TRUE255 RealTimeClockLib|$(PLATFORM_PACKAGE)/Library/Ds1339_RtcLib/Ds1339_RtcLib.inf256 !else257 RealTimeClockLib|$(PLATFORM_PACKAGE)/Library/XgeneRealTimeClockLib/XgeneRealTimeClockLib.inf258 !endif259 TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf
1.3 解决驱动冲突
驱动冲突,占用了0x28000000,+0x5000的位置,正好囊括了i2c3的地址
1. 如果不用也可以不使能该功能--- a/PhytiumPkg/PhytiumD2000Pkg/Drivers/FixGcdDxe/FixGcdDxe.c
+++ b/PhytiumPkg/PhytiumD2000Pkg/Drivers/FixGcdDxe/FixGcdDxe.c
@@ -54,18 +54,18 @@ InitializeFixGcdDxe ();ASSERT_EFI_ERROR (Status);- Status = gDS->AddMemorySpace (
- EfiGcdMemoryTypeReserved,
- 0x28008000, 0x5000,
- EFI_MEMORY_UC
- );
- ASSERT_EFI_ERROR (Status);
+ //Status = gDS->AddMemorySpace (
+ // EfiGcdMemoryTypeReserved,
+ // 0x28008000, 0x5000,
+ // EFI_MEMORY_UC
+ // );^M
+ //ASSERT_EFI_ERROR (Status);- Status = gDS->SetMemorySpaceAttributes (
- 0x28008000, 0x5000,
- EFI_MEMORY_UC
- );
- ASSERT_EFI_ERROR (Status);
+ //Status = gDS->SetMemorySpaceAttributes (
+ // 0x28008000, 0x5000,
+ // EFI_MEMORY_UC
+ // );
+ //ASSERT_EFI_ERROR (Status);return Status;}
1.4 验证波形
编译后,测量I2C3这一路的信号,正常会产生RTC读写信号
2. 修改对应RTC驱动,适配SD3077
使用上述修改,则需要修改的驱动为:./PhytiumPkg/PhytiumD2000Pkg/Library/Ds1339_RtcLib/*
1.1 修改IIC3的引脚复用
- rtc-efi不需要依赖ACPI配置RTC,管脚引用可以直接放在驱动中执行。
- I2C3 管脚复用信息如下:
控制域 | … | Func2 |
---|---|---|
hdt_mb_done_state_pad | … | i2c_3_scl |
hdt_mb_fail_state_pad | … | i2c_3_sda |
- I2C3 引脚功能配置寄存器:
偏移 | 位域 | 说明 |
---|---|---|
0x0204 | [3 : 2] | 控制 hdt_mb_done_state_pad 的上下拉 |
0x0204 | [1 : 0] | 控制 hdt_mb_done_state_pad 的复用功能 |
0x0208 | [31 : 30] | 控制 hdt_mb_fail_state_pad 的上下拉 |
0x0208 | [29 : 28] | 控制 hdt_mb_fail_state_pad 的复用功能 |
实际使用:I2C3,则需要复用 这两个pin为Func2
即:
SCL : 0x28180000 + 0x0204 : [3:0] : 写入0010
SDA : 0x28180000 + 0x0208 : [31:28] : 写入0010
- 在源码驱动初始化程序段中添加管脚复用
vi PhytiumPkg/PhytiumD2000Pkg/Library/Ds1339_RtcLib/Ds1339_RtcLib.c
1. 在LibRtcInitialize中添加服用程序@@ -980,8 +1016,20 @@ LibRtcInitialize (mRtcBase = PcdGet64 (PcdRtcI2cControllerBaseAddress);mSlaveaddress = PcdGet32 (PcdRtcI2cControllerSlaveAddress);
+ /* I2C3 :
+ SCL : 0x28180000 + 0x0204 : [3:0] : Pll FUNC2
+ SDA : 0x28180000 + 0x0208 : [31:28] : Pll FUNC2
+ */
+ Reg = MmioRead32(0x28180204);
+ MmioWrite32(0x28180204, (Reg & (~(0xff << 0))) | (0x22 << 0));
+ Reg = MmioRead32(0x28180208);
+ MmioWrite32(0x28180208, (Reg & (~(0xff << 28))) | (0x22 << 28));
...
1.2 允许SD3077的写使能功能
- 3077又写保护功能,要想在操作系统中正常使用hwclock之类的命令,需要提前禁止写保护功能(客户要求)
- 关于3077芯片写保护的禁止与使能说明如下:
2.1 寄存器说明:
3. 按文档说明,做如下设置禁止写保护功能:
先配置WRTC1 : 0x10 赋值 1xxx xxxx // 实际使用值为0x80
再配置WRTC2,3 : 0x0f 赋值 1xxx x1xx // 厂商建议值0xff,实际使用值为0x84
- 修改源码,加入上述配置寄存器禁止写保护的代码段:
vi PhytiumPkg/PhytiumD2000Pkg/Library/Ds1339_RtcLib/Ds1339_RtcLib.c
+#ifdef RTC_FIX
+ /* I2C3 :
+ SCL : 0x28180000 + 0x0204 : [3:0] : Pull FUNC2
+ SDA : 0x28180000 + 0x0208 : [31:28] : Pull FUNC2
+ */
+ Reg = MmioRead32(0x28180204);
+ MmioWrite32(0x28180204, (Reg & (~(0xff << 0))) | (0x22 << 0));
+ Reg = MmioRead32(0x28180208);
+ MmioWrite32(0x28180208, (Reg & (~(0xff << 28))) | (0x22 << 28));
+
+ if(mSlaveaddress == CONFIG_RTC_SD3068){
+ SD3068EnableRegWrite (mSlaveaddress);
+ }
+#endif
+#ifdef RTC_FIX
+VOID
+EFIAPI
+SD3068EnableRegWrite (
+ IN UINT32 mSlaveaddress
+ )
+{
+ UINT8 Buffer;
+ Buffer = rtc_read (0x10, mSlaveaddress);
+ Buffer |= (1 << 7);
+ rtc_write (0x10, Buffer, mSlaveaddress);
+
+ Buffer = rtc_read (0x0f, mSlaveaddress);
+ Buffer |= (1 << 2);
+ Buffer |= (1 << 7);
+ rtc_write (0x0f, Buffer, mSlaveaddress);
+
+}
+#endif /* ifdef RTC_RIX */
1.3 验证时间
- 启动到操作系统后,查看内核log,看一下rtc-efi打印
参考log:
root@kylin-pc:~# dmesg | grep rtc
[ 1.087034] rtc-efi rtc-efi: registered as rtc0
[ 1.093138] rtc-efi rtc-efi: setting system clock to 2024-04-12T12:13:51 UTC (1712924031)
4. 验证
- 启动到操作系统,使用date修改系统时间,使用hwclock修改RTC时间
- reboot操作系统
- 查看当前系统时间是否与RTC时间保持一致,即验证RTC功能是否正常
- 设备下电一段时间后,重新上电
- 上电后再次确认时间
参考log如下:
root@kylin-pc:~# date
1970年 01月 01日 星期四 08:00:19 CST
root@kylin-pc:~#
root@kylin-pc:~# date -s "2024-04-13 11:11:00"
2024年 04月 13日 星期六 11:11:00 CST
root@kylin-pc:~#
root@kylin-pc:~# hwclock -w
root@kylin-pc:~#
root@kylin-pc:~# hwclock -r
2024-04-13 11:11:14.212325+08:00
root@kylin-pc:~#
root@kylin-pc:~# reboot// rebootroot@kylin-pc:~#
root@kylin-pc:~# date
2024年 04月 13日 星期六 11:13:12 CST
root@kylin-pc:~# // 设备断电几分钟后,再次上电。RTC保持供电root@kylin-pc:~#
root@kylin-pc:~# date
2024年 04月 13日 星期六 11:27:48 CST
root@kylin-pc:~#
root@kylin-pc:~# dmesg | grep rtc
[ 1.091921] rtc-efi rtc-efi: registered as rtc0
[ 1.098025] rtc-efi rtc-efi: setting system clock to 2024-04-13T11:27:26 UTC (1713007646)
root@kylin-pc:~#
90. 附件
1. CPU 参考手册
略
2. RTC 参考手册
https://www.whwave.com.cn/cpscxz
相关文章:

【Phytium】飞腾D2000 UEFI/EDK2 适配 RTC(IIC SD3077)
文章目录 0. env1. 软件2. 硬件 10. 需求1. 硬件2. 软件 20. DatasheetCPURTC 30. 调试步骤1. 硬件环境搭建2. UEFI 开发环境搭建3. 修改步骤1. UEFI 中使能RTC驱动、配置RTC信息等1.1 使能RTC驱动1.2 修改RTC对应的IIC配置信息1.3 解决驱动冲突1.4 验证波形 2. 修改对应RTC驱动…...

如何利用纯前端技术,实现一个网页版视频编辑器?
纯网页版视频编辑器 一、前言二、功能实现三、所需技术四、部分功能实现4.1 素材预设4.2 多轨道剪辑 一、前言 介绍:本篇文章打算利用纯前端的技术,来实现一个网页版的视频编辑器。为什么突然想做一个这么项目来呢,主要是最近一直在利用手机…...

stm32实现hid键盘
前面的cubelmx项目配置参考 stm32实现hid鼠标-CSDN博客https://blog.csdn.net/anlog/article/details/137814494?spm1001.2014.3001.5502两个项目的配置完全相同。 代码 引用 键盘代码: 替换hid设备描述符 先屏蔽鼠标设备描述符 替换为键盘设备描述符 修改宏定…...

【单例模式】饿汉式、懒汉式、静态内部类--简单例子
单例模式是⼀个单例类在任何情况下都只存在⼀个实例,构造⽅法必须是私有的、由⾃⼰创建⼀个静态变量存储实例,对外提供⼀个静态公有⽅法获取实例。 目录 一、单例模式 饿汉式 静态内部类 懒汉式 反射可以破坏单例 道高一尺魔高一丈 枚举 一、单例…...

windows关闭Windows Search功能
我发现windows最恶心的功能就是自动更新和搜索。自动更新就是个毒瘤,得到了全世界的人讨厌。 而搜索功能难用、慢和造成卡死,根本没有存在的必要。并且他的windows search filter服务会在每次移动大量文件后建立索引,持续的占用cpu和硬盘的资…...

政安晨:【深度学习神经网络基础】(九)—— 在深度学习神经网络反向传播训练中理解梯度
目录 简述 理解梯度 什么是梯度 计算梯度 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 简述 在深度…...

免费的 ChatGPT、GPTs、AI绘画(国内版)
🔥博客主页:白云如幻❤️感谢大家点赞👍收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚…...
UniApp 微信小程序:在 onLaunch 中等待异步方法执行完成后,再调用页面中的接口
最近遇到了一个问题:在 App.vue 中的 onLaunch 中调用登录接口时,由于异步登录尚未完成就调用了 index 页面的接口,导致 token 异常。如何确保页面在 App 中的 onLaunch 执行完毕后再继续执行呢? 在网上查阅了一些资料,…...

【招贤纳士】长期有效
【招贤纳士】长期有效,有意者联系 一、SLAM算法工程师工作内容:任职资格: 二、规划算法工程师工作内容:任职资格: 三、感知算法工程师岗位职责:任职要求:加分项: 四、传感器系统工程…...

华为配置静态ARP示例
华为配置静态ARP示例 组网图形 图1 配置静态ARP组网图 静态ARP简介配置注意事项组网需求配置思路操作步骤配置文件相关信息 静态ARP简介 静态ARP表项是指网络管理员手工建立IP地址和MAC地址之间固定的映射关系。 正常情况下网络中设备可以通过ARP协议进行ARP表项的动态学习&…...

LRTimelapse for Mac:专业延时摄影视频制作利器
LRTimelapse for Mac是一款专为Mac用户设计的延时摄影视频制作软件,它以其出色的性能和丰富的功能,成为摄影爱好者和专业摄影师的得力助手。 LRTimelapse for Mac v6.5.4中文激活版下载 这款软件提供了直观易用的界面,用户可以轻松上手&#…...

Java复习第十九天学习笔记(Cookie、Session登录),附有道云笔记链接
【有道云笔记】十九 4.7 Cookie、Session登录 https://note.youdao.com/s/VwpxfEim 一、会话技术简介 生活中会话 我: 小张,你会跳小苹果码? 小张: 会,怎么了? 我: 公司年会上要表演节目&a…...

HBase的数据模型与架构
官方文档:Apache HBase – Apache HBase™ Homehttps://hbase.apache.org/ 一、HBase概述 1.概述 HBase的技术源自Google的BigTable论文,HBase建立在Hadoop之上,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于…...

卷积神经网络的结构组成与解释(详细介绍)
文章目录 前言 1、卷积层 2、激活层 3、BN层 4、池化层 5、FC层(全连接层) 6、损失层 7、Dropout层 8、优化器 9、学习率 10、卷积神经网络的常见结构 前言 卷积神经网络是以卷积层为主的深层网络结构,网络结构包括有卷积层、激活层、BN层、…...
使用ansible的连通性检查的关键参数
使用ansible进行ping命令的时候发现有些不通 ansible cba -m ping 10.1.1.1 | FAILED! > {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this h…...

Jenkins用maven风格build报错解决过程记录
1、Jenkins2.453新建项目,构建风格选的maven 2、自由风格构建部署没有任何问题,但是maven风格build一直失败,报错如下图 3、解决方案:在系统管理–系统配置–Maven项目配置,删除全局MAVEN_OPT的路径信息,…...

Web3.0与AI的交融:开启智能互联网新时代
目前有140 多个 Web3 AI 概念项目,覆盖了基础设施、数据、预测市场、计算与算力、教育、DeFi & 跨链、安全、NFT & 游戏 & 元宇宙、搜索引擎、社交 & 创作者经济、AI 聊天机器人、DID & 消息传递、治理、医疗、交易机器人等诸多方向。持续关注…...
自动化_Ansible学习笔记
文章目录 Ansible 介绍配置文件主配置文件优先级 常用命令ansible-playbook ad-hocinventory 主机清单Playbook 剧本YAML格式 ansible 模块介绍模块对应功能Commands modules(命令模块)command (命令)shell (外壳) 官方帮助文档 模块索引playbook 开头示例系统类setup (收集远程…...

用于密集视觉冲击的紧凑三维高斯散射Compact 3D Gaussian Splatting For Dense Visual SLAM
Compact 3D Gaussian Splatting For Dense Visual SLAM 用于密集视觉冲击的紧凑三维高斯散射 Tianchen Deng 邓天辰11Yaohui Chen 陈耀辉11Leyan Zhang 张乐妍11Jianfei Yang 杨健飞22Shenghai Yuan 圣海元22Danwei Wang 王丹伟22Weidong Chen 陈卫东11 Abstract 摘要 …...
ChatGPT揭秘:高效论文写作的秘籍
ChatGPT无限次数:点击直达 ChatGPT揭秘:高效论文写作的秘籍 引言 在当今信息爆炸的时代,高效撰写论文对于研究者和学术工作者至关重要。随着人工智能技术的不断发展,ChatGPT等自然语言处理工具的出现为论文写作提供了全新的思路和工具。本文…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
git: early EOF
macOS报错: Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
MySQL基本操作(续)
第3章:MySQL基本操作(续) 3.3 表操作 表是关系型数据库中存储数据的基本结构,由行和列组成。在MySQL中,表操作包括创建表、查看表结构、修改表和删除表等。本节将详细介绍这些操作。 3.3.1 创建表 在MySQL中&#…...

vue3 手动封装城市三级联动
要做的功能 示意图是这样的,因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...