当前位置: 首页 > news >正文

构建全志 T113 Tina SDK

1、环境配置:

准备一个 Ubuntu 系统,可以是 WSL,虚拟机等,建议版本是 20.04。

1.1、安装必要的软件

进入系统后,输入下方命令安装需要的工具 :

sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \
libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim make make-guile gcc g++ wget xmlto xxd zlib1g-dev

 

1.2、安装 repo:

repo 是 Google 开发的用于管理 Android 版本库的一个工具,repo 是使用 Python 对 git 进行了一定的封装,并不是用于取代 git,它简化了对多个 git 版本库的管理。用 repo 管理的版本库都需要使用 git 命令来进行操作。

因此,使用 repo 工具之前,请先确保已经安装 git。

为什么要用 repo? 项目模块化/组件化之后各模块也作为独立的 git 仓库从主项目里剥离了去,各模块各自管理自己的版本。

下载 repo 文件

sudo curl -o /usr/bin/repo https://storage.googleapis.com/git-repo-downloads/repo

设置执行权限

sudo chmod a+x /usr/bin/repo

检查是否成功安装

repo --version

1.3、更换为国内镜像源

echo export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo' >> ~/.bashrc​
source ~/.bashrc

1.4、配置保存身份认证:

新版本 git 默认加强了安全性,身份认证不会保存,导致拉取 repo 需要多次输入密码,可以用下列命令配置。

git config --global credential.helper store

2、SDK 拉取

2.1、新建一个目录用来存放 SDK

mkdir tina-sdkcd tina-sdk

2.2、初始化仓库

使用 repo init 命令初始化仓库,tina-d1-h 的仓库地址是 https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git 需要执行命令:

​repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml

如果提示 Username for 'https://sdk.aw-ol.com': 请输入 全志在线开发者论坛 的用户名和密码 。

需要自己先去全志在线开发者论坛创建一个账号,先之前的经验贴说要升到 v2 才有权限下载,升一级还是容易的,但是经过测试现在是创建账号后就能下载。

2.3、使用命令 repo sync 拉取 SDK,由于 SDK 普遍较大,拉取可能需要一定的时间

repo sync

2.4、使用命令 repo start 创建开发环境分支

repo start product-smartx-d1-h-tina-stable-v2.0 --all

3、SDK 配置

3.1、当前克隆项目运行 source build/envsetup.sh 会存在以下报错:

bash: build/envsetup.sh: line 1: syntax error near unexpected token `$'{\r''

bash: build/envsetup.sh: line 1: `function hmm() { 

解决方法:使用 dos2unix 批量将文件转换为 unix 格式 。

sudo apt install dos2unix find -type f | xargs dos2unix

3.2、合入 100ASK 的 T113-S3 补丁

由于全志默认的 SDK 没有提供 T113 的支持,所以需要打百问网的 T113 补丁。

此处需要在根目录操作,否则会污染下载到的tina-sdk。

cd ~​
git clone https://github.com/DongshanPI/100ASK_T113-Pro_TinaSDK.gitcd 100ASK_T113-Pro_TinaSDK git submodule update --init # 替换实际的tina-sdk路径cp ./* -rfvd ~/tina-sdk 

3.3、初始化编译环境

cd tina-sdksource build/envsetup.sh lunch You're building on Linux 
Lunch menu... pick a combo: 1. d1-h_nezha-tina 2. d1-h_nezha_min-tina 3. d1s_nezha-tina 4. t113_100ask-tina 
Which would you like? [Default d1s_nezha]: 4 

按照以上步骤进入编译环境后,输入以下命令可进入linux内核配置:

make kernel_menuconfig

输入下列命令,可以进入Tina配置界面:

make menuconfig

4、修改配置文件

系统分区配置:

;---------------------------------------------------------------------------------------------------
; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
;---------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------
;                                   固件下载参数配置
;---------------------------------------------------------------------------------------------------
;***************************************************************************************************
;    mbr的大小, 以Kbyte为单位
;***************************************************************************************************
[mbr]
size = 16384;***************************************************************************************************
;                                              分区配置
;
;
;  partition 定义范例:
;    [partition]                ;  //表示是一个分区
;    name        = USERFS2      ; //分区名称
;    size        = 16384        ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T
;    downloadfile = "123.fex"   ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径
;    keydata     = 1            ; //私有数据分区,重新量产数据将不丢失
;    encrypt     = 1            ; //采用加密方式烧录,将提供数据加密,但损失烧录速度
;    user_type   = ?            ; //私有用法
;    verify      = 1            ; //要求量产完成后校验是否正确
;
; 注:1、name唯一, 不允许同名
;     2、name最大12个字符
;     3、size = 0, 将创建一个无大小的空分区
;     4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size)
;***************************************************************************************************
[partition_start][partition]name         = boot-resourcesize         = 504downloadfile = "boot-resource.fex"user_type    = 0x8000[partition]name         = envsize         = 504downloadfile = "env.fex"user_type    = 0x8000[partition]name         = env-redundsize         = 504downloadfile = "env.fex"user_type    = 0x8000[partition]name         = bootsize         = 10080downloadfile = "boot.fex"user_type    = 0x8000[partition]name         = rootfssize         = 126000downloadfile = "rootfs.fex"user_type    = 0x8000;[partition]
;    name         = dsp0
;    size         = 2048
;    downloadfile = "dsp0.fex"
;    user_type    = 0x8000;[partition]
;    name         = recovery
;    size         = 16128
;    ;downloadfile = "recovery.fex"
;    user_type    = 0x8000[partition]name         = privatesize         = 10240user_type    = 0x8000[partition]name         = rootfs_datasize         = 10240user_type    = 0x8000[partition]name         = UDISKname         = rootfs_datasize         = 10240user_type    = 0x8000

替换:tina-sdk/device/config/chips/t113/configs/100ask/sys_partition.fex。

5、修改 U-Boot 打印串口

5.1、修改配置文件

从 device/config/chips/t113/configs/100ask/BoardConfig.mk 中找到使用的 U-Boot 配置,将其打印串口改为 UART3,可以发现使用的 U-Boot 配置为 sun8iw20p1_uart3_defconfig。

找到文件并修改 tina-sdk/lichee/brandy-2.0/u-boot-2018/configs/sun8iw20p1_uart3_defconfig,将 CONFIG_CONS_INDEX 的值改为 4(串口号+1)。

找到并修改 tina-sdk/device/config/chips/t113/configs/100ask/sys_config.fex 文件,按图配置串口号和所用的引脚。

查看数据手册引脚复用,发现 PE8 和 PE9 的串口功能是 FUNC5,所以 uart_debug_tx/rx 的配置为 <5><1><default><default>。

5.2、修改设备树

修改设备树,找到 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件,在 pio 节点下配置 uart3 的引脚复用功能。

开启 uart3。

5.3、修改寄存器地址

修改 uboot 环境变量文件 tina-sdk/device/config/chips/t113/configs/100ask/env.cfg。

earlyprintk=sunxi-uart,0x02500000 需要修改为 UART3 的地址,查阅手册可知为 0x02500C00。

12849b33-3786-417e-b2fe-7736c04d4b38-image.png

输入make kernel_menuconfig 找到 Kernel low-level debugging functions 进行勾选。

6、解决编译报错问题

6.1、configure: error: XML::Parser perl module is required for intltool 

输入make menuconfig,在 Libraries 目录下关闭 libxkbcommon 和 xkeyboard-config。

6.2、Qt下载失败问题

如果不需要使用 Qt 的话,输入 make menuconfig 关闭 Qt。

6.3、OpenSSH编译问题

修改 tina-sdk/package/network/openssh/Makefile,直接将版本修改为 8.9p1,即可解决编译问题。

7、编译,打包,烧入

输入下列命令,开始构建系统 :

# -j16 指的是使用16线程编译,实际编译时可按照电脑配置来选择使用多少线程编译。
make -j16

 输入下列命令,开始单独构建 U-Boot:

mboot

输入下列命令,开始单独构建内核(构建系统会顺带构建内核):

mkernel 

输入下列命令,开始打包系统 :

pack 

将 SD 卡插入电脑,打开 PhoenixCard.exe,点击固件,加载 img 固件,然后选择启动卡,再点击烧卡即可,需要注意的是,一定要选择启动卡,否则会启动失败!

烧入软件为 PhoenixCard,链接如下,还有一些 T113 的开发文档:

链接: https://pan.baidu.com/s/1hWomuwc-f8OFpt_LMr4Oqg?pwd=ej2v

提取码: ej2v

8、文件系统只读解决方法

这个问题是因为根文件系统是 SquashFS 类型,且挂载为只读 (ro),需要使用 OverlayFS 让文件系统支持写操作。

默认 Tina-Linux 配置可能没有选中 e2fsprogs 包,导致第一次开机无法执行 ext4 格式化数据分区,只要在配置中开启 e2fsprogs 即可,OverlayFS 文件系统可以类似达到把只读文件系统改为可写文件系统的效果。

8.1、make menuconfig 打开 e2fsprog

8.2、make kernel_menuconfig 打开 ext4

8.3、修改设备树

如果你的原理图中 SD 卡如下图所示,则需要修改设备树,否则不需要修改设备树。

在百问网的补丁包基础上修改了串口之后烧录系统启动后会发现 can't open blockdev,原因是因为默认检测低电平为 SD 卡插入。

但是 SD 卡座 det 脚为高电平有效,所以这边不再使用 det 脚检测 SD 卡,而是使用轮询方式修改设备树,把 cd-gpios 注释掉,然后取消broken-cd的注销。

修改 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件。

9、没有 eth0 网络接口解决方法

修改 tina-sdk/device/config/chips/t113/configs/100ask/board.dts 文件后,重新编译打包。

9.1、找到 pio 节点中的子节点 gmac0_pins_a 和 gmac0_pins_b

# 修改前:

gmac0_pins_a: gmac@0 {
        allwinner,pins = "PE0", "PE1", "PE2", "PE3", "PE4",
                 "PE5", "PE6", "PE7","PE8", "PE9";
        allwinner,function = "gmac0";
        allwinner,muxsel = <8>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

gmac0_pins_b: gmac@1 {
        allwinner,pins = "PE0", "PE1", "PE2", "PE3", "PE4",
                 "PE5", "PE6", "PE7","PE8", "PE9";
        allwinner,function = "gpio_in";
        allwinner,muxsel = <0>;
        allwinner,drive = <1>;
        allwinner,pull = <0>;
    };

# 修改后:gmac0_pins_a: gmac@0 {allwinner,pins = "PG0", "PG1", "PG2", "PG3","PG4", "PG5", "PG6","PG7","PG8","PG9",  "PG10","PG11","PG12","PG13","PG14", "PG15";allwinner,function = "gmac0";allwinner,muxsel = <8>;allwinner,drive = <1>;allwinner,pull = <0>;};gmac0_pins_b: gmac@1 {allwinner,pins = "PG0", "PG1", "PG2", "PG3","PG4","PG5", "PG6","PG7","PG8","PG9", "PG10", "PG11","PG12","PG13","PG14", "PG15";allwinner,function = "gpio_in";allwinner,muxsel = <0>;allwinner,drive = <1>;allwinner,pull = <0>;};

9.2、找到 gmac0 节点

# 修改前:

&gmac0 {
    pinctrl-0 = <&gmac0_pins_a>;
    pinctrl-1 = <&gmac0_pins_b>;
    pinctrl-names = "default", "sleep";
    phy-mode = "rmii";
    use_ephy25m = <0>;
    tx-delay = <3>;
    rx-delay = <0>;
    phy-rst = <&pio PE 10 GPIO_ACTIVE_HIGH>;
    status = "okay";
};

# 修改后:&gmac0 {pinctrl-0 = <&gmac0_pins_a>;pinctrl-1 = <&gmac0_pins_b>;pinctrl-names = "default", "sleep";phy-mode = "rgmii";use_ephy25m = <0>;gmac-power0-vol = <3300000>;tx-delay = <4>;rx-delay = <15>;
//    phy-rst = <&gpio_ext 2 GPIO_ACTIVE_HIGH>;status = "okay";
};

参考文章链接:https://www.cnblogs.com/TheGathering/p/18137803

以上就是构建 T113 Tina-SDK 的全部内容,如果有什么疑问或者建议欢迎在评论区里提出来嗷。

相关文章:

构建全志 T113 Tina SDK

1、环境配置&#xff1a; 准备一个 Ubuntu 系统&#xff0c;可以是 WSL&#xff0c;虚拟机等&#xff0c;建议版本是 20.04。 1.1、安装必要的软件 进入系统后&#xff0c;输入下方命令安装需要的工具 &#xff1a; sudo apt update -y sudo apt full-upgrade -y sudo apt i…...

(推荐)【通用业务分发架构】1.业务分发 2.rpc调用 3.Event事件系统

一.Reflections和SpringUtil完成扫描包的(反射缓存) 二.id与class的映射泛型上下文(玩家是否登录&#xff0c;rpc调用SeqId&#xff0c;class类名)反射调用 1.netty层的 AccountMsgParam // 登录前 OnlineMsgParam // 登录后 SceneMsgParam // 发到场景层的 2.跨进程rpc调用的…...

最近的一些事情

正义不会缺席 这家公司违法辞退不给工资乱开离职证明。严重影响个人发展。 今天终于收到法院的判决书。 警醒自身发展与社会之间密切交流&#xff0c;敲响警钟。 虽然最终得到的法院的支持&#xff0c;但过程举步维艰。 这其中的过程&#xff0c;也让我对律师、法院和中国…...

CP AUTOSAR标准之FlexRayDriver(AUTOSAR_SWS_FlexRayDriver)(更新中……)

1 简介和功能概述 FlexRay驱动程序(Fr)抽象了特定FlexRay通信控制器(CC)的硬件相关实现细节。本规范主要依赖于符合FlexRay规范[13]的FlexRay CC。此外,本规范还支持符合FlexRay规范[14]的旧版FlexRay控制器。本SWS中因支持的FlexRay规范不同而导致的不同行为在适用的情况下以…...

Cesium 实战 27 - 三维视频融合(视频投影)

Cesium 实战 27 - 三维视频融合(视频投影) 核心代码完整代码在线示例在 Cesium 中有几种展示视频的方式,比如墙体使用视频材质,还有地面多边形使用视频材质,都可以实现视频功能。 但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方式则不能满足需求。…...

GraphRAG实践:docker部署neo4j

概述 随着图数据库&#xff08;Graph Database&#xff09;的流行&#xff0c;越来越多的应用场景开始采用图数据库来处理复杂的关系数据。Neo4j作为领先的图数据库之一&#xff0c;提供了强大的图形查询语言Cypher、高效的存储结构和丰富的生态系统&#xff0c;使得它成为开发…...

常用的数据库类型都有哪些

在Java开发和信息系统架构中&#xff0c;数据库扮演着存储和管理数据的关键角色。数据库种类繁多&#xff0c;各有特色&#xff0c;适用于不同的应用场景。 1. 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; • 关系型数据库是最为人熟知的数据库类型&#xff0c;数据…...

swiftui开发页面加载发送请求初始化@State变量

在SwiftUI中&#xff0c;你不能直接在init中更新State变量&#xff0c;因为State是由SwiftUI框架管理的&#xff0c;初始化时不允许直接修改。所以需要在onAppear发送请求然后修改State状态。 在SwiftUI中&#xff0c;如果希望在页面加载时立即发送网络请求&#xff0c;可以使…...

Ribbon和Eureka的集成

Ribbon和Eureka的集成是Spring Cloud Netflix生态系统的一部分&#xff0c;通常用于微服务架构中&#xff0c;以实现客户端负载均衡和服务发现。以下是更详细的集成步骤&#xff1a; 1. 引入依赖 在你的Spring Boot项目的pom.xml文件中添加Eureka客户端和Ribbon的依赖&#x…...

关于UE加载osgb数据的研究(一)

最近关于倾斜数据在UE中加载显示的问题,直接转换格式本地加载的方式避免了数据延迟加载、缓存加载,动态刷新等问题,但是也暴露了突出的问题:常规的模型格式会丢失掉倾斜数据的lod,致使效果缺失。 故而需要深入研究一下UE加载osgb数据的方式方法。 首先,我们需得学习一下…...

探索数据之美,Plotly引领可视化新风尚

在数据如潮的今天&#xff0c;如何精准捕捉信息的脉搏&#xff0c;让数据说话&#xff1f;Plotly&#xff0c;这款强大的数据可视化工具&#xff0c;正以其卓越的性能和丰富的功能&#xff0c;成为数据分析师、科学家及工程师们的得力助手。 Plotly不仅仅是一个绘图库&#xf…...

List排序的方法

List 排序方法&#xff1a; 1. list 的 sort() package com.example.a; import java.util.ArrayList; import java.util.Comparator; import java.util.List; class User{private Integer score;private Integer age;public User(Integer score, Integer age){super();this.…...

BurstAttention:高效的分布式注意力计算框架

BurstAttention&#xff1a;高效的分布式注意力计算框架 在现代大型语言模型&#xff08;LLMs&#xff09;的应用中&#xff0c;提升注意力机制的计算效率已成为研究的热点。当前&#xff0c;提升计算效率主要有两种方法&#xff1a;一种是优化单设备的计算和存储能力&#xf…...

大数据治理:构建稳健的数据生态系统

引言 随着信息技术的迅猛发展&#xff0c;企业每天都在生成海量的数据。这些数据不仅来自传统的业务交易系统&#xff0c;还包括社交媒体、物联网设备、移动应用程序等多个渠道。大数据治理旨在确保组织能够有效地管理其拥有的所有数据资产&#xff0c;以支持决策制定、优化业…...

【图书介绍】几本适合当教材的大数据技术图书

《Spark SQL大数据分析快速上手》 《Spark SQL大数据分析快速上手&#xff08;大数据技术丛书&#xff09;》(迟殿委&#xff0c;王泽慧&#xff0c;黄茵茵)【摘要 书评 试读】- 京东图书 《Spark SQL大数据分析快速上手》内容基于Spark新版本展开&#xff0c;符合企业目前开…...

阴阳师の新手如何速刷5个SP/SSR?!(急速育成)

目标&#xff1a;攒5个SP/SSR式神&#xff0c;参与急速育成&#xff0c;省四个黑蛋&#xff08;想要快速升级技能而且经常上场的式神在攒够5个式神前先不升级&#xff09;【理论上组成&#xff1a;10蓝40蓝预约召唤福利20修行or抽卡】 关键点&#xff1a;蓝票&#xff0c;新手…...

unity学习4:git和SVN的使用差别

目录 1 svn 1.1 操作逻辑 1.2 对应工具 1.3 SVN避免冲突的好习惯 2 git 2.1 git的基础操作逻辑 2.1.1 commit时&#xff0c;提交文件之外的其他文件需要pull 2.1.2 commit时&#xff0c;发现要提交的本地文件和服务器的文件冲突了 2.1.3 pull 时 2.2 对应工具 2.3 …...

四大自平衡树对比:AVL树、红黑树、B树与B+树

AVL树、红黑树、B树和B树的对比与应用场景 树系列相关文章&#xff08;置顶&#xff09; 1、从链表到平衡树&#xff1a;二叉查找树的退化与优化 2、自平衡二叉查找树&#xff1a;如何让二叉查找树始终保持高效 3、AVL树入门&#xff1a;理解自平衡二叉查找树的基础 4、红黑树全…...

BUUCTF Pwn ciscn_2019_es_2 WP

1.下载 checksec 用IDA32打开 定位main函数 发现了个假的后门函数&#xff1a; 看看vul函数&#xff1a; 使用read读取 想到栈溢出 但是只有48个 只能覆盖EBP和返回地址 长度不够构造 所以使用栈迁移&#xff1a; 栈迁移需要用到leave ret 使用ROPgadget找地址&#xff1a; …...

MongoDb-mongosh-登录

本地登录 mongosh --username root --password xxx 参考&#xff1a;Connect to a Deployment - MongoDB Shell...

C语言day3:shell脚本

一、作业题3 使用数组求出当前目录下.sh文件的个数 二、作业题4 使用数组求家目录下文件的个数 三、思维导图...

微信小程序Uniapp

使用命令行创建项目&#xff08;vuets&#xff09; npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project然后用HBX打开项目 再安装依赖 npm i 再运行开发版本&#xff0c;生成dist目录 pnpm dev:mp-weixin 注意要设置APPid 再用微信小程序打开...

mongoTemplate的复杂组装条件查询

mongoTemplate不像SQL那么灵活&#xff0c;组装条件较为复杂。 如下演示了查询类似于 AND name ‘张三’ OR age 12 NOT birthday > 2024-12-31 这类结构的代码示例。 脑子里的范围图&#xff1a; 所有的AND锁定一个范围&#xff0c;再跟所有的OR组成的范围取并集&#…...

httpslocalhostindex 配置的nginx,一刷新就报404了

当你的Nginx配置导致页面刷新时报404错误时&#xff0c;通常是由于以下几个原因造成的&#xff1a; 静态文件路径配置错误&#xff1a;Nginx没有正确地指向静态文件的目录。前端路由问题&#xff1a;如果是SPA&#xff08;单页应用&#xff09;&#xff0c;刷新页面时Nginx没有…...

pandas删除值全部为0的整行和整列,还有0.0,0.000000也要删除

在 Pandas 中&#xff0c;如果需要删除全部为 0 的行或列&#xff0c;可以通过 .all() 方法来判断行或列是否所有元素都为 0&#xff0c;然后删除这些行或列。 代码示例 示例数据&#xff1a; import pandas as pd# 示例数据 data {A: [0, 2, 0, 4],B: [0, 0, 0, 0],C: [0, …...

IO Virtualization with Virtio.part 1 [十二]

久等了各位&#xff01; 本篇开始讲解 IO 虚拟化中的 virtio&#xff0c;我会以 Linux 的 IIC 驱动为例&#xff0c;从 IIC 驱动的非虚拟化实现&#xff0c;到 IIC 驱动的半虚拟化实现&#xff0c;再到最后 X-Hyper 中如何通过 virtio 来实现前后端联系&#xff0c;一步步把 v…...

ShardingSphere-Proxy分表场景:go测试案例

接续上篇文章《ShardingSphere-Proxy分表场景测试案例》 go测试用例&#xff1a; package mainimport ("fmt""math/rand""time""github.com/bwmarrin/snowflake""gorm.io/driver/mysql""gorm.io/gorm""gor…...

OpenStack系列第四篇:云平台基础功能与操作(Dashboard)

文章目录 1. 镜像&#xff08;Image&#xff09;添加镜像查看镜像删除镜像 2. 卷&#xff08;Volume&#xff09;创建卷查看卷删除卷 3. 网络&#xff08;虚拟网络&#xff09;创建网络查看网络删除网络 4. 实例类型创建实例类型查看实例类型删除实例类型 4. 密钥对&#xff08…...

ESP32 I2S音频总线学习笔记(一):初识I2S通信与配置基础

文章目录 简介为什么需要I2S&#xff1f;关于音频信号采样率分辨率音频声道 怎样使用I2S传输音频&#xff1f;位时钟BCLK字时钟WS串行数据SD I2S传输模型I2S通信格式I2S格式左对齐格式右对齐格式 i2s基本配置i2s 底层API加载I2S驱动设置I2S使用的引脚I2S读取数据I2S发送数据卸载…...

25上半年软考高级系统分析师易混淆知识点

第1章 系统工程与信息系统基础 易混淆点1&#xff1a;系统工程生命周期与信息系统的生命周期 1、系统工程生命周期阶段 探索性研究→概念阶段→开发阶段→生产阶段→使用阶段→保障阶段→退役阶段 2、信息系统的生命周期 产生阶段→开发阶段&#xff08;单个系统开发&…...