Wince6环境下OMAP3530平台SPI接口调试笔记
来源:互联网 发布:快走丝hl编程系统视频 编辑:程序博客网 时间:2024/06/06 23:55
Wince6环境下OMAP3530平台SPI接口调试笔记
guyue3988 2012年2月1日13:14:45
1、 开发平台:SBC8100,开发环境:VS2005
2、 SBC8100的30pin多功能扩展接口中SPI1接口有4个引脚:SPI1_CLK; SPI1_CS0; SPI1_SIMO; SPI1_SOMI;
3、 参考TI官方Omap3530 wince6 SDK开发包:http://www.ti.com.cn/tool/cn/wincesdk-a8。
安装后查看其自带的SPI测试程序: \WINCE600\PLATFORM\EVM_OMAP3530\SRC\test\Tux_SPI。
VS2005中新建SPI_Test的MFC应用程序,把Tux_SPI复制过来,编译出现很多错误。原因sdk_spi.h在SBC8100中没有,把它copy过来,同时注释g_pKato相关代码行,重新编译通过OK~。
4、 设断点调试发现,hSpi = CreateFile(/*DeviceName*/L"SPI1:", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);执行以后hSpi一直为空,查找原因,原以为PIN_MOD没有设置好,检查之:\WINCE600\PLATFORM\SBC8100\SRC\BOOT\XLDR中的platform.c文件中有关SPI1的管脚配置如下:
// MCSPI1
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_CLK, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0)); /*MCSPI1_CLK*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_SIMO, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0)); /*MCSPI1_SIMO*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_SOMI, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_0)); /*MCSPI1_SOMI*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_CS0, (INPUT_DISABLE | PULL_INACTIVE | MUX_MODE_0)); /*MCSPI1_CS0*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_CS1, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_4)); /*GPIO_175 (touch irq)*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_CS2, (INPUT_ENABLE | PULL_INACTIVE | MUX_MODE_4)); /*GPIO_176 (eth irq)*/
OUTREG16(&pConfig->CONTROL_PADCONF_MCSPI1_CS3, (INPUT_DISABLE | PULL_INACTIVE | MUX_MODE_4)); /*GPIO_177 (GPIO Expansion bus)*/
配置显示这几个管脚已设置为SPI1功能模式,没有错啊!打电话给Timll工程师,给的解决方案就是检查PIN_MOD的设置,然后不知所然,陷入纠结当中。
5、 无意间想到工程的批处理文件对驱动的加载有着莫大联系,于是马上检查SBC8100.bat,果然啊!!有重大发现“set BSP_NOSPI1=1”,结合 platform.reg中“IF BSP_NOSPI !”和“IF BSP_NOSPI1 !”,问题就出在这里啊,如果设为1那么驱动spi.dll就不加载,激动着把它改为:“set BSP_NOSPI1=”,然后Sysgen,重新烧写系统到Flash,测试发现CreateFile成功,hSpi不为空!
接下来测试SPI_Configure():
if(!DeviceIoControl(hSpi, IOCTL_SPI_CONFIGURE, &SpiConfigure, sizeof(SpiConfigure), NULL, 0, &dwBytesReturned, NULL)) { bRet = FALSE; goto CLOSE; }
SPI_Configure成功!
测试SPI_WriteRead():
if(!DeviceIoControl(hSpi, IOCTL_SPI_WRITEREAD, pInBuffer, sizeof(pInBuffer), pOutBuffer, sizeof(pOutBuffer), &dwBytesReturned, NULL)) { bRet = FALSE; goto CLOSE; }
if条件一直为TURE,重新进入Close,分析之:
SPI_Open(), SPI_Configure()都已经成功,而SPI_ WriteRead ()失败,说明驱动中SPI_ WriteRead函数有问题,检查SBC8100中SPI相关的驱动:\WINCE600\PLATFORM\SBC8100\SRC\CSP\OMAP3430\SPI,其中通过spi.c打开spi.h,发现spi.h中有如下定义:#define SPI_DEVICE_NAME L"SPI2:"
而且spi.c中SPI_IOControl部分中的switch (dwCode)也没有IOCTL_SPI_WRITEREAD这一分支!靠!联想到SBC8100平台中SPI接口只有在触摸屏上有应用,明白了!!SBC8100自带的SPI驱动spi.dll实际上只有SPI2的驱动,SPI1、3、4的驱动加载的也是spi.dll,我们如果打开SPI1设备且SPI_ WriteRead ()那就理所当然的失败啊!!!
解决方法:参考\WINCE600\PLATFORM\SBC8100\SRC\CSP\OMAP3430\SPI
以及\WINCE600\PLATFORM\COMMON\SRC\SOC\COMMON_TI_V1\COMMON_TI\SPI,自己编写SPI1的驱动并输出为spidriver.dll,更改platform.reg内容如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SPI1]
"Prefix"="SPI"
"Dll"="spidriver.dll"
然后Sysgen,重新烧写系统到Flash,测试之,SPI_ WriteRead ()成功!!!!
- Wince6环境下OMAP3530平台SPI接口调试笔记
- omap3530(Cortex-A8)硬件平台软件调试笔记
- SPI接口调试
- SPI调试笔记
- OMAP3530平台搭建日志
- Fedora 13下建立 omap3530 开发环境 - 交叉编译器
- Fedora 14下建立 omap3530 开发环境 - 交叉编译器
- OMAP3530 WIFI 调试手记
- linux下的spi调试.
- FriendlyARM Tiny210v2 SPI接口Android平台测试
- wince6.0 语音提示(.net平台下)
- Samsung s3c6410/s3c2416 的SPI接口调试
- Samsung s3c6410/s3c2416 的SPI接口调试
- wince6.0 spi驱动
- Edison平台eclipse环境下通过MRAA库使用IIC、SPI、UART例程(BMI160、MS8607)
- JRTPLib移植到OMAP3530平台
- 设置WINCE6下的LOADCEPC的环境
- Ubuntu环境下使用OpenOCD调试目标平台
- 手工垃圾清除批处理程序源代码
- 一年成为Emacs高手(像神一样使用编辑器)
- 让猎头雨天送伞--大话猎头
- PID算法模块哦
- 自己设计干扰,自己玩看门狗
- Wince6环境下OMAP3530平台SPI接口调试笔记
- XP(win7也可参考)下 vs2008 +cuda4.0配置
- 基于DOS编程语言的一个系统管理工具
- VC++动态链接库(DLL)编程深入浅出
- 《基于现代智能热水器的设计》及远程控制
- MFC技巧总结2
- 60款很酷的jQuery 幻灯片演示和下载
- 模块化编程的苦恼~
- SPI CAN IIC简介