esp32 spi_slave

 

 

复制代码
#define GPIO_MOSI                   35
#define GPIO_MISO                   37   
#define GPIO_SCLK                   36

#define RCV_HOST                    SPI3_HOST
#include <stdio.h>
#include <string.h>

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include <driver/gpio.h>
#include <driver/spi_master.h>
#include <driver/spi_slave.h>
#include "nvs_flash.h"
#include "w25q64.h"
void app_main(void)
{
    esp_err_t err;
   

    // Initialize NVS. 
    err = nvs_flash_init();
    if (err == ESP_ERR_NVS_NO_FREE_PAGES) {     // can happen if truncated/partition size changed
        ESP_ERROR_CHECK(nvs_flash_erase());
        err = nvs_flash_init();
    }
    ESP_ERROR_CHECK(err);

    // configuration for the SPI bus
    spi_bus_config_t buscfg={
        .mosi_io_num = GPIO_MOSI,
        .miso_io_num = GPIO_MISO,
        .sclk_io_num = GPIO_SCLK,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
//        .flags = SPICOMMON_BUSFLAG_IOMUX_PINS
        .flags = SPICOMMON_BUSFLAG_GPIO_PINS
      };  

    // configuration for the SPI slave interface
    spi_slave_interface_config_t slvcfg={
        .mode = 3,                    //CPOL=1, CPHA=1
        .spics_io_num = -1,
        .queue_size = 3,
        .flags = SPI_SLAVE_BIT_LSBFIRST
    }; 

    // initialize SPI slave interface
    err = spi_slave_initialize(RCV_HOST, &buscfg, &slvcfg, SPI_DMA_CH_AUTO);    // can't disable DMA. no comms if you do...


    spi_slave_transaction_t spi_slave_trans;

    WORD_ALIGNED_ATTR uint8_t recvbuf[20];
    WORD_ALIGNED_ATTR uint8_t sendbuf[20];


    while(1) {
        memset(recvbuf, 0x55, 20);

        //Set up a transaction of 20 bytes to send/receive
        spi_slave_trans.length = 20*8;

        spi_slave_trans.tx_buffer = sendbuf;
        spi_slave_trans.rx_buffer = recvbuf;
 
        spi_slave_transmit(RCV_HOST, &spi_slave_trans, portMAX_DELAY);

        uint8_t rx_checksum = 0;
        for (uint8_t byte_cnt = 0; byte_cnt < 18; byte_cnt++) { 
            // calculate checksum
            rx_checksum += recvbuf[byte_cnt];

        }

        printf("%02x %02x %02x   %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x   %02x %02x (calc %d)  rx_checksum: %d \n", 
            recvbuf[0],  recvbuf[1],  recvbuf[2],  recvbuf[3],  recvbuf[4],  recvbuf[5],  recvbuf[6],  recvbuf[7],  recvbuf[8],  recvbuf[9], 
            recvbuf[10], recvbuf[11], recvbuf[12], recvbuf[13], recvbuf[14], recvbuf[15], recvbuf[16], recvbuf[17], recvbuf[18], recvbuf[19], 
                (recvbuf[18]<<8)+(recvbuf[19]), 
                rx_checksum
            );

        //vTaskDelayMs(1000);


    }

}
复制代码

 

posted on   lydstory  阅读(195)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2020-09-05 采煤机
2020-09-05 艾体威尔pos 终端
2020-09-05 xinguodu POS机
2020-09-05 MSYS2
2020-09-05 cario可以将字符字形转换为png文件
2020-09-05 gtk+ 2.0
2019-09-05 密码机

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示