主题 : 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: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
1楼  发表于: 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
2楼  发表于: 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
3楼  发表于: 2014-09-09 16:59

 回 2楼(wuweidong) 的帖子

是数组的地址问题,已解决,感谢建议~
一切都是瞬息,一切都将会过去
级别: 新手上路
UID: 104031
精华: 0
发帖: 12
金钱: 60 两
威望: 12 点
贡献值: 0 点
综合积分: 24 分
注册时间: 2014-05-12
最后登录: 2014-10-13
4楼  发表于: 2014-09-26 16:02

 回 6楼(seaboy) 的帖子

一个地址只能存一个BYTE  把开数组的数据格式改成BYTE 就对了...