这个问题有点模糊,我为此道歉,但是一个相当含糊的答案会做:) 人们通常如何访问外部设备的内存地址(例如,通过USB连接到PC,甚至只是说多用途微控制器)?我想知道软件如何能够找到写入寄存器或EEPROM空间的地址。
例如,如果我想将值写入寄存器0x1234,软件是否只是将此信息(寄存器和要写入的值)发送给某种与设备“对话”并处理该值的驱动程序通过硬件改变? 这项功能的实施主要是硬件努力吗?
谢谢!
答案 0 :(得分:2)
让我们以一个相当常见的USB外设控制器为例,它基于一个8位8051微控制器内核。它的一侧连接到台式计算机上的USB主控制器。另一端连接到USB设备控制器,该控制器将自身显示为主机的FIFO端点。
初始化设备端需要大约8051固件。主机端需要类驱动程序。一旦这些到位,应用程序开发人员将在主机端具有可以打开以进行读/写的设备名称。有时供应商会提供库来执行特定于设备的任务,并将用户与原始设备隔离开来。通常,Windows DLL可用于隐藏低级I / O并将设备操作显示为函数调用。
其他8051固件从设备端监视FIFO,并解释从主机应用程序或DLL发送的消息,然后执行操作。这些动作可能是低电平,例如从存储器位置或寄存器读/写。它们可能是高电平,例如设置可编程计数器阵列的PWM值。
因此,您对寄存器0x1234的写入的假设描述与经常实现的方式相差无几。