bieahoff 发表于 2011-9-2 11:08:05

RTT中msd.c文件中的MSD_WriteByte函数BUG

首先说我的环境,STM32F107的神舟IV号开发板,前些日子网络部分总是弄好了,期间在论坛里也发了好些帖子,得到了ffxz的及时回帖,感觉不错。
从昨天开始想试试RTT的文件系统,神舟IV号开发板用的是SPI1,我就把RTT里的SPI配置改成了SPI1,结果上来就郁闷了,程序卡在MSD_GoIdleState函数里面,具体代码大家自己找到看看。
MSD_GO_IDLE_STATE命令发出去之后,得到了其响应MSD_GetResponse(MSD_IN_IDLE_STATE)正确,但是发下面的命令MSD_SEND_OP_COND,就一直在这等正确应答数据,结果也一直等不到,就在这死循环了,但是单步调试的时候又能得到正确数据,然后一切初始化就过了。
这太让我郁闷了。
其实整个msd.c里面的函数都是官方发布的驱动修改过来的,大部分只是函数改个名字,变量定义改个名字等,结果我拿对比工具一对比,大部分函数都没改动,但是我发现MSD_WriteByte函数被改动了,官方的函数名是SD_WriteByte,RTT里的把写完一字节后再读一次的函数给删掉了,我把RTT里的这部分改成了和官方一样的,编译下载就OK了,识别到我的2G的SD卡。
这里我想说的是ST公司官方发布的文件函数是经过大家长时间使用的,稳定性应该是有一定保障的,SPI写一字节按理说写一下就完了不需要读操作,但人家这么写代码肯定是有原因的,也许是人家的芯片需要这么个操作,所以我建议RTT还是不要改动的好,改个名字也就罢了。
看来RTT发布的版本里对STM32F107的测试是不够的啊!
希望对RTT开发组有帮助。

aozima 发表于 2011-9-2 11:18:40

多谢反馈.

最先这个驱动就是从STM32给的例程中改的.
大部分芯片也没有问题,
直到去年年底换了个板子才发现这个问题.就把SVN中的已经修改了.
不知道楼主代码从哪边下载的,可能没有改到.
另外,即使改正这个.这驱动也只能作为演示用.并没有做其它强化测试.

bieahoff 发表于 2011-9-2 11:25:35

我是从你们官网上的链接地址下的,RT-Thread-0.3.1和RT-Thread-0.3.2我看了好像都是没有改到。

aozima 发表于 2011-9-2 11:27:54

请从SVN中下载吧.

bieahoff 发表于 2011-9-2 11:28:39

你们知道就好了,我昨天被这个问题折磨了一段时间,查了半天,刚开始还一度怀疑了开发板是不是布线有问题,哈哈!

bieahoff 发表于 2011-9-2 11:30:50

SVN是那个地址啊?
这个http://code.google.com/p/rt-thread/
吗?
还是要自己装个小乌龟,去https://rt-thread.googlecode.com/svn/trunk去取代码?

aozima 发表于 2011-9-2 11:33:13

置顶贴: 如何跟踪RT-Thread的开发情况

ffxz 发表于 2011-9-2 12:41:37

回复【楼主位】bieahoff
这里我想说的是ST公司官方发布的文件函数是经过大家长时间使用的,稳定性应该是有一定保障的,SPI写一字节按理说写一下就完了不需要读操作,但人家这么写代码肯定是有原因的,也许是人家的芯片需要这么个操作,所以我建议RTT还是不要改动的好,改个名字也就罢了。
-----------------------------------------------------------------------

应该是老的官方发布中是这样的,新的版本没跟踪依然是这样。另外,msd.c的代码还真的只能做为演示使用,用到实际当中会发现速度奇慢~~这块目前还没人专门针对SPI SD卡做个驱动。
页: [1]
查看完整版本: RTT中msd.c文件中的MSD_WriteByte函数BUG