问题标签 [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.
io - 了解 PCI 地址映射
我正在研究 PC 体系结构,但觉得我没有掌握 PCI 地址的基础知识。
我们在 PCI 中有三个地址空间:内存、输入输出端口和配置。我知道 CPU 可以使用不同的命令区分内存和端口,但是 PCI 会发生什么?我们在总线上有几个命令(读/写这些空间,中断处理等)。我认为在读取内存空间时,我们会寻址到物理 RAM 地址,但在阅读了一些手册之后,看起来我们寻址的是内部设备的内存。
- 为什么要使用内存映射?这是否意味着当某些程序写入映射到某个 PCI 设备的 RAM 地址时,它实际上会写入设备内存?为什么不使用标准 IO 端口写入?
- 如果需要,如何访问真实内存?例如,如果设备要在 RAM 中存储一些数据,那么这个请求将如何与“内存空间”访问区分开来?
usb - 当 NAK 实现相同目的时,USB 2.0 HS 中 NYET 数据包的目的
当来自设备的 NAK 数据包可以简单地避免下一次交易时,NYET 有什么特殊用途?
python - 覆盆子 BLE 外设替代 bleno
到目前为止,我已经开发了几个程序来在我的 Raspberry Rpi2 和 RPi3 中使用 bleno 作为 BLE 外围设备。谁能告诉我是否有替代 Bleno 的方法,在 Python 中,甚至在 C 中更好,为我的 Raspberry 开发 BLE 外设服务代码?
arm - ARM M3:在 GPIO 外设内存映射中使用“额外”空间?你能做这个吗?
我试图理解某人的代码,他们正在读取 GPIO 区域(0x4002 0000 - 0x4002 03FF)中的内存空间,但它的地址比 GPIO 寄存器高(它们只转到 0x24)。
您可以使用 0x4002 0024 以上和 0x4002 03FFF 以下的所有额外空间吗?如果从这个空间读取会发生什么?
编辑:我完全忘记了我可以发布代码。我将令我头疼的那行加粗:
LDR R0,[GPIO_Port_A_Address,R0];
java - 有没有办法确定是否移除了任何类型的外围设备?
我知道通过使用意图过滤器-> ACTION_ACL_CONNECTED、ACTION_ACL_DISCONNECT_REQUESTED 和 ACTION_ACL_DISCONNECTED 可以为 WiFi 和蓝牙提供一些东西......但是一般来说,是否有一些东西可以检查是否已删除任何类型的连接设备。例如:我已将我的 Android 设备连接到我的 Mac,现在智能手机已锁定,我删除了与我的 Mac 的连接,我可以在这个方向触发本地推送或声音或其他东西......
更新
尝试了@Rajesh Gopu 的答案,看起来不错,但不幸的是没有工作:(
timer - 对 ARM 外设寄存器的原子访问
我想同时在 ST2M32F103REY Cortex M3 上使用通用定时器的溢出、比较匹配和捕获功能。CC1 配置为比较匹配,CC3 配置为捕获。IRQ 处理程序如下所示:
原则上,它工作得很好,但有时似乎跳过了一部分。我的理论是,这是因为重置 IRQ 标志的操作,例如TIM3->SR &= ~TIM_SR_UIF
,不是原子的*,因此可能会发生例如在加载和存储之间发生的 TIM_SR_CC1IF 被覆盖的情况。
* 指令的反汇编如下
- 这合理吗?TIM3->SR寄存器的内容可以在IRQ处理程序执行过程中改变吗?
- 是否有可能对 TIM3->SR 寄存器进行原子读写?
- 还有其他合适的解决方案吗?
顺便说一句:有一个类似的问题,但问题是关于保护多个进程或内核的访问,而不是保护软件和硬件的同时访问。
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 个用于控制的寄存器,我尝试了自动启用和开始转换模式。命令寄存器如下所示。
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)的客户,是否有可能在芯片出厂之前或之后为安全世界实施代码?
谢谢您的回答。
swift3 - 当用户离开容器视图中的视图控制器时调用方法
当用户离开当前视图控制器时,我试图断开与外围设备的连接。这通常可以通过以下方式使用 prepare for segue 来轻松实现:
但是,这不起作用;因为视图控制器位于容器视图内。当容器视图从该视图控制器更改为另一个视图控制器时,有人知道如何调用此方法吗?
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