主题:EM9287利用SPI总线配置SSD1322的OLED屏

  共有26342人关注过本帖    
帅哥哟,离线,有人找我吗?
MS
1楼 信息 | 搜索 | 邮箱


加好友 发短信
EM9287利用SPI总线配置SSD1322的OLED屏  发帖心情 Post By:2015-8-7 14:51:00   [只看该作者]

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

 

 

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

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


  单帖管理 | 引用 | 回复 回到顶部
客人
2楼


  发帖心情 Post By:2015-8-7 17:06:00   [只看该作者]

EM9287的SPI最高可以20Mbps的波特率进行数据传输,且可以实验多字节数据DMA传输,所以按理不应该慢。请试试DMA方式通讯

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

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

  单帖管理 | 引用 | 回复 回到顶部
x10
3楼


  发帖心情 Post By:2015-8-8 8:26:00   [只看该作者]

应当用DeviceIoControl的多数据结块的tranfer方式,效率就很高。在Linux版本肯定是支持这个模式的,CE6我要查一下,如果没有支持,我们会尽快加上。请留一个能的邮箱,以便我们发新内核给你,谢谢!

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
MS
4楼 信息 | 搜索 | 邮箱


加好友 发短信
  发帖心情 Post By:2015-8-10 9:48:00   [只看该作者]

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

 

 

 

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


  单帖管理 | 引用 | 回复 回到顶部
zxw
5楼


  发帖心情 Post By:2015-8-10 11:27:00   [只看该作者]

你好!
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大小的整倍数,否则将被视作无效参数。


  单帖管理 | 引用 | 回复 回到顶部

返回首页

EM9287利用SPI总线配置SSD1322的OLED屏

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: