【ESP32】BL0942功耗传感器SPI接口驱动

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;
}

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;    
}
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ESP32驱动SPI屏幕是通过使用SPI通信协议来与屏幕进行通信和控制的过程。ESP32是一款集成了Wi-Fi和蓝牙功能的微控制器,具有丰富的通信接口和强大的处理能力,因此可以很好地驱动SPI屏幕。 首先,需要在ESP32上配置SPI硬件接口ESP32的开发环境通常提供了相关的库和函数,可以方便地配置和控制SPI接口。我们需要设置SPI的工作模式、时钟频率等参数,以适配特定的SPI屏幕。 接下来,我们需要根据SPI屏幕的通信协议来编写驱动程序。SPI屏幕通常有一套特定的指令集,用于控制屏幕的显示、清除、写入数据等操作。我们需要了解这些指令并将其编码到驱动程序中。通过发送这些指令和数据,可以控制屏幕的各种显示效果,如文字、图像等。 在驱动程序中,还需要实现数据的传输和接收。在SPI通信中,数据通过主设备(即ESP32)和从设备(即屏幕)之间的SPI总线传输。我们需要调用相关的函数来发送和接收数据,以实现与屏幕的通信。 最后,我们需要将屏幕的显示数据发送到驱动程序中。数据可以来自于ESP32的内部存储器或外部设备。我们需要将数据格式化为SPI屏幕可以接受的格式,并通过SPI接口发送到屏幕上进行显示。 总的来说,ESP32驱动SPI屏幕的过程涉及到硬件配置、指令编码、数据传输等多个步骤。通过正确编写驱动程序,我们可以控制和显示各种内容在SPI屏幕上,实现丰富的用户界面和交互体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步、至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值