05-SA8155 QNX通过QUB配置GPIO/INT/SPI/I2C/SPI等_i2c_props_8155.xml_村里小码农的博客-程序员秘密

技术标签: SA8155P平台开发  QNX QUB  8155  msmgpiotool  QUB  pmicgpiotool  

1. 概述

1.1 概念

GENI 通用接口 (Generic interface)

GSI 通用软件接口 (Generic software interface)

QUP 高通通用外设 (Qualcomm universal peripheral)

SE 串行引擎 (Serial engine)

TZ TrustZone

1.2 QUB v3

QUP v3 是一种可编程模块,支持多种串行接口,例如 UART、SPI、I 2 C 和 I 3 C。该模块 支持访问系统中的多个硬件实体。每个硬件实体具备专属执行环境 (EE),独立的地址空 间以及一条中断线。 通过使用内部串行引擎 (SE)/QUP,单一 QUP v3 模块可提供多达八个串行接口。每个接 口可支持的协议由加载到 SE 的固件决定。为此,可通过修改 TZ 中的 QUPAC_Access 文件加载所需协议(I 2 C、SPI 或 UART)。

QUP v3 的主要属性如下:

  • 用于串行协议的单核心
  • 取代了 BAM 低速外设 (BLSP) 传统核心
  • 可编程的核心

1.3 GPIO 

每个GPIO引脚标准具有以下功能:

  • 输出
  • 输入
  • 中断输入(不包括特殊唤醒中断功能)

此外,一些gpio后面可能有一个或多个多路复用的硬件块,以实现其他功能。

 

2. SA8155 QUP配置

2.1 QUP-GPIO Maping映射表

QUP-GPIO Maping

如上图,QUP-GPIO映射表,代码中的配置相关均可以在这个表里查阅。

 2.2 QUP资源配置:QUPAC_Access

对于SA8155的QUP访问表是:

tz_8155\trustzone_images\core\settings\buses\qup_accesscontrol\qupv3\config\855\QUPAC_Access.c

 如上图所示,QUP资源配置。

2.2.1 案例,I2C资源配置

将QUPV3_SSC_SE0配置为I2C接口,拥有者为AC_HLOS

{ QUPV3_SSC_SE0, QUPV3_PROTOCOL_I2C,     QUPV3_MODE_FIFO, AC_HLOS,  TRUE, TRUE, FALSE }, // I2C - AUDIO A2B I2C

 通过查表:

 其他接口资源配置可以参考类似操作。

 2.2.2 QUP功能映射关系

 拿QUB I2C功能映射举例说明:

 如上code,qup_l0 与 qub_l1 就是对应的 QUP lane to Function mapping功能表的L0 与 L1

 图: QUP lane to Function mapping

qup_l0[x]  qup_l1[x] 数组数值对应的就是QUP numbering as per device specification

 qup_l0[0]  qup_l1[0] 对应的就是 QUP_SE_0 的L0 与 L1 IO映射的功能配置。如果配置为I2C则是SDA与SCL。如果配置为SPI-master则为MISO与MOSI。

3. HLOS QUP programming

通过QUP programming 来初始化QUB功能以及时钟。

3.1 IO配置

文件路径:

apps/qnx_ap/boards/core/dalconfig/sa8155_adp/sa8155_adp_common/config/pin_config.c

 数据结构定义

其中第一列的数值是 | 上一个IO编号。 

 

3.2  I2C配置(例子)

3.2.1 QNX 配置文件

 文件:

 apps/qnx_ap/boards/core/dalconfig/sa8155_adp/sa8155_adp_common/config/i2c_props_8155.xml

3.2.2 I2C ID与QUP 对应 

比如设置I2C1,那么这个I2C1是QUP的哪组呢? QUPV3_0_SE1? 还是QUPV3_0_SE2?

对应关系如下: 通过QUP 地址

 如上图,I2C1,QUP地址为0xC94000

那么哪个QUBV3的地址是这个呢? 需要查手册,也可以查LA内核的设备设备树dtsi文件:如下图

 3.2.3 I2C设备

i2c_props_8155.xml 配置了三个I2C:

  • DALDEVICEID_I2C_DEVICE_1
  • DALDEVICEID_I2C_DEVICE_2
  • DALDEVICEID_I2C_DEVICE_3

且三个I2C I2C_ENABLED都是1,说明使能。

那么QNX应该会产生三个I2C设备  /dev/下:

3.2.4 I2C 调试 

Linux I2C调试工具有i2c-tools 四件套(i2cset,i2cget,i2cdetect,i2cdump)。

那么QNX同样也有调试工具,它就是i2cdbgr  (/bin/i2cdbgr)

usage:

# use i2cdbgr
i2cdbgr : Application to perform i2c read / write

Usage: i2cdbgr [node] [slave addr] read [byte size] [offset] [# bytes to read]
       i2cdbgr [node] [slave addr] write [byte size] [offset] [value]

where
    [node] is of form "/dev/i2cX".
    [byte size] is 1, or 2. The value has no effect for read. For write, if the
        byte size is 1, then the offset is ignored, and only [value] is written.
        If the byte size if 2, then i2cdbgr will write [offset value].

The i2cdbgr uses 8-bit addressing, 8-bit data to read or write from
    /dev/i2cX (fd) using i2c_client.h using default frequency.

Examples:
    For read:
        i2cdbgr /dev/i2c1 0x77 read 1 0x4 1 <- read 1 byte from slave addr 0x77
            offset 0x4
        i2cdbgr /dev/i2c1 0x77 read 1 0x4 5 <- read 5 bytes from slave addr
            0x77 offset 0x4

    For write:
        i2cdbgr /dev/i2c1 0x77 write 1 0x0 0xa <- write 1 byte to slave addr
            0x77 with no offset due to 1 byte size value 0xa
        i2cdbgr /dev/i2c1 0x77 write 2 0x1 0xb <- write 2 bytes to slave addr
            0x77 with offset + value bytes [0x1 0xb]

4.QNX IO调试

/dev/gpio

 4.1 TLMM MSM GPIO tool

工具指令原型:

$msmgpiotool <command> <gpio> <arg>

Command gpio arg 描述
info <gpio num> Display the info for the specified TLMM GPIO
write <gpio num>  <value> Write the GPIO pin value
read <gpio num> Read the GPIO pin value (High or Low)
rawread <gpio num> Read the GPIO IN_OUT register raw register value
set-dir <gpio num>  <value> Set the GPIO direction
set-drive <gpio num> <value> Set the GPIO drive strength
set-pull <gpio num>  <value> Set the GPIO drive mode
set-func <gpio num> <value> Set the GPIO function select
enable-irq <gpio num> <value> Set the GPIO interrupt source
clear-irq <gpio num>  Clears the pending irq status
set-pol <gpio num> <value> Sets the GPIO interrupt polarity
set-trigger <gpio num>  <value> Sets the irq trigger type

QNX 使用方法:

$ msmgpiotool read 8
GPIO 8 is Low
$ msmgpiotool set-dir 8 1
Set GPIO 8 direction to Out [1]
$ msmgpiotool write 8 1
Wrote GPIO 8 to 1
$ msmgpiotool read 8
GPIO 8 is High

4.2 PMIC GPIO tool


工具指令原型
$ pmicgpiotool <command> <gpio> <value> 

Tool 命令,与TLMM MSM GPIO tool类似

read <gpio number>
gpio-master <gpio number> <value>
source-select <gpio number> <value>
mode-inversion <gpio number> <value>
voltage-select <gpio number> <value>
pullup-select <gpio number> <value>
output-type <gpio number> <value>
output-drive-select <gpio number> <value>
mode <gpio number> <value>
in-set-type <gpio number> <value>
int-polarity-high <gpio number> <value>
int-polarity-low <gpio number> <value>
int-enable-set <gpio number> <value>
int-enable-clear <gpio number> <value>
int-mid-select <gpio number> <value>
int-priority <gpio number> <value> 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liaochaoyun/article/details/127317225

智能推荐

vue 项目全局引入 less文件时报错_qq_34465778的博客-程序员秘密

用vue-cli搭建的项目,在main.js中引入less文件时却一直报错,如下图:

运行Spark-shell报错:File does not exist: hdfs://mycluster/spark_historylog_海若[MATRIX]的博客-程序员秘密

1.场景执行spark-shell报错[[email protected] conf]# spark-shell2.报错Setting default log level to "WARN".To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).2020-06-19 22:42:16,335 ERROR spark.SparkContext: Error initi..

HttpWebResponse类的常用属性和方法_jkpi888的博客-程序员秘密

HttpWebResponse类的属性 CharacterSet        获取响应的字符集。ContentEncoding      获取用于对响应体进行编码的方法。ContentLength        获取请求返回的内容的长度。 (重写 WebResponse..::.ContentLength。)ContentType         获取响应的内容类型。 (重写

WEBAPI 增加身份验证 (OAUTH 2.0方式)_simpleauthorizationserverprovider 写法_JackieZhengChina的博客-程序员秘密

1,在Webapi项目下添加如下引用:Microsoft.AspNet.WebApi.OwinOwinMicrosoft.Owin.Host.SystemWebMicrosoft.Owin.Security.OAuthMicrosoft.Owin.Security.CookiesMicrosoft.AspNet.Identity.OwinMicrosoft.Owin.Cors2, 在项目下新建St...

Matlab的regionprops详解_alaclp的博客-程序员秘密

matlab函数_连通区域1、 matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下使用8邻域。算法:(1)Determine the connected components.  L = bwlabeln(BW, conn);(2)Compute the

随便推点

JZOJ3291. 【JSOI2013】快乐的JYY_李峻枫的博客-程序员秘密

Description给定两个字符串A和B,表示JYY的两个朋友的名字。我们用A(i,j)表示A字符串中从第i个字母到第j个字母所组成的子串。同样的,我们也可以定义B(x,y)。 JYY发现两个朋友关系的紧密程度,等于同时满足如下条件的四元组(i,j,x,y)的个数: 1) 1≤i≤j≤|A| 2) 1≤x≤y≤|B| 3)A(i,j)=B(x,y) 4) A(i,j)为回文串 这...

VBA 添加日历控件的操作_weixin_30443895的博客-程序员秘密

近几天需要做一个VBA的宏,以方便在excel中选择格式化后日期,要求添加日历控件,并按照格式化进行输出,由于是第一次接触VBA,因此查询了一些资料,下面对自己所做的过程进行一下总结: 1、首先新建一个excel文档。 2、对excel文档添加添加日历控件,具体过程如下图:插入其他控件中的日历控件,如下图:添加完后如下图所示:双击控件即可编写代码...

赋值语句python_如何写赋?_weixin_39998795的博客-程序员秘密

1.赋是韵文,必须要有韵。2.不需要对仗。第一条是必须的。这是从表面来看是否属于“赋”这种文体。第二条需要看赋的分类,如果是骈赋就必须绝大部分对仗。当然,散句里夹杂一些对仗的句子还是很能突出艺术效果的。下面是如何写赋。1.写赋之前要多读书,首先是《诗经》。毛诗序“诗有六义焉:一曰风、二曰赋、三曰比、四曰兴、五曰雅、六曰颂。”多读诗经,会对其中章法、修辞等引出的空间美感有所体会的。推荐:《诗三家义集...

pymongo 学习总结_四毛啊的博客-程序员秘密

老规矩,英文文档:http://api.mongodb.com/python/current/examples/authentication.html一、mongodb1、简介 MongoDB是一种强大、灵活、追求性能、易扩展的数据存储方式。是面向文档的数据库,不是关系型数据库,是NoSQL(not only SQL)的一种。所谓的面向文档,就是将原来关系型数据库中的“行”的概念换成了更加灵活的

对程序员误解_女性对计算机科学的3种误解_cumo7370的博客-程序员秘密

对程序员误解 YouTube的首席执行官苏珊·沃西基 ( Susan Wojcicki)今天上午在上周在休斯敦举行的Grace Hopper庆祝计算妇女大会上向数千名与会者发表了重要的主题演讲。 她开始说:“我的女儿告诉我她不喜欢计算机。” Wojcicki指出女性对计算机科学领域的三种误解是: 这很无聊。 我不会擅长的。 我不会被与计算机科学领域的人打成一片而死。 最后...

程序员老了之后练太极最合适了_上善若水2020的博客-程序员秘密

介绍太极拳之前,首先来演示一段十六式梅山太极简化版: 我的梅山0502 这段视频是网络参赛视频,虽然没取得啥名次,但重在参与,希望那些老程序员都加入太极拳行列。绝对的收益匪浅。参考链接:https://blog.csdn.net/weixin_41486034/article/details/106379306学习太极拳是个循序渐进的过程,通过修炼太极拳不仅提高身体素质,思想上也有很

推荐文章

热门文章

相关标签