esp8266 spi slave 驱动调试

最近在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)
    这里写图片描述

    cmd为2 ,表示主机发送,addr 必须为0 ,后面数据依次1-32。 和预期一致。
    这里写图片描述

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

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

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

这里写图片描述

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值