主题 : wince6.0 6410 SPI   Writefile()函数只能正确传送一个BYTE 复制链接 | 浏览器收藏 | 打印
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
楼主  发表于: 2014-09-07 10:14

 wince6.0 6410 SPI   Writefile()函数只能正确传送一个BYTE

如题,驱动和BSP皆由友善官网提供,应用程序CreateFile()成功,DeviceIoControl()成功,使用DMA模式SPI传输数据,想用WriteFile()连续传送8个字节,用示波器抓包发现只有第一个byte是正确的,后面的7个都是误码,请问是什么原因?

关键代码如下:

h_spi = CreateFile(TEXT("SPI1:"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

DWORD dwWritenSize = 0;
DWORD dwWritenData[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};

SET_CONFIG  Set_SPI_Config;

Set_SPI_Config.dwMode = SPI_MASTER_MODE;
...
Set_SPI_Config.bUseTxDMA = TRUE;

DeviceIoControl(h_spi, SPI_IOCTL_SET_CONFIG, &Set_SPI_Config, sizeof(Set_SPI_Config), NULL, 0, NULL, NULL);
DeviceIoControl(h_spi, SPI_IOCTL_START, NULL, 0, NULL, 0, NULL, NULL);

WriteFile(h_spi, dwWritenData, 8, &dwWritenSize, NULL);


畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
贡献值: 5 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
1楼  发表于: 2014-09-09 09:25

 Re:wince6.0 6410 SPI  Writefile()函数只能正确传送一个BYTE

1. 最好设置一下分频系数;
2. 试下不用dma;
3. 试下不用中断的方式;
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
贡献值: 5 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
2楼  发表于: 2014-09-09 09:26

 Re:wince6.0 6410 SPI  Writefile()函数只能正确传送一个BYTE

4. 极性和相位也设置一下;
好好学习,天天鲁管
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
3楼  发表于: 2014-09-09 09:36

 回 2楼(wuweidong) 的帖子

1.  分频系数从60调到480(120, 240, 360), 结果一样
2.  不使用DMA和中断,用轮询模式,结果也只能正确发第一个BYTE
3.  极性和相位用的是默认的上升沿无延时
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
4楼  发表于: 2014-09-09 09:41

 回 2楼(wuweidong) 的帖子

另外Writefile返回值为1, 用RETAILMSG()从调试串口中打印出的信息:[SPI]SPI_Write : Return Value : 8,应该说明他写成功了,是从第二个地址开始地址值就不对了么?
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
5楼  发表于: 2014-09-09 16:59

 回 2楼(wuweidong) 的帖子

是数组的地址问题,已解决,感谢建议~
级别: 新手上路
UID: 105871
精华: 0
发帖: 2
金钱: 10 两
威望: 2 点
贡献值: 0 点
综合积分: 4 分
注册时间: 2014-07-07
最后登录: 2014-09-29
6楼  发表于: 2014-09-15 21:51

 回 5楼(别给翔扯淡) 的帖子

请问你问题怎么解决的?数组dwWritenData[8]要分配地址吗?能否详细说下
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
7楼  发表于: 2014-09-26 16:02

 回 6楼(seaboy) 的帖子

一个地址只能存一个BYTE  把开数组的数据格式改成BYTE 就对了...
级别: 新手上路
UID: 98665
精华: 0
发帖: 16
金钱: 80 两
威望: 16 点
贡献值: 0 点
综合积分: 32 分
注册时间: 2013-12-03
最后登录: 2019-04-10
8楼  发表于: 2015-12-05 16:19

 回 7楼(别给翔扯淡) 的帖子

楼主,能否提供一下你的wince6.0 6410 SPI  案列吗?正在做SPI的项目,没有头绪,先谢谢了,可以考虑付费哟!邮箱1156026611@qq.com
级别: 新手上路
UID: 124728
精华: 0
发帖: 32
金钱: 165 两
威望: 33 点
贡献值: 0 点
综合积分: 64 分
注册时间: 2016-04-24
最后登录: 2016-06-01
9楼  发表于: 2016-05-24 18:37
楼主、楼主、楼主。顶一下,
装不出淑女气质