回复帖子:(客人(61.139.*.*))EM9287的SPI最高可以20Mbp...

用户名:   *您没有注册?
密码:   *忘记论坛密码?    标题采用“回复:XXX....”
验证码 点击获取验证码
主题标题:  *不得超过 200 个汉字
当前心情
上一页 发帖表情 下一页
内容
  

主题最新回顾(发布时间:2015-8-10 11:27:00)
--  作者:zxw(61.139.*.*)
--  
你好!
CE6系统支持这种读写方式,给你的网页连接中也说过该方式的使用方法。
在光盘中的EM9280_SPIDemo例子程序中也有代码可以参考
你的邮件中,我把SPI应用方法的文章也再次发给你了,可以先看看。具体那里不清楚,可以提的更明确一些更好!

混合型SPI操作需要用到以下数据结构: 
  typedef struct _SPITransfer 
  { 
    LPVOID pTxBuff; // SPI发送buffer指针 
    LPVOID pRxBuff; // SPI接收buffer指针 
    DWORD dwBufLength; // 本次SPI传输的字节数 
  } SPITransfer;

 

  pTxBuff:SPI输出数据BUFF指针 
  pRxBuff:SPI读入数据BUFF指针 
  dwBufLength:SPI数据传输长度,以字节为单位

 

  注意,EM9280的SPI接口仅支持半双工操作,因此在上述结构中,只能有一个buffer指针为有效指针,另一个必须为NULL。dwBufLength的定义与单向读写的定义一致。具体的传输是通过DeviceIoControl来实现的,举例说明,本例首先进行发送1个字节(8-bit SPI),然后接收2个字节。

 

  SPITransfer Trans[2]; 
  BYTE Tx[16], Rx[16]; // buffer足够大 

  Tx[0] = 0xE5; // 发送的字节 
  Trans[0].pTxBuf = Tx; 
  Trans[0].pRxBuf = NULL; 
  Trans[0].dwBufLength = 1; // 要发送1字节 
  Trans[1].pTxBuf = NULL; 
  Trans[1].pRxBuf = Rx; 
  Trans[1].dwBufLength = 2; // 要接收2字节 

  DeviceIoControl(hSPI, 
    SPI_IOCTL_EXCHANGE, 
    Trans, // in buffer 
    sizeof(Trans) , // in buffer size 
    NULL, 
    0, 
    NULL, 
    NULL))

 

  在上述调用中需要注意的是,DeviceIoControl()输入参数中的buffer长度必须是数据结构SPITransfer大小的整倍数,否则将被视作无效参数。


主题最新回顾(发布时间:2015-8-10 9:48:00)
--  作者:MS
--  

您好,请问DeviceIoControl多数据结块的Transfer方式怎么用?还有您查了wince6.0支持该传输方式吗?

 

 

 

我的邮箱:njutjl@126.com    谢谢!


主题最新回顾(发布时间:2015-8-8 8:26:00)
--  作者:x10(118.113.*.*)
--  
应当用DeviceIoControl的多数据结块的tranfer方式,效率就很高。在Linux版本肯定是支持这个模式的,CE6我要查一下,如果没有支持,我们会尽快加上。请留一个能的邮箱,以便我们发新内核给你,谢谢!

主题最新回顾(发布时间:2015-8-7 17:06:00)
--  作者:客人(61.139.*.*)
--  
EM9287的SPI最高可以20Mbps的波特率进行数据传输,且可以实验多字节数据DMA传输,所以按理不应该慢。请试试DMA方式通讯

可以参考这个链接  http://www.emtronix.com/case/case2014673.html

注:该方法是WinCE6.0系统上有效,不适用与linux系统,请确认你的系统是否是CE,如果是,则可以参考

主题最新回顾(发布时间:2015-8-7 14:51:00)
--  作者:MS
--  EM9287利用SPI总线配置SSD1322的OLED屏

当利用EM9287的SPI总线配置SSD1322时,wince调用上层API读写SSD1322时,循环1万多次读写发现数据传输速度过慢,从而导致OLED屏刷屏过慢(SPI总线需要对SSD1322进行1万多次读写RAM才能刷屏)。

 

 

请问:是不是因为当上层应用程序调用WINCE里的SPI驱动的读写函数速度过慢导致的,SPI总线虽然可达10MHz频率,但事实上调用API函数之后的读写速度大大降低,远远没有10MHz的速率。

请问:是否可以改进SPI的读写驱动,提高读写速率?