ESP8266 hspi的调试

这一两个礼拜基本上都在爬这个坑,功夫不负有心人。终于搞定了,其实非常简单。以为这个东西有多么的复杂,其实不是这样的。被一些网上博主给误导了!
8266端我用的是:ESP8266_NONOS_SDK-3.0\examples\peripheral_test\user\spi_test
8266做从机 单片机做主机
可以成功的往8266寄存器 SPI_W0----SPI_W7写入数据
可以成功的读8266寄存器SPI_W8----SPI_W16读取出里面数据

单片机Master端:
发送数据格式:CMD(1byte)+ADDR(1byte)+DATA,
整个过程很简单,按照这个格式发送出去就好了
整个过程CS拉低。
Most Significant Bit First
8bit数据传输;
CPOL=0;
CPHA=0;

8266 端直接调用下面测试函数即可:
其中spi_slave_isr_sta为中断回调函数。
// Test spi slave interfaces.
void ICACHE_FLASH_ATTR spi_slave_test()
{
//
SpiAttr hSpiAttr;
hSpiAttr.bitOrder = SpiBitOrder_MSBFirst;
hSpiAttr.speed = 0;
hSpiAttr.mode = SpiMode_Slave;
hSpiAttr.subMode = SpiSubMode_0;

// Init HSPI GPIO
WRITE_PERI_REG(PERIPHS_IO_MUX, 0x105);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, 2);//configure io to spi mode
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, 2);//configure io to spi mode
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, 2);//configure io to spi mode
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, 2);//configure io to spi mode

os_printf("\r\n ============= spi init slave =============\r\n");
SPIInit(SpiNum_HSPI, &hSpiAttr);

// Set spi interrupt information.
SpiIntInfo spiInt;
spiInt.src = (SpiIntSrc_TransDone
    | SpiIntSrc_WrStaDone
    |SpiIntSrc_RdStaDone
    |SpiIntSrc_WrBufDone
    |SpiIntSrc_RdBufDone);
spiInt.isrFunc = spi_slave_isr_sta;
SPIIntCfg(SpiNum_HSPI, &spiInt);

// SHOWSPIREG(SpiNum_HSPI);

SPISlaveRecvData(SpiNum_HSPI);
uint32_t sndData[8] = { 0 };
sndData[0] = 0x35343332;
sndData[1] = 0x39383736;
sndData[2] = 0x3d3c3b3a;
sndData[3] = 0x11103f3e;
sndData[4] = 0x15141312;
sndData[5] = 0x19181716;
sndData[6] = 0x1d1c1b1a;
sndData[7] = 0x21201f1e;

SPISlaveSendData(SpiNum_HSPI, sndData, 8);
WRITE_PERI_REG(SPI_RD_STATUS(SpiNum_HSPI), 0x8A);
WRITE_PERI_REG(SPI_WR_STATUS(SpiNum_HSPI), 0x83);

}

想要单片机端源码的,私聊

发布了7 篇原创文章 · 获赞 8 · 访问量 2887

猜你喜欢

转载自blog.csdn.net/oDuanYanGuHong/article/details/93055168