firecore
驱动牛犊
驱动牛犊
  • 注册日期2003-08-14
  • 最后登录2004-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1563回复:6

关于D12中的 D12_ReadChipID 函数问题

楼主#
更多 发布于:2003-08-15 15:52
在周立功的51单片机开发USB的程序中,我看到这样一个函数,D12_ReadChipID, 不甚理解,请各位指教

unsigned short D12_ReadChipID(void)
{
unsigned short i,j;

if(bEPPflags.bits.in_isr == 0)
DISABLE;

outportb(D12_COMMAND, 0xFD);
i=inportb(D12_DATA);
j=inportb(D12_DATA);
i += (j<<8);

if(bEPPflags.bits.in_isr == 0)
ENABLE;

return i;
}

此函数是要得到chipid, 但我查阅了几遍d12 的数据手册,也没有找到0xfd 这个命令码,难道是隐含的代码,还是我的手册不全???
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-16 18:47
那是一个寄存器,里面存的是该芯片的版本信息和产品信息,是只读的,值是固定的,一般通过读这个id来检测芯片是否是好的,或者地址数据以及片选等是否都是正常的
firecore
驱动牛犊
驱动牛犊
  • 注册日期2003-08-14
  • 最后登录2004-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-18 10:11
正如你说的,这个基本函数可以用来检测本地cpu和d12之间的数据通路。那么,读出的device id 应该是多少呢 ?

另外,你说0xfd 是一个寄存器,为何d12的datasheet 中找不到有关此寄存器的描述。

请赐教!!
didar
驱动牛犊
驱动牛犊
  • 注册日期2003-05-29
  • 最后登录2003-09-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-18 10:55
datasheet里面是没有的
读出来的应该是 12 10
firecore
驱动牛犊
驱动牛犊
  • 注册日期2003-08-14
  • 最后登录2004-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-18 23:19
12 10
这个数是对于d12 这类芯片的唯一标识,还是每颗d12 均有一个特定的标号?
请问什么资料中可以找到关于此问题的说明,请明示,先行谢过。
didar
驱动牛犊
驱动牛犊
  • 注册日期2003-05-29
  • 最后登录2003-09-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-19 11:29
唯一的
不过我有的时候会读出来00 00

一开始我程序有问题的时候时读不出来的
读出来的话只是告诉你你的硬件读写d12没有太大的问题
firecore
驱动牛犊
驱动牛犊
  • 注册日期2003-08-14
  • 最后登录2004-03-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-08-19 12:39
如果有时读出是12 10,有时读出00 00, 那如何来保证硬件读写是正确的呢?
游客

返回顶部