pq113_6的个人空间 https://bbs.21ic.com/?51690 [收藏] [复制] [RSS]

日志

VNC2 V2DAP学习笔记 7-SPI Unmanaged接口设计

已有 483 次阅读2019-1-23 10:52 |个人分类:USB桥接|系统分类:原稿与翻译

UNMANAGED接口模式与FULL DUPLEX接口模式类似,区别是UNMANAGED没有读写命令字,也不判断状态。该模式需要V2DAP修改代码重新编译。请用Vinculum II IDE打开V2DAP的工程,打开V2DAP.c文件,搜SPI_SLAVE_MODE_VI_COMPATIBLE,将”monitor_iocb.set.param = SPI_SLAVE_MODE_VI_COMPATIBLE;”修改为”monitor_iocb.set.param = SPI_SLAVE_MODE_UNMANAGED;”,并修改monitor.c中的函数monReadCmd,如下(do while循环中丢掉0xFE字符)

if ((cmdDataIndex == 0) && charRead == 0xfe)

         continue;

if (cmdDataIndex < MAX_CMD_LEN)

{

         cmdData[cmdDataIndex] = charRead; // Append our command buffer...

         cmdDataIndex++;                   // Increment the index...

}

重新编译下载rom

因为是全双工的模式,所以在读数据的时候,HOST端也会写数据,VNC2的读buffer中也会有这些数据,所以这里定义一个特殊字符0xfe(目前的命令中没有用到的字符),当开始读到0xfe时就丢弃知道读到有效的命令。

UNMANAGED接口模式就是标准的SPI接口模式,VNC2内部有固定的buffer缓冲数据而已。因为UNMANAGED是一种不安全的通信方式,所以必须在write中加入2msdelay时间通信才正常。

void vnc2SpiWrite(char spiData)

{

uint8_t rd;

vnc2SpiEn();

rd = spiTransferByte(spiData);

vnc2SpiDis();

delayms(2);

//delayms(20); //For debug

}

int8_t vnc2SpiRead(char *pSpiData)

{

         uint8_t rd;

         vnc2SpiEn();

         *pSpiData = spiTransferByte(0xfe);

         vnc2SpiDis();

         return XFER_OK;

}

同样,修改接口宏定义

#define monWrite vnc2SpiWrite

#define monRead vnc2SpiRead

评论 (0 个评论)