05 |
您所在的位置:网站首页 › 高通qupv3配置tz权限配置 › 05 |
1. 概述
1.1 概念
GENI 通用接口 (Generic interface) GSI 通用软件接口 (Generic software interface) QUP 高通通用外设 (Qualcomm universal peripheral) SE 串行引擎 (Serial engine) TZ TrustZone 1.2 QUB v3QUP 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后面可能有一个或多个多路复用的硬件块,以实现其他功能。 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编号。 文件: apps/qnx_ap/boards/core/dalconfig/sa8155_adp/sa8155_adp_common/config/i2c_props_8155.xml 比如设置I2C1,那么这个I2C1是QUP的哪组呢? QUPV3_0_SE1? 还是QUPV3_0_SE2? 对应关系如下: 通过QUP 地址 如上图,I2C1,QUP地址为0xC94000 那么哪个QUBV3的地址是这个呢? 需要查手册,也可以查LA内核的设备设备树dtsi文件:如下图 i2c_props_8155.xml 配置了三个I2C: DALDEVICEID_I2C_DEVICE_1 DALDEVICEID_I2C_DEVICE_2 DALDEVICEID_I2C_DEVICE_3且三个I2C I2C_ENABLED都是1,说明使能。 那么QNX应该会产生三个I2C设备 /dev/下: 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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |