问题标签 [peripherals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5432 浏览

io - 了解 PCI 地址映射

我正在研究 PC 体系结构,但觉得我没有掌握 PCI 地址的基础知识。

我们在 PCI 中有三个地址空间:内存、输入输出端口和配置。我知道 CPU 可以使用不同的命令区分内存和端口,但是 PCI 会发生什么?我们在总线上有几个命令(读/写这些空间,中断处理等)。我认为在读取内存空间时,我们会寻址到物理 RAM 地址,但在阅读了一些手册之后,看起来我们寻址的是内部设备的内存。

  1. 为什么要使用内存映射?这是否意味着当某些程序写入映射到某个 PCI 设备的 RAM 地址时,它实际上会写入设备内存?为什么不使用标准 IO 端口写入?
  2. 如果需要,如何访问真实内存?例如,如果设备要在 RAM 中存储一些数据,那么这个请求将如何与“内存空间”访问区分开来?
0 投票
1 回答
1213 浏览

usb - 当 NAK 实现相同目的时,USB 2.0 HS 中 NYET 数据包的目的

使用 NYET、NAK 和 PING 数据包描述状态转换

当来自设备的 NAK 数据包可以简单地避免下一次交易时,NYET 有什么特殊用途?

0 投票
4 回答
4319 浏览

python - 覆盆子 BLE 外设替代 bleno

到目前为止,我已经开发了几个程序来在我的 Raspberry Rpi2 和 RPi3 中使用 bleno 作为 BLE 外围设备。谁能告诉我是否有替代 Bleno 的方法,在 Python 中,甚至在 C 中更好,为我的 Raspberry 开发 BLE 外设服务代码?

0 投票
1 回答
342 浏览

arm - ARM M3:在 GPIO 外设内存映射中使用“额外”空间?你能做这个吗?

我试图理解某人的代码,他们正在读取 GPIO 区域(0x4002 0000 - 0x4002 03FF)中的内存空间,但它的地址比 GPIO 寄存器高(它们只转到 0x24)。

您可以使用 0x4002 0024 以上和 0x4002 03FFF 以下的所有额外空间吗?如果从这个空间读取会发生什么?

编辑:我完全忘记了我可以发布代码。我将令我头疼的那行加粗:

LDR R0,[GPIO_Port_A_Address,R0];

0 投票
1 回答
115 浏览

java - 有没有办法确定是否移除了任何类型的外围设备?

我知道通过使用意图过滤器-> ACTION_ACL_CONNECTED、ACTION_ACL_DISCONNECT_REQUESTED 和 ACTION_ACL_DISCONNECTED 可以为 WiFi 和蓝牙提供一些东西......但是一般来说,是否有一些东西可以检查是否已删除任何类型的连接设备。例如:我已将我的 Android 设备连接到我的 Mac,现在智能手机已锁定,我删除了与我的 Mac 的连接,我可以在这个方向触发本地推送或声音或其他东西......

更新

尝试了@Rajesh Gopu 的答案,看起来不错,但不幸的是没有工作:(

0 投票
1 回答
603 浏览

timer - 对 ARM 外设寄存器的原子访问

我想同时在 ST2M32F103REY Cortex M3 上使用通用定时器的溢出、比较匹配和捕获功能。CC1 配置为比较匹配,CC3 配置为捕获。IRQ 处理程序如下所示:

原则上,它工作得很好,但有时似乎跳过了一部分。我的理论是,这是因为重置 IRQ 标志的操作,例如TIM3->SR &= ~TIM_SR_UIF,不是原子的*,因此可能会发生例如在加载和存储之间发生的 TIM_SR_CC1IF 被覆盖的情况。

* 指令的反汇编如下

  • 这合理吗?TIM3->SR寄存器的内容可以在IRQ处理程序执行过程中改变吗?
  • 是否有可能对 TIM3->SR 寄存器进行原子读写?
  • 还有其他合适的解决方案吗?

顺便说一句:有一个类似的问题,但问题是关于保护多个进程或内核的访问,而不是保护软件和硬件的同时访问。

0 投票
0 回答
633 浏览

c - 使用 HPS(硬核处理器)在 DE1-SoC 上的内存映射 ADC

我无法读取或写入 DE1-SoC (Rev. F) 开发板上的 AD7928 模数转换器 (ADC)。

我有开发板和 ADC 的数据表。我正在使用自定义 IP 和预制硬件组件的组合。我已经在 Qsys 中实现了 LED、按钮和 7 段显示器以及 ADC。为每个组件的内存空间设置基地址和范围。我正在使用开发板上的 Linux 中运行的 C 程序控制硬件。使用虚拟地址和偏移量,我可以控制除 ADC 之外的所有上述组件。

ADC 的数据表显示了 8 个用于读取的寄存器和 2 个用于写入的寄存器。ADC 在 Qsys 中设置为使用 8 个可用通道中的一个(通道 0),运行频率为 12.5MHz。Qsys 中的内存范围正确显示分配给 ADC 的 32 字节地址(8 个寄存器,每个 4 字节)。其中两个寄存器共享一个读写命令。

以下是我用于编写自动启用命令和从 ADC 通道 0 读取 12 位温度的指针:

我对其他组件使用相同的指针设置,它们都可以工作。

我查看了 ADC 的软核处理器设置,它有一个 .h 文件,其中包含打开 ADC 的命令,但似乎硬核处理器系统没有该命令。

ADC 是否需要一些其他设置才能将其与 HPS(硬核处理器系统)一起使用?ADC 数据表仅显示了 8 个用于控制的寄存器,我尝试了自动启用和开始转换模式。命令寄存器如下所示。

ADC 的命令寄存器

0 投票
1 回答
1055 浏览

security - ARM TrustZone,连接外围设备?

我目前正在做一些关于 ARM 的 TrustZone 的研究,例如这里:ARM 信息中心。据我了解,使用 TrustZone 可以创建基于 AMBA AXI 总线的安全环境。

ARM 网站上,它说:“这种安全和非安全世界的概念超越了处理器,涵盖了 SoC 中的内存、软件、总线事务、中断和外围设备。” 我读到外围设备可以通过 AMBA AXI 总线的N on Secure位连接到 TrustZone(额外的信号用于区分受信任和不受信任的请求)。

1) 除了 AMBA AXI 总线的额外引脚之外,具有 TrustZone 的 SoC 中的 TrustZone 特定硬件是什么?

2) 是否可以将外部非易失性存储器(例如闪存)或其中的一个分区连接到 TrustZone 以访问安全世界(通过外部存储器接口,然后是内部的 AXI 总线)?如果不是,如何存储秘密(作为密钥)以在安全世界中使用(借助保险丝??)?如果是,如何防止连接包含恶意代码的 Flash?

3) 作为芯片供应商(例如 TI 或 NXP)的客户,是否有可能在芯片出厂之前或之后为安全世界实施代码?

谢谢您的回答。

0 投票
1 回答
344 浏览

swift3 - 当用户离开容器视图中的视图控制器时调用方法

当用户离开当前视图控制器时,我试图断开与外围设备的连接。这通常可以通过以下方式使用 prepare for segue 来轻松实现:

但是,这不起作用;因为视图控制器位于容器视图内。当容器视图从该视图控制器更改为另一个视图控制器时,有人知道如何调用此方法吗?

0 投票
1 回答
54 浏览

arm - stty 和 STM32F4-DISCO(fourQ 封装)出错

我最近下载了 FourQlib [1] 的 v3,构建了 FourQlib,并想测试一切是否顺利。

首先,我的系统:Windows 10 (host) with MinGW, ARM Toolchain, MSYS, ... Ubuntu 16.04 LTS (Guest) (gcc, arm toolchain, ...) VirtualBox STM32F429ZI-Disco

源 [1] 包含目录“FourQ_ARM”,编译时必须在终端中启动“monitor.sh”[2] 文件。由于他们(Longa 等人)链接到“ttyUSB0”,我会检查是否在 Ubuntu 中注册了任何设备。由于我的 µC 注册为“stlinkv2_2”,因此我更改了此符号链接“/dev/ttyUSB0 -> /dev/stlinkv2_2”。

如果我运行monitor.sh,开始时会出现错误:stty -F /dev/stlinkv2_2 导致错误“Vorgang nicht zulässig”,意思是“不允许操作”

有人可以解释一下,为什么我会收到这个错误以及如何让这个 shell 脚本工作?

[1] https://github.com/Microsoft/FourQlib

[2] https://github.com/Microsoft/FourQlib/blob/master/FourQ_ARM/tests_Cortex-M4/monitor.sh