欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

esp8266 spi slave 驱动调试

程序员文章站 2024-03-20 21:36:16
...

最近在ESP8266 上要搞个通讯协议与mcu 通讯 ,8266 做从机,开发的过程以及遇到的问题,记录下来,供参考。

1,首先根据需求和esp8266的spi说明文档参见esp8266-technical_reference_cn.pdf,MCU与8266 需要双向数据交互,且为了编程方便,通讯数据采用定长,最后决定采用双线透传协议通讯(有现成的例程也是重要原因,能少走弯路)

  1. spi 双线透传的例程在NONOS SDK 下,先把它的驱动文件 spi.c 搬到我的应用里来,我用的是RTOS SDK, 需要移植。

写了简单的测试程序。先初始化,并在接收中断里发送消息给任务。

spi_slave_init( SpiNum_HSPI, 32); 32 是数据段长度,也就是一次需要发送34 个字节才会触发接收中断。
  1. (不要在中断处理里面)加上调试信息,先确定通讯正常,由于MCU那边还没有开发,只有自己先想办法自测试了,直接搞了USB转SPI的调试板来测,先用逻辑分析仪来验证调试工具的信号是否满足条件。如图1,一共34个字节,cmd(1)+addr(1)+data(32)
    esp8266 spi slave 驱动调试

    cmd为2 ,表示主机发送,addr 必须为0 ,后面数据依次1-32。 和预期一致。
    esp8266 spi slave 驱动调试

然后将调试板和esp8266硬件连接,测试打印接受数据发现数据混乱,接收中断和发送中断都进去了,检查代码,看的眼花,还是先看硬件吧,一看四条线都接了,就是地线没接,不过看ESP8266 spitest 接线图也没写,加上地线以后,数据就OK了
esp8266 spi slave 驱动调试

4.继续spi从机发送调试,测试信号发现数据出错,测试发现还有点 规律-前面几个是正常的,后面就开始乱了,怀疑是时序问题,spi_slave_init ,增加MISO延时, 数据正常。如下 :

 SET_PERI_REG_MASK(SPI_CTRL2(spi_no),(0x7&SPI_MISO_DELAY_NUM)<<SPI_MISO_DELA_NUM_S) ;

esp8266 spi slave 驱动调试

注意,主机接收时,cmd 为3,ADDR 为0,后面的DATA 任意,只要长度满足就可以了。

相关标签: esp8266 spi slave