A High Speed SPI Driver Mode use 5 wire

ponyhan
Posts: 1
Joined: Wed Nov 05, 2014 2:53 pm

A High Speed SPI Driver Mode use 5 wire

Postby ponyhan » Fri Jan 23, 2015 6:06 pm

1.hardware
use 4 wire hspi plus 1 irq signal. irq is working in three motion, 1.mcu to 8266 send data, irq act as 8266 recv complete signal. 2. 8266 to mcu recv data, irq act as 8266 r0 - r15 data copy ready signal. 3. 8266 to mcu Asynchron communicate act as irq.

2.software
hspi can send/recv 64 byte max per operate. so the first byte of each package is command byte. 11xx xxxx two bit of this byte is split flag, first splite package signal is 1xxx xxxx, last splite package is x1xx xxxx. the left xx11 1111 total six bit indicate the length of package, just 63 max.

mcu program

send data process flow

/<<---------- have left data <<------------------------------------------------\
set first package flag -> check left length -> splite 63 bytes -> wait irq turn low -> send data -> wait irq up jump -> check left data length -> finish
\ --->> set last package flag --------->>/

recv data process flow
/<<---- wait irq turn low <<-----------------\
wait irq up jump -> get command byte -> get flag and data length -> is last package -> finish

3、the proform of driver
hspi in 20Mhz, can achive 5 Mbps max transfer. better than CC3000 style wifi mode with spi port.


1、硬件设计
HSPI的四条信号线,外加一个irq中断信号。中断信号工作在三种复合状态,一、mcu->8266 发送数据时,作为每包(64字节)接受完成的应答。二、8266->mcu 接受数据,作为每包(64字节)数据准备完毕的使能信号。三、8266->mcu 主动发起通信,作为使能中断。

2、软件设计

由于HSPI没次最多发送64字节数据,因此将首字节固定为command byte,用于大于63字节数据包的分包辅助命令。11xx xxxx 两位,作为数据分包标志,首包1xxx xxxx,末包x1xx xxxx。此两位不置,表示是中间的数据分包。xx11 1111 共6位数据,表示当前包的长度,最大正好63,除去command byte首字节,可用数据最大正好63。

mcu程序的设计流程

发送拆包流程
/ <<------------------------------------------ 还有数据 <<---------------------------- \
首包置位 -> 判断包长 -> 截取63字节数据 -> 等待irq 变低电平 -> 发送数据 -> 等待irq 上跳沿 -> 是否有剩余数据 ->完成数据发送退出
\ -->> 末包置位 剩余数据组包 -->>/


接收组包流程

/ <<--- 等待irq 变低电平 没收到末包标志 继续接受 <<--- \
等待irq 上跳沿 -> 取1字节的command byte -> 取首末包标志 包长 -> 收到末包标志 -> 结束接受


3、实际运行效果
hspi在20MHz的速度下,最高可达5Mbps的传输速度,可完全替代类似CC3000规格的spi接口wifi模块。

invention
Posts: 2
Joined: Tue Dec 12, 2017 8:15 pm

Re: A High Speed SPI Driver Mode use 5 wire

Postby invention » Tue Dec 12, 2017 9:05 pm

求大神指导,ESP8266 HSPI应用怎么一次传64字节
用两个8266,一个为master,一个为slave.
好像一次只能传输32字节。即使将dataLen改为64,slave产生SPI_SLV_WR_BUF_DONE中断后读取的数据,也只有W0~W7这32字节的数据是正确的。
spiData.cmd = MASTER_WRITE_DATA_TO_SLAVE_CMD;
spiData.cmdLen = 1;
spiData.addr = &value;
spiData.addrLen = 4;
spiData.data = sendData;
spiData.dataLen = 64;
SPIMasterSendData(SpiNum_HSPI, &spiData);

Who is online

Users browsing this forum: No registered users and 11 guests