huyangtu
驱动牛犊
驱动牛犊
  • 注册日期2011-03-15
  • 最后登录2011-04-06
  • 粉丝1
  • 关注1
  • 积分6分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3525回复:1

1394链路层芯片TSB12LV32寄存器设置问题

楼主#
更多 发布于:2011-03-30 11:24
       我最近在做一个1394的工业相机,主要是通过1394将设备采集到的图像传送到电脑,在电脑里插有PCI的1394卡。在设备端采用的芯片是TSB12LV32和TSB41AB1。现在已能成功读取TSB12LV32寄存器的数据,也能写入数据。当我将设备与PC端用线缆连接起来时候,可以收到自标志包,以及一个从电脑发过来的4字节读请求包,这个请求包的有3个4字节,请求读偏移地址为FFFF F000 0400的内容,根据1394协议标准应该是请求读取配置ROM的内容,我根据标准组包发回后,发现没反应,电脑依然是不停地发送请求包,偏移地址依然为FFFF F000 0400。有以下为问题:
    
     1. TSB12LV32是否会自动发送8bit的确认包?每次接收到4字节读请求包,在48h的寄存器内容都为00030200,其中AckCode为00010,即表示Ack_pending状态,个人认为是没有发送确认包,所以导致PC端不停地重复发送读请求包。在控制寄存器(08h)中第19位FIFOACKCOMP的说明是说控制是否发送确认完成,但是我把它置位后依然没效果。
     前天我发了邮件去问TI的官方客服,邮件回复的很模糊,"Regarding  to your questions, when a packet is received the Link passes the packet up to the transaction layer via a Link data Indication. The link verifies the packet CRC. In response the Transaction Layer communicates the appropriate ACK code, which is sent by the Link.” 按照回复的意思确认码是需要事务层来控制的,但是没说具体该怎么控制,比如该给哪个寄存器写数据就可以发送确认包了。而在TSB12LV32的datasheet中数据包格式部分也没有确认包的相关内容,所以是一头雾水。
     更崩溃的是TI官方不对这个芯片提供技术支持,因为"TSB12LV32  is specified for the high-volume customers",当初选这个芯片就是因为看到很多硕士学位论文都是用这个芯片,我以为可行性和可参照性很高,现在回去仔细研究那些论文,发现都没写清楚该怎么操作芯片寄存器,而且真正做到可以像实际产品一样应用的很少,大部分都是像我一样做到可以从PC端接收到数据包。

     2. 我发送4字节读响应包给电脑后,在中断寄存器0Ch中的第18为FIFOACK置位,但是在FIFO 状态寄存器(30h)中的ATACK却是10000,即对当前发送的数据包没有收到确认包,这明显是矛盾的。

     已经在这个问题上调试了一个星期了,非常无奈。希望有高手能指导一下,特别是在TSB12LV32的初始化方面能给点指导。非常感谢!我的QQ:344659562。
huyangtu
驱动牛犊
驱动牛犊
  • 注册日期2011-03-15
  • 最后登录2011-04-06
  • 粉丝1
  • 关注1
  • 积分6分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-04-01 21:58
今天终于把ROM包成功发送到电脑上了,接下来要做的是驱动,又是一个大难题啊。
对于以上问题,我个人得出的结论是:
1. 确认包是链路层芯片自动发送的。至于在收到ACK_Pending状态,意思是已经正确收到请求包,响应包在稍后一段时间发送。所以TI官方的回复应该是错的。
2. 之前电脑一直反复发送请求F000 0400地址的内容,是因为我没有及时发送响应包的结果,如果及时回复响应包,电脑就会接着发送第二个地址的请求包(F000 0404),接着再继续,知道电脑识别新硬件。
3. 还有个人的一个经验是TSB12LV32其实还是挺慢的一个芯片,两次读写之间一定要间隔足够的时间,不然很容易造成micro_interface错误中断,我在每个读写函数头上都加了一个10us的延时。(我现在用的是握手模式,固定时序模式的应该不用)
游客

返回顶部