FIFO在LHE3301中的工作原理

原创 云深之无迹 2025-03-19 00:38
领慧立芯LHE3302:电化学模拟前端(AFE)我前几天写了这个,但是不知道开发板什么时候到,就写写。
FIFO(First In, First Out)在 LHE3301 芯片中主要用于缓冲 ADC 采样数据,可以降低 MCU 读取数据的频率,提高功耗优化效率。
FIFO 的深度为 256×24bit,即最多存储 256 组 24-bit 数据。
当数据满足中断要求,就会通知MCU:
如果一有数据就中断,会让主机很累,那就先存一段多的。这个模型就很简单。
FIFO 就像一个 队列(排队的队伍),数据先进去的必须先出来,不会被跳过。
  1. 写指针(WR_PTR,FIFO_WR_PTR)👉 记录下一个数据应该存在哪里
  2. 读指针(RD_PTR,FIFO_RD_PTR)👉 记录下一个要被读取的数据位置

去银行取号排队办业务:
写指针就像银行的叫号机,它负责发号(存数据)。
读指针就像柜台工作人员,他们会按顺序叫号(取数据)。
如果叫号机快(数据写入快),但柜台慢(数据读取慢),排队人数会越来越多(FIFO 变满)。
如果柜台叫号快,但叫号机发号慢,那么有时候柜台可能会没有号码可叫(FIFO 为空)。
  1. FIFO_WR_PTR(写指针)自动递增:每次 ADC 采样完成后,芯片自动把数据存入 FIFO,并让写指针 WR_PTR+1。
  2. 如果 FIFO 满了(256 组数据),写指针会停止增长,直到 MCU 读取数据。
  3.  FIFO_RD_PTR(读指针)自动递增:每次 MCU 读取 FIFO 一条数据,芯片自动让读指针 RD_PTR+1。

如果 FIFO 为空,读取无效,读指针不会增长。
MCU 不用手动修改指针,芯片会自动管理读写指针的增长。MCU 只需要读取 FIFO 计数器,判断数据量是否足够。
大致来说就是写入数据和输出数据:

(1) 数据写入 FIFO
  1. ADC 采样完成后,转换数据(16-bit)+ 数据标签(4-bit)+ 状态标志(4-bit) 一起写入 FIFO。
  2. FIFO 自动管理写指针(WR_PTR),每写入一组数据,WR_PTR 自增。
  3. 当 FIFO 满时,新数据不会覆盖旧数据,需要 MCU 读取后才能继续写入。

(2) 数据读取 FIFO
  1. MCU 通过 SPI 读取 FIFO 数据寄存器(FIFO_DATA),每次读取 3 个字节(24-bit)。
  2. FIFO 读指针(RD_PTR) 记录当前读取位置,每读取一组数据,RD_PTR 自动自增。
  3. 读取完成后,可通过 FLUSH_FIFO 清空 FIFO,防止数据不一致。

根据FIFO设计相关的操作

ADC 采样数据写入 FIFO:采样完成后,数据自动存入 FIFO,FIFO_WR_PTR 自增。

读取 FIFO_COUNTER,查看 FIFO 中有多少数据:
uint16_t fifo_count = (FIFO_COUNTER0 << 8) | FIFO_COUNTER1;

然后就是读取了:

uint8_t data[3];spi_read(FIFO_DATA, data, 3);

接下来就把FIFO里面的数据还原我们感兴趣的样子:

uint32_t fifo_word = (data[0] << 16) | (data[1] << 8) | data[2];uint16_t adc_value = fifo_word & 0xFFFF;  // 低 16 位为 ADC 数据uint8_t tag = (fifo_word >> 16) & 0x0F;   // 4-bit 通道标签uint8_t flag = (fifo_word >> 20) & 0x01;  // ADC 是否饱和


可能读比写超前,那就读取不到啊,都没数据,所以要判断。

读取数据前,检查 FIFO_COUNTER 确保 FIFO 非空。读完 FIFO 后,清空缓冲区。


#define FIFO_MAX_COUNT 256  // FIFO 最大存储 256 组数据void read_fifo_data() {    uint16_t fifo_count = (read_register(FIFO_COUNTER0) << 8) | read_register(FIFO_COUNTER1);    if (fifo_count > 0) {        for (int i = 0; i < fifo_count; i++) {            uint8_t data[3];            spi_read(FIFO_DATA, data, 3);            uint32_t fifo_word = (data[0] << 16) | (data[1] << 8) | data[2];            uint16_t adc_value = fifo_word & 0xFFFF;            uint8_t tag = (fifo_word >> 16) & 0x0F;            uint8_t flag = (fifo_word >> 20) & 0x01;            printf("ADC Value: %u, Channel: %d, Saturation: %d\n", adc_value, tag, flag);        }    }    // 清空 FIFO,避免数据重复    write_register(FIFO_CFG, FLUSH_FIFO);}


两个芯片没有大区别


随便一个SPI都可以控制


采用单字节寄存器地址 + 单字节数据的 SPI 结构。
[写指令 | 地址] -> [数据]
写命令,格式 :1AAA AAAA 前面的1代表写入,后面的额7bit是地址,在什么地方写入。加一个数据
简单
最高位是0 ,读取:

LHE3301 采用 24-bit 数据格式 存储 ADC 采样数据:


解出来用

uint8_t cmd = 0x0B;uint8_t fifo_data[3];spi_read(cmd, fifo_data, 3);uint32_t adc_value = (fifo_data[0] << 16) | (fifo_data[1] << 8) | fifo_data[2];

简单



FIFO 采用 环形结构,写入数据后 写指针 (WR_PTR) 自动增加

评论 (0)
  • 故障现象 一辆2024款路虎发现运动版车,搭载2.0 L发动机,累计行驶里程约为5 000 km。车主反映,使用遥控器无法解锁车门,随后使用机械钥匙打开车门,踩下制动踏板,按压起动按钮,仪表盘提示“将智能钥匙放在图示位置,然后按下起动按钮”(图1)。 图1 故障车的仪表盘提示采用上述应急起动方法,发动机能够起动着机。上述故障现象已出现过多次,过一段时间又会恢复正常,这次故障出现要求将车辆拖入店内进行彻底检修。 故障诊断 车辆进店后进行试车,车辆一切功能又恢复正常。经过反复测试
    虹科Pico汽车示波器 2025-03-20 10:17 57浏览
  • 家电“以旧换新”政策的覆盖范围已从传统的八大类家电(冰箱、洗衣机、电视、空调、电脑、热水器、家用灶具、吸油烟机)扩展至各地根据本地特色和需求定制的“8+N”新品类。这一政策的补贴再叠加各大电商平台的优惠,家电销售规模显著增长,消费潜力得到进一步释放。晶尊微方案为升级换代的智能家电提供了高效且稳定的触摸感应和水位检测功能,使得操作更加便捷和可靠!主要体现在:水位检测1健康家电:养生壶、温奶器、加湿器的缺水保护安全2清洁电器:洗地机、扫地机器人的低液位和溢液提醒3宠物家电:宠物饮水机的缺水提醒/满水
    ICMAN 2025-03-20 15:23 106浏览
  •         在当今电子设备高度集成的时代,电路保护显得尤为重要。TVS管(瞬态电压抑制二极管)和压敏电阻作为一种高效的电路保护器件,被广泛应用于各种电子设备中,用以吸收突波,抑制瞬态过电压,从而保护后续电路免受损坏。而箝位电压,作为TVS管和压敏电阻的核心参数之一,直接关系到其保护性能的优劣。箝位电压的定义        箝位电压指瞬态保护器件(如TVS二极管、压敏电阻)在遭遇过压时,将电路电压限制在安全范围内的
    广电计量 2025-03-20 14:05 71浏览
  • 本文内容来自微信公众号【工程师进阶笔记】,以工程师的第一视角分析了飞凌嵌入式OK3506J-S开发板的产品优势,感谢原作者温老师的专业分享。前两周,有一位老朋友联系我,他想找人开发一款数据采集器,用来采集工业现场的设备数据,并且可以根据不同的业务场景,通过不同的接口把这些数据分发出去。我把他提的需求总结了一下,这款产品方案大概有以下功能接口,妥妥地一款工业网关,在网上也能找到很多类似的产品方案,为啥他不直接买来用?再跟朋友深入地聊了一下,他之所以联系我,是因为看到我在公众号介绍过一款由飞凌嵌入式
    飞凌嵌入式 2025-03-20 11:51 102浏览
  • 在电子制造领域,PCB(印刷电路板)的使用寿命直接决定了产品的长期稳定性和可靠性。捷多邦作为全球领先的PCB制造商,始终将质量放在首位,致力于为客户提供高可靠性、高性能的PCB解决方案。以下是捷多邦如何确保PCB使用寿命超过20年的核心技术与优势。 1. ​高品质原材料:从源头保障耐用性捷多邦采用国际认证的优质基材,如FR4、高频材料和高TG板材,确保PCB在高温、高湿等极端环境下的稳定性。通过严格的原材料筛选和入库检验,捷多邦从源头控制质量,避免因材料缺陷导致的失效问题。 
    捷多邦 2025-03-20 11:22 92浏览
  • 流感季急诊室外彻夜排起的长队,手机屏幕里不断闪烁的重症数据,深夜此起彼伏的剧烈咳嗽声——当病毒以更狡猾的姿态席卷全球,守护健康的战争早已从医院前移到每个人的身上。在医学界公认的「72小时黄金预警期」里,可穿戴设备闪烁的光芒正穿透皮肤组织,持续捕捉血氧浓度、心率变异性和体温波动数据。这不是科幻电影的末日警报,而是光电传感器发出的生命预警,当体温监测精度精确到±0.0℃,当动态血氧检测突破运动伪影干扰……科技正在重新定义健康监护的时空边界。从智能手表到耳机,再到智能戒指和智能衣物,这些小巧的设备通过
    艾迈斯欧司朗 2025-03-20 15:45 129浏览
  • 4月8-11日,第91届中国国际医疗器械博览会(CMEF)将在国家会展中心(上海)举办。这场全球瞩目的医疗科技盛宴以“创新科技,智领未来”为主题,旨在全方位展示医疗科技的最新成果,与来自全球的行业同仁一道,为全球医疗健康领域带来一场科技与商贸交融的产业“盛宴”。飞凌嵌入式作为专业的嵌入式技术解决方案提供商,一直致力于为医疗器械行业提供丰富的、高可靠性的嵌入式硬件主控解决方案。届时,飞凌嵌入式将为来自全球的观众带来适用于IVD、医疗影像、生命体征监测等医疗设备的嵌入式板卡、显控一体屏产品以及多款动
    飞凌嵌入式 2025-03-20 11:46 33浏览
  • 近日,保定飞凌嵌入式技术有限公司(以下简称“飞凌嵌入式”)携手瑞芯微电子股份有限公司(以下简称“瑞芯微”)正式加入2025年全国大学生嵌入式芯片与系统设计竞赛(以下简称“嵌入式大赛”),并在应用赛道中设立专属赛题。本次嵌入式大赛,双方选用基于瑞芯微RK3588芯片设计的ELF 2开发板作为参赛平台,旨在通过此次合作,促进产教融合,共同推动嵌入式系统创新人才的培养。全国大学生嵌入式芯片与系统设计竞赛是一项A类电子设计竞赛,同时也是被教育部列入白名单的赛事,由中国电子学会主办,是学生保研、求职的公认
    飞凌嵌入式 2025-03-20 11:53 62浏览
  • 为有效降低人为疏失导致交通事故发生的发生率,各大汽车制造厂及系统厂近年来持续开发「先进驾驶辅助系统」ADAS, Advanced Driver Assistance Systems。在众多车辆安全辅助系统之中,「紧急刹车辅助系统」功能(AEB, Autonomous Emergency Braking)对于行车安全性的提升便有着相当大的帮助。AEB透过镜头影像模块与毫米波雷达感测前方目标,可在发生碰撞前警示或自动刹车以降低车辆损伤以及乘员伤害。面临的挑战以本次分享的客户个案为例,该车厂客户预计在
    百佳泰测试实验室 2025-03-20 15:07 71浏览
  • 如同任何对我们工作方式的改变,新的工作方式必然会遇到许多必须面对的挑战。如果不解决组织在实施精益六西格玛过程中面临的障碍以及如何克服它们的问题,那么关于精益六西格玛的讨论就不算完整。以下列举了组织在成功实施精益六西格玛时常见的几个障碍,以及克服它们的方法:1)对精益六西格玛方法论缺乏理解。抵触情绪通常源于对精益六西格玛方法论的不了解,以及不相信它能真正发挥作用。这种情况在所有层级的人员中都会出现,包括管理层。虽然教育培训可以帮助改善这一问题,但成功的项目往往是打消疑虑的最佳方式。归根结底,这是一
    优思学院 2025-03-20 12:35 78浏览
  • PCIe 5.0应用环境逐步成形,潜在风险却蠢蠢欲动?随着人工智能、云端运算蓬勃发展,系统对于高速数据传输的需求不断上升,PCI Express(PCIe)成为服务器应用最广的传输技术,尤其在高效能运算HPC(High Performance Computing)及AI服务器几乎皆导入了最新的PCIe 5.0规格,使得数据传输的双向吞吐量达到了128GB/s,让这两类的服务器能够发挥最大的效能。不过随着PCIe 5.0的频率达到16GHz,PCB板因为高频而导致讯号衰减加剧的特性,使得厂商面临很
    百佳泰测试实验室 2025-03-20 13:47 69浏览
  • 贞光科技代理的品牌-光颉科技高精密薄膜电阻凭借0.01%的超高精度,在AI服务器电源模块中实现了精确电压分配、优化功率因数和减少热损耗,显著提升系统能效和可靠性。在当今的数字时代,人工智能(AI)服务器已成为数据中心的核心。随着AI应用的激增,服务器的性能和能效需求也在不断提高。电源模块作为服务器的关键组件,其性能直接影响整个系统的效率和可靠性。本文将探讨光颉科技高精密薄膜电阻,特别是其0.01%的精度,如何在AI服务器电源模块中提升能效。电源模块在AI服务器中的重要性电源模块负责将输入电源转换
    贞光科技 2025-03-20 16:55 112浏览
  • 全球领先的光学解决方案供应商艾迈斯欧司朗(SIX:AMS)近日宣布,凭借AS1163独立智能驱动器(SAID)成为中国领先的智能集成系统产品汽车制造商宁波福尔达智能科技股份有限公司(“福尔达”)环境动态照明应用的关键供应商。此次合作标志着汽车技术发展的一个重要时刻,充分展现了AS1163在优化动态照明应用系统成本方面的多功能性和先进性能。该产品支持传感器集成,拥有专为车顶照明设计的超薄外形,并能提升车内照明系统的性能。AS1163是一款先进的智能LED驱动器,能够与开放系统协议(OSP)网络无缝
    艾迈斯欧司朗 2025-03-20 14:26 73浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦