XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1225回复:9

求教各位老大,D12写正常,但是读不正常!!

楼主#
更多 发布于:2004-12-03 12:02
本人在测试对D12的读写控制时,写是正常的,可是在通过对D12的chip ID读的过程当中发现只有一次读正确过,程序始终都没有改变过,之后就再也读不正确了,不知道是什么原因。
还忘各位老大,给小弟点建议!

后进而勃发
xcyzdd
驱动牛犊
驱动牛犊
  • 注册日期2004-09-18
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-03 14:46
你上次不是说是时序的问题吗?
你的芯片已经能工作了,肯定是软件的问题

另外,问大哥你一下,我的D12的clkout在没插上仿真头的时候是有4m输出的,插上仿真头之后就编程低电平而不是2.5v了,请赐教是怎么回事
Genius is nothing but labor and diligence!
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-03 15:22
我的读写有一次可以正常工作了,就说明软件原因的可能是不是比较低?

另外,关于您的板子插上仿真头之后,变成低电平是什么引脚?其他的引脚是什么状态?
如果方便可以给我写信:rongfeel@163.com
我的msn:rongfeel@msn.com
我们可以共同交流!
后进而勃发
xcyzdd
驱动牛犊
驱动牛犊
  • 注册日期2004-09-18
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-03 16:39
那你用其他命令试试啊,比如F3h,设置时钟频率
Genius is nothing but labor and diligence!
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-06 09:27
不好意思!
今天才上网!

我已经用0XF3设置过了,频率正确!
后进而勃发
xcyzdd
驱动牛犊
驱动牛犊
  • 注册日期2004-09-18
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-06 10:54
我根你的情况一样,chipid读正确一次后,再也读不对了
我哭,呜呜呜呜呜呜
这么难的东西,为什么也要我一个女生做?!
Genius is nothing but labor and diligence!
xcyzdd
驱动牛犊
驱动牛犊
  • 注册日期2004-09-18
  • 最后登录2005-09-23
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-06 11:05
我发现我的问题了,是因为我读的时间不一样,我的程序是这样的:
        D12_ReadChipID(); /*D12初始化************/
        D12_ReadInterruptRegister();
        D12_ReadCurrentFrameNumber();
        D12_ReadEndpointStatus(4);
        D12_ReadEndpointStatus(5);
        D12_ReadLastTransactionStatus(0);
        D12_ReadLastTransactionStatus(1);
        D12_ReadLastTransactionStatus(2);
        D12_ReadLastTransactionStatus(3);
因为我第二次运行的时候,是运行到第三条语句才去D12_ReadChipID()函数里面看读出的值,但是这些函数内部变量都是用i,j,执行到下面语句时,D12_ReadChipID()里面的i,j已经被冲掉了

你的是不是范了我的错呢?
Genius is nothing but labor and diligence!
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-06 11:48
我查了几天,我的代码和读写时序都是符合要求的,
而且我读CHIP ID 并不是都是错,有一次读正确过。所以....郁闷呀!
那次读正确的情况是这样的:我当时用示波器查看D12的片选引脚和读引脚的电平状况,无意中读就正确了。(我的读测试是通过循环读CHIP ID进行测试的)。

以下是本段程序:中间没有延时。

while(1)   //11-30 test the rd_n clk
{
    outportb(D12_COMMAND,0xFD);
    chipID = inportb(D12_DATA);
    chipID += (inportb(D12_DATA) << 8);  
    printf("Get the USB D12 chip ID is : 0x%x \r\n",first);
    //0x1012
}
后进而勃发
chenlingyan
驱动牛犊
驱动牛犊
  • 注册日期2004-11-17
  • 最后登录2005-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-08 17:35
刚开始我也是这样的,不过后边就好了。你可以连续读两次,看看有没有什么规律,我的情况是,发现读出来跟前一次有些错位,确认是时序的问题。不知道你的是不是时序问题,可以改变时钟频率试试看。
XR_WDM
驱动小牛
驱动小牛
  • 注册日期2002-06-28
  • 最后登录2013-03-01
  • 粉丝1
  • 关注0
  • 积分15分
  • 威望67点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-09 15:43
我的目前读写都正常了,现在遇到了枚举的问题!
能否交流一下!
非常感谢回复!
后进而勃发
游客

返回顶部