码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ESP32-SPI接口bl0942驱动


    ESP32-SPI接口bl0942驱动

      • 1. bl0942 电路设计
      • 2. bl0942 spi驱动时序
      • 3. esp32 spi 接口简介
      • 4. esp32驱动 bl0942 测试结果
        • 4.1 读寄存器
        • 4.2 写寄存器
      • 5. esp32驱动 bl0942 代码解析
        • 5.1 初始化
        • 5.2 添加设备

    BL0942功耗模块在物联网设备中的应用比较广泛,本博文完成ESP32基于SPI接口驱动功耗BL0942模块(上海贝岭公司)的寄存器的读写,从而可以完成寄存器模式的配置,以及读取寄存器的值完成电流电压,功率等值的计算。

    1. bl0942 电路设计

    在这里插入图片描述
    在这里插入图片描述

    2. bl0942 spi驱动时序

    在通信模式下,先发送 8bit 识别字节(0x58) 或(0xA8), (0x58)是读操作识别字节, (0xA8)是写操作
    识别字节,然后再发送寄存器地址字节,决定访问寄存器的地址。下图分别示出读出和写入操作的数据传送顺序。 一帧数据传送完成, BL0942 重新进入通信模式。每次读/写操作所需的 SCLK 的脉冲个数均为 48 位。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3. esp32 spi 接口简介

    参考:【ESP32-IDF】 02-4 外设-SPI_Ciaran-byte的博客
    SPI资源描述
       esp32一共有4个spi外设。
    SPI0和SPI1是专有SPI,其中SPI0是私有的,用于系统主flash的,不对用户开放。SPI1只能用于主机模式,引脚与SPI0共用,用于操作系统主flash。SPI0与SPI1共用同一个总线判决器。
    SPI2和SPI3是通用SPI,给用户使用,用于驱动外部设备。SPI2也叫做HSPI,SPI3也叫做VSPI。SPI2和SPI3的引脚可以任意安排。并且每个SPI可以使用三个片选线。意味着每个SPI外设可以同时驱动三组设备。

    在这里插入图片描述

    4. esp32驱动 bl0942 测试结果

    4.1 读寄存器

    数据格式:
    发送 :读写cmd + 寄存器address
    返回: data_l + data_m + data_r + checksum

    说明:BL0942模块通讯都是 3byte , 不足 24bit 的高位补零,,注意大小端格式
    在这里插入图片描述
    在这里插入图片描述

    4.2 写寄存器

    数据格式: 读写cmd + 寄存器address + data_l + data_m + data_r + checksum 每帧共6 byte ,其中发送数据为4byte
    在这里插入图片描述

    5. esp32驱动 bl0942 代码解析

    • esp32的spi接口初始化 bl0942_spi_bus_init();
    • 将设备添加到esp32的spi总线上
    • 读写寄存器测试

    5.1 初始化

    esp_err_t bl0942_spi_bus_init(){
    
        esp_err_t ret;
        ESP_LOGI(TAG, "Initializing bus SPI%d...", EEPROM_HOST+1);
        spi_bus_config_t buscfg={
            .miso_io_num = PIN_NUM_MISO,
            .mosi_io_num = PIN_NUM_MOSI,
            .sclk_io_num = PIN_NUM_CLK,
            .quadwp_io_num = -1,
            .quadhd_io_num = -1,
            .max_transfer_sz = 60*8,   // 最大传输值
        };
        ret = spi_bus_initialize(EEPROM_HOST, &buscfg, DMA_CHAN);  // esp32 spi 接口初始化
        ESP_ERROR_CHECK(ret);
        if(ret==ESP_OK)
             printf("Initializing esp32_spi_bus success! \r\n");
       return ret;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    5.2 添加设备

    //Attach the LCD to the SPI bus
    esp_err_t bl0942_spi_bus_add_device(){
    
            esp_err_t ret;
    
            spi_device_interface_config_t devcfg={
             .address_bits = 8,     //配置地址位长度,如果设置为0,在通讯的时候就不会发送地址位
             .command_bits = 8,      //配置命令位长度
             .clock_speed_hz = 800*1000,     //  800 khz
             .mode = 1,              //SPI mode 1
            /*从EEPROM读取忙信号的时序要求不能容易地被SPI事务模拟。我们需要通过SW控制CS引脚来手动检查忙信号*/
            .spics_io_num = -1,
            .queue_size = 7, //传输队列大小,决定了等待传输数据的数量
            .flags = SPI_DEVICE_HALFDUPLEX | SPI_DEVICE_POSITIVE_CS, //半双工通信
        };  
        ret=spi_bus_add_device(EEPROM_HOST, &devcfg, &spi);
        ESP_ERROR_CHECK(ret);  
        if(ret==ESP_OK)
            printf("bl0942_spi_bus_add_device success!  \r\n"); 
        return ret;    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    基于Springboot+mysql的闲置二手交易网站系统设计
    比较Visual Studio Code中的文件
    【2023,学点儿新Java-05】搭建Java开发环境:什么是JDK、JRE、JVM、Java API?|G1垃圾回收算法 |应该选择哪个版本的jdk?| 安装jdk17 |如何找到各个版本jdk
    Jetsonnano B01 笔记6:开启USB摄像头
    Contention Based Energy Efficient Wireless Sensor Network – A survey
    常用负载均衡详解
    SCI论文还迟迟动不了笔?2/3区仅1个月25天录用,看看经验之谈
    数据库字段打标
    神奇的 SQL ,同时实现小计与合计,阁下该如何应对
    【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023
  • 原文地址:https://blog.csdn.net/qq_39217004/article/details/127507352
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号