RISC-V生态全景解析(十一):YoC组件介绍系列一: CSI组件

简介: 编辑语:芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。

编辑语:

芯片开放社区(OCC)面向开发者推出RISC-V系列内容,通过多角度、全方位解读RISC-V,系统性梳理总结相关理论知识,构建RISC-V知识图谱,促进开发者对RISC-V生态全貌的了解。

上期【技术解码】,我们整体介绍了YoC基础软件平台,了解了YoC平台具有丰富的IoT组件。本期内容,我们将开启对YoC组件的介绍,带大家深入感受YoC基础软件平台的特性。本文将介绍YoC系统硬件底层抽象组件 —— CSI组件。

01 概

CSI (Chip System Interface)是针对嵌入式系统,定义了CPU内核移植接口、外围设备操作接口、统一软件接口规范,消除不同芯片的差异,简化软件的使用及提高软件的移植性。通过CSI 接口规范,可以快速实现芯片对接到YoC 平台。CSI 的具体内容包括:

  • CSI-CORE:定义了CPU和相关紧耦合外设的接口规范
  • CSI-DRIVER:定义了常用的驱动的接口规范
  • CSI-KERNEL:定义实时操作系统的接口规范

截屏2021-11-22 下午7.56.16.png

02 CSI组件使用

CSI有两个版本,目前CSI1.0逐步启用,推荐使用CSI2.0。

03 头文件包含

3.1 GCC -I 路径

-I csi2/include/

3.2 CSI-Core头文件包含

#include <csi_core.h>

3.3 CSI-Driver头文件包含

#include <drv/uart.h> #include <drv/timer.h>

3.4 CSI-Kernel头文件包含

#include <csi_kernel.h>

04 模块分述

4.1 CSI-Core

目前已针对RISCV、C-SKY架构做了接口的定义和实现。CSI-Core是驱动和RTOS程序的基础,CSI-Driver会基于CSI-Core的接口来定义外设寄存器描述和驱动实现。

4.2 CSI-Driver

  1. CSI-Driver是应用接口,是对硬件功能的抽象,不会暴露所有硬件细节。
  2. CSI-Driver具有统一的接口,不同硬件IP之间的差异会在这层做统一。
  3. 目前已规范了40+个模块的接口,包括IO类,加解密类,定时器类等。

4.2.1 统一的设备和中断管理

截屏2021-11-22 下午7.56.29.png

4.2.2 驱动程序的注册与注销

4.2.2.1 注册

注册函数负责驱动的初始化和硬件的基本初始化。一般的,CSI驱动注册函数形式为: csi_error_t csi__init(csi_xxx_t *xxx, uint32_t idx); 以uart为例,其驱动函数的注册接口如下:csi_error_t csi_uart_init(csi_uart_t *uart, uint32_t idx); 参数:   uart:uart控制块    idx:uart设备号。如uart0,则idx = 0;返回值:   错误号:csi_error_t

4.2.2.2 注销

注销函数负责驱动的反初始化和硬件的反初始化 一般的,CSI驱动注销函数形式为:void csi__uninit(csi_xxx_t *xxx); 以uart为例,其驱动函数的注销接口如下:void csi_uart_uninit(csi_uart_t *uart); 参数:   uart:uart控制块 返回值:   注销函数没有返回值

4.3 中断、回调和事件处理

  1. CSI驱动接管设备中断处理,CSI接口用户无法直接编写中断处理函数。
  2. 用户可以通过回调函数的方式来接收中断事件。

4.3.1 回调注册

CSI驱动提供回调注册注销函数:csi_xxx_attach(...) 和 csi_xxx_detach(...) 用户要接收中断事件,必须先注册回调函数。

截屏2021-11-22 下午7.56.38.png

4.4 同步异步处理

CSI-Driver接口设计区分同步处理和异步处理模式,轮询、中断、DMA功能分开处理。同步读写:通过轮询的方式 异步读写:通过中断或DMA的方式

4.4.1 轮询模式

  1. 不产生中断
  2. 不产生事件

4.4.2 中断模式

  1. 产生设备中断
  2. 产生事件

4.4.3 DMA模式

  1. 不产生设备中断,而产生DMA中断
  2. 产生的事件类型和中断模式一致

4.5 配置

  1. 原则上,驱动配置不存入设备句柄结构体
  2. 分多个接口配置设备的功能,同类功能的merge,

例:

csi_uart_baud(csi_uart_t *uart, uint32_t baud);
csi_uart_format(csi_uart_t *uart,  csi_uart_data_bits_t data_bit, csi_uart_parity_t parity,
                csi_uart_stop_bits_t stop_bit);
csi_uart_flowctrl(csi_uart_t *uart,  csi_uart_flowctrl_t flowctrl);

4.6 错误处理

所有驱动统一错误类型:

typedef enum {
    CSI_OK          =  0,       //成功
    CSI_ERROR       = -1,       //错误
    CSI_BUSY        = -2,       //忙碌
    CSI_TIMEOUT     = -3,       //超时
    CSI_UNSUPPORTED = -4        //不支持的操作
} csi_error_t;

4.7 打开与释放

打开与释放类接口,命名如下:open/close:打开和关闭设备 start/stop:开启和停止某个设备的功能 alloc/free:申请和释放资源

4.8 读写控制类操作

读写类操作接口,命名如下:read/write,适用于文件、句柄、管道、GPIO场景                   返回值统一为读写成功的字节数。send/receive,适用于总线类场景

4.9 CSI-Kernel

统一RTOS Kernel的接口规范,例如对于mutex、semaphore等操作CSI-Kernel进行了统一的封装和规范。已支持Rhino、FreeRTOS、uCOS、ReWorks等RTOS。目前不推荐使用,请使用aos kernel接口。

4.10 CSI接口认证

CSI接口有一套规范认证case,用来验证芯片软件支持CSI接口的程度,并可以从很大程度上保证芯片软件的可靠性。适配完CSI接口软件后,需要经过该认证case的测试,才可被认为支持CSI接口。为降低工作量,认证case目前已经支持自动化运行,见下文详细介绍。

4.10.1 自动化测试框架

CSI 的自动化测试可以部署到jenkins持续集成服务器中,从开发人员/测试开发人员提交代码到生成最终的测试报告的整个流程可以实现自动化,中途无需人工参与干预。从触发到生成测试报告都是由自动化测试脚本完成的,其中jenkins服务器起到了触发任务和分发任务到测试PC的作用。整体流程如下图所示:

截屏2021-11-22 下午7.57.45.png

CSI自动化测试代码分为两大部分, 其中一部分使用python脚本编写,其运行在x86 PC机器上,负责管理测试case、 发送测试命令到下位机、收集测试日志, 并最终生成测试报告等。另外一部分为c语言编写,其运行在下位机上, 其负责接收上位机下发的AT测试命令,并根据测试命令调用相应的CSI接口进行测试。软件运行原理框图如下:

截屏2021-11-22 下午7.57.52.png

4.10.2 测试报告

测试完成后,会输出测试报告在test_tools/report目录下(html文件格式):

截屏2021-11-22 下午7.58.00.png

05 下期预告

以上是关于YoC平台CSI组件的全部介绍,下期内容我们将带大家了解YoC的AT组件,欢迎大家持续关注RISC-V系列内容。

相关文章
|
10月前
|
前端开发 JavaScript
React 步骤条组件 Stepper 深入解析与常见问题
步骤条组件是构建多步骤表单或流程时的有力工具,帮助用户了解进度并导航。本文介绍了在React中实现简单步骤条的方法,包括基本结构、状态管理、样式处理及常见问题解决策略,如状态管理库的使用、自定义Hook的提取和CSS Modules的应用,以确保组件的健壮性和可维护性。
243 17
|
7月前
|
索引
【Flutter 开发必备】AzListView 组件全解析,打造丝滑索引列表!
在 Flutter 开发中,AzListView 是实现字母索引分类列表的理想选择。它支持 A-Z 快速跳转、悬浮分组标题、自定义 UI 和高效性能,适用于通讯录、城市选择等场景。本文将详细解析 AzListView 的核心参数和实战示例,助你轻松实现流畅的索引列表。
291 7
|
10月前
|
前端开发 UED
React 文本区域组件 Textarea:深入解析与优化
本文介绍了 React 中 Textarea 组件的基础用法、常见问题及优化方法,包括状态绑定、初始值设置、样式自定义、性能优化和跨浏览器兼容性处理,并提供了代码案例。
334 9
|
11月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
169 1
|
12月前
|
存储 JavaScript 前端开发
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
Vue3权限控制全攻略:路由与组件层面的用户角色与权限管理方法深度解析
1046 2
|
12月前
|
机器学习/深度学习 编解码 算法
深入解析MaxFrame:关键技术组件及其对视频体验的影响
【10月更文挑战第12天】随着流媒体服务和高清视频内容的普及,用户对于视频质量的要求越来越高。为了满足这些需求,许多技术被开发出来以提升视频播放的质量。其中,MaxFrame是一种旨在通过一系列先进的图像处理算法来优化视频帧的技术。本文将深入探讨构成MaxFrame的核心组件,包括运动估计、超分辨率重建以及时间插值算法,并讨论这些技术如何协同工作以改善视频播放效果。
185 1
|
11月前
|
机器学习/深度学习 自然语言处理 数据管理
GraphRAG核心组件解析:图结构与检索增强生成
【10月更文挑战第28天】在当今数据科学领域,自然语言处理(NLP)和图数据管理技术的发展日新月异。GraphRAG(Graph Retrieval-Augmented Generation)作为一种结合了图结构和检索增强生成的创新方法,已经在多个应用场景中展现出巨大的潜力。作为一名数据科学家,我对GraphRAG的核心组件进行了深入研究,并在此分享我的理解和实践经验。
501 0
|
7月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
684 29
|
7月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
202 4
|
7月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS