输入子系统
-- +有的时候不能代替或|,因为他俩的优先级不同
回顾
-- 1、什么是 IIC,IIC 的特点有哪些?
串行的通信,有以下特点:
- 总线、半双工 同步 速度慢
-- 2、IIC 的通信速度有几种标准, 怎么控制?
- 两种: 100K和400K
-- iic的速度最大400kbps,速度在100-400kbps之间。
- 真实的传输数据要除以8(传输一次数据要8位),100就是12.5kbps
-- 3、IIC 的响应信号有什么用?
-
从机发送响应信号:代表我接受到了主机的信号
-
主机发送响应信号:代表我还要数据
-- 4、如何主动结束 IIC 的通信?(也就是停止信号)
SCL 在高电平,SDA 产生上升沿
-- 5、IIC 的从机地址有几种可能?
- 两种可能:7bit和10bit。
-- 6、IIC 的读写位在协议哪个位置,0 代表什么 1 代表什么?
-
传输地址的时候第 8 个数据(代表读写位)
-
0:写
-
1:读
-- tip(补充):Lora是一种低功耗广域网(LPWAN)通信技术,专门设计用于远距离、低带宽的无线数据传输。它能够在城市或农村等广阔区域内,提供可靠的数据传输,适用于物联网(IoT)应用。LoRa的特点:长距离传输:LoRa能够实现数公里甚至更远的无线通信,他的速度是400M -> 5KM -> 19.2K/s
-- 7、Linux 下的 IIC 的中间层有哪些 API?
- i2c_add_driver();用于匹配设备树的信息
- i2c_transfer();//用于 I2C 数据传输
-- 8、BH1750 他的工作模式有几种?6 种工作模式
-- 9、BH1750 的从机地址有几种?
- 两种,ADDR 引脚 拉高 和拉低分别代表不同的从机地址
-- 10、IIC 最多允许挂载多少个设备?
127(以7bit从机地址为例,从机最多挂载127)。
-- 11、IIC 的实际项目开发你还遇到过哪些问题,你是怎么解决的?
单片机开发 IIC 时 做从机
-- 问题:调 IIC 的时候 调了一个星期没有调通!
- 最后发现是硬件的问题(在解决问题的时候,一直解决不了的问题,很可能是硬件的问题,所以也要往那方面考虑一下)。
-- 调iic的时候会产生从机无法接收数据的问题,用示波器也能测出波形,但是从机就是接收不到数据,最后发现是电压不匹配的问题。
-- 上一章最终实现了对 BH1750 的传感器的读取
-- tip:补充:
-- volatile 变量:
在没有 volatile 的情况下,编译器通常会对程序进行优化以提高性能。例如,如果编译器检测到某个变量在程序中没有变化,它可能会将该变量的值存储在寄存器中,避免每次访问时都从内存中读取。这种优化虽然可以提高效率,但如果该变量的值在程序外部发生变化(比如硬件或其他线程修改了它的值),就会导致程序出现错误。
使用 volatile 关键字后,编译器知道该变量的值可能随时发生变化,因此每次访问该变量时都会强制从内存读取,而不是使用寄存器中的缓存值。这确保了程序能够获取到最新的值,而不会因为编译器的优化而产生不一致的结果。
volatile 主要用于防止编译器优化掉对变量的访问,确保程序能够正确读取到内存中的值。它在多线程或硬件编程中尤为重要,能够避免由于编译器优化导致的值不可见或错误。需要注意的是,volatile 并不能解决所有并发问题,例如它无法保证操作的原子性或内存屏障的管理。
-- SPI是一种常见的同步串行通信协议,用于微控制器与外部设备(如传感器、存储器、显示器等)之间的通信。SPI通信通常采用主从架构,在这种架构下,主设备控制通信的时序和数据流动,而从设备响应主设备的指令。
- spi的工作模式有几种?
- SPI协议的4种工作模式(模式0到模式3)是通过组合时钟极性(CPOL)和时钟相位(CPHA)来定义的。每种模式定义了时钟信号的空闲电平以及数据采样时的时钟边缘。不同的外设可能会选择不同的SPI模式,因此在设计SPI通信时,必须确保主从设备的时序匹配。