esp32 & esp8266 spi

三线SPI

在几个月以前,我就已经发现esp8266的寄存器中存在一个所谓的sio字段,这允许我们在3线spi模式下进行工作,这样我们就不需要额外将MISO和MOSI引脚连接在一起。(3线代表CLK,MOSI和CS,这里我们不需要CS线)

于是我就试着这么做了。结果有点奇怪:

  1. 第一次传输工作良好,我们成功在一条线上同时进行了半双工传输。
  2. 在第二次传输时,我们没有得到任何的ACK响应,这时总线已经被拉高。

好吧我不知道是什么原因。。。不过,esp8266的技术参考并没有记载这一奇葩的用途,网上也鲜有人提及这一点,或许是大家现在都用esp32了吧。。。

SWD相关

  1. 空闲时,SWDCLK为低电平

半双工模式

读写之间的延迟时钟设置:

SPIFLASH.user.usr_dummy = 0;
SPIFLASH.user1.usr_dummy_cyclelen = 0; // 这个是-1

esp32下的读阶段和写阶段的数据长度

SPI.mosi_dlen.usr_mosi_dbitlen = len -1;
SPI.miso_dlen.usr_miso_dbitlen = len -1;

内部寄存器

ck_dis CLK输出设置