主题:EM9280-SPI通信问题 共有87209人关注过本帖 |
---|
yy |
1楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-4 9:08:00 [显示全部帖子]
例程里是8bit的,你可能需要改成16bit的。
定义 private const int SSP_WORD_LENGTH_16BITS = 0xF; 然后后面 spiinit.eLength = SSP_WORD_LENGTH_16BITS; 而sSPI.BitCount是你要发送数据的长度,你确定是16吗?还有波形有办法发我邮箱下吗?我邮箱yy@emtronix.com
|
单帖管理 | 引用 | 回复 |
yy |
2楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-4 11:06:00 [显示全部帖子]
数据就是你要发送的数据的个数,如果填5,8bit就是5字节,16bit就是10字节。最后是有个波形给我们参考下。
[此贴子已经被作者于2013-11-4 11:51:59编辑过]
|
单帖管理 | 引用 | 回复 |
yy |
3楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-4 11:54:00 [显示全部帖子]
修改下,前面说错了,非常抱歉。BitCount的值为8或者16,分别表示8bits还是16bits。
有2个地方要修改 一个是SPIConfigure函数里的spiinit.eLength = SSP_WORD_LENGTH_16BITS; 一个是ReadFile或WriteFile时的SPI_INFO结构体sSPI.BitCount = 16; [此贴子已经被作者于2013-11-4 18:08:59编辑过]
|
单帖管理 | 引用 | 回复 |
yy |
4楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-4 17:55:00 [显示全部帖子]
抱歉开始说错了,我上面修改了,我测试了下程序.
修改SPI.cs spiinit.eLength = SSP_WORD_LENGTH_16BITS; 修改Program.cs TxBuffer[0] = 0xfc; TxBuffer[1] = 0xf3; TxBuffer[2] = 0x00; TxBuffer[3] = 0x00; TxBuffer[4] = 0x00; TxBuffer[5] = 0x00; TxBuffer[6] = 0x00; TxBuffer[7] = 0x00; TxBuffer[8] = 0x00; TxBuffer[9] = 0x00; sSPI.BitCount = 16; sSPI.pDatBuf = pTxBuffer; sSPI.dwDatLen = 1; sSPI.bLockCS = 0; Marshal.Copy(TxBuffer, 0, pTxBuffer, 10); bRes = SPI.WriteFile(hSPI, ref sSPI, sizeSPI, ref uLen, 0); 我看到的波形SPI_SCLK即CN9的3号脚输出了16个脉冲。SPI_MOSI即CN9的4号脚是 11110011 11111100 正好是f3 fc说明是对了的。 程序发你邮箱了,波形图不是太清楚 但是你应该能看出来。
[此贴子已经被作者于2013-11-4 18:39:21编辑过]
|
单帖管理 | 引用 | 回复 |
yy |
5楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-6 11:29:00 [显示全部帖子]
readfile返回false最大可能是你的hSPI句柄不对,你看下句柄是不是-1?
如果句柄是-1,可能你同时跑了2个程序,SPI已经打开过了,重复打开失败,你试下把之前那个先关了。
|
单帖管理 | 引用 | 回复 |
yy |
6楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-7 9:36:00 [显示全部帖子]
我又看了下,如果悬空测的话,返回false是正常的,驱动是判断spi通信是否成功,来返回true或false的。
[此贴子已经被作者于2013-11-7 9:36:00编辑过]
|
单帖管理 | 引用 | 回复 |
yy |
7楼 信息 | 搜索 | 邮箱 |
加好友 发短信 |
Post By:2013-11-21 17:51:00 [显示全部帖子]
抱歉,我们发现这个问题了。我们改下这个问题,改好了测试了我邮件联系你。
现在你可以先不管这个返回值。
|
单帖管理 | 引用 | 回复 |