hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1864回复:14

D12的EOT引脚到底该怎样接?

楼主#
更多 发布于:2004-03-17 11:20
D12的EOT引脚到底该怎样接呢?
我现在做用S3C44B0X来控制D12来进行数据传输,可发现硬件连接好后,只要一插上USB电缆,D12的AN中断引脚就一直保持低电平(自供电),而且对D12进行读写操作都无效(仔细校对过读写时序),问周立功的技术人员,他们说可能是EOT引脚没链接对。一个说接高(NO DMA),一个说通过一个电阻接到USB总线上的+5V上(自供电),可我都过了,还是不能对D12进行读写操作(硬件链接无误)
下面是链接图!请高手指教!!!
hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-17 11:22
电路图
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-03-17 11:37
通过电阻接高就可以了
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
yuchixiao
驱动牛犊
驱动牛犊
  • 注册日期2003-12-09
  • 最后登录2007-01-22
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-17 12:46
DMACK通过电阻接高
我是一条鱼
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-17 13:31

EOT是双功能脚。
除了用于DMA功能外,还用于Vbus检测。
无论你是否自供电,Vbus检测功能是要的。
实现Vbus检测的方法很简单:EOT上接两个电阻:一个接地,一个接Vbus(对于自供电系统不是VCC)。接地电阻要比接Vbus的电阻大10倍。可以分别为20k和200k.

另外,DMAACK也要借高的。

你应该会恰当使用A0和CS吧!如果还有问题,可以把接口代码传上来。

首先一定要保证D12不是坏片呦!很多人会犯愚昧的错误的:)
A strong man can save himself. A great man can save another.
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-03-17 14:38
一般不用DMA时候,那几个引脚,不用就行了
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-03-17 14:55

EOT是双功能脚。
除了用于DMA功能外,还用于Vbus检测。
无论你是否自供电,Vbus检测功能是要的。
实现Vbus检测的方法很简单:EOT上接两个电阻:一个接地,一个接Vbus(对于自供电系统不是VCC)。接地电阻要比接Vbus的电阻大10倍。可以分别为20k和200k.

另外,DMAACK也要借高的。

你应该会恰当使用A0和CS吧!如果还有问题,可以把接口代码传上来。

首先一定要保证D12不是坏片呦!很多人会犯愚昧的错误的:)


/*
****************************************************************************************************
*                                              
*            PHILIPS PDUSBD12 DRIVERS FOR NUCLEUS                              
*                                                                                                  
*                               (c) Copyright 2003-2015, Zhang Zhi-gang                            
*                                           All Rights Reserved                                    
*                                                                                                  
*                                   PDUSBD12 DRIVERS Program for 1.0                                
*
* File  Name : USB_D12_PHY.C
* By    Write : Zhang Zhi-gang ( Barry Zhang )
* First Write : 2004-02-24 10:14
* Last  Write : 2004-02-24 10:14
* where Write : Room B201 Shenzhen International Tech-innovation Academy, Kejinan 10 Road,
*   High-Tech Industrial Park,Shenzhen,China.
* Function : S3C44B0X与PDIUSBD12的接口
* 1. GPC15为D12挂起控制引脚 1:挂起; 0:正常
* 2. GPC14为D12的A0控制引脚 A0=1:命令; A0=0:数据
* 3. 片选为S3C44B0X的CS3---0x06000000
****************************************************************************************************
*/

#include "USB_D12_DEFS.H"
#include "USB_D12_EXTR.H"
#include "nucleus.h"
#include "S3C44B0X.h"

extern EPPFLAGS bEPPflags;
extern CONTROL_XFER ControlData;

/*
****************************************************************************************************
* 设置GPC15为USB挂起控制引脚
* 功 能:设置GPC15为USB挂起控制引脚
****************************************************************************************************
*/
void SET_GPC15_2_SUSPEND_Signal(void)
{
UINT32 REG_Val;

REG_Val  = rPCONC;
REG_Val &= 0x3FFFFFFF;
REG_Val |= 0x40000000;
rPCONC   = REG_Val;

rPDATC   = 0x0000; //置低,使D12有效
}

/*
****************************************************************************************************
*  挂起USB
* 功 能:挂起USB(SUSPEND_Signal = 1)
****************************************************************************************************
*/
void SUSPEND_USB(void)
{
rPDATC   = 0x8000; //Bit15 = 1
}

/*
****************************************************************************************************
*  唤醒USB
* 功 能:唤醒USB(SUSPEND_Signal = 0)
****************************************************************************************************
*/

void Awake_USB(void)
{
rPDATC = 0x0000; //Bit15 = 0
}

/*
****************************************************************************************************
*  判断USB设备是否为挂器状态
* 功 能:判断USB设备是否为挂器状态
****************************************************************************************************
*/
unsigned int USB_Is_Suspend( void )
{
UINT32 REG_Val;
unsigned int   Status;

REG_Val  = rPCONC; //设置GPC15为输入引脚
REG_Val &= 0x3FFFFFFF;
rPCONC   = REG_Val;

REG_Val  = rPDATC; //读取GPC15引脚的状态
Status   = REG_Val&0x8000;

REG_Val  = rPCONC; //恢复GPC15为输出引脚
REG_Val &= 0x3FFFFFFF;
REG_Val |= 0x40000000;
rPCONC   = REG_Val;

return Status;
}

/*
****************************************************************************************************
* 设置GPC14为I/O
* 描 述:设置GPC14为I/O,用于控制D12的A0,选择命令或是数据
****************************************************************************************************
*/
void Set_GPC14_2_D12A0( void )
{
UINT32 REG_Value;

REG_Value  = rPCONC;
REG_Value &= 0xCFFFFFFF; //清零BIT28/29
REG_Value |= 0x5FFFFFFF; //设置BIT28/29
rPCONC     = REG_Value; //写寄存器,设置GPC14为I/O

rPDATC     = 0x0000; //设置为0,数据
}

/*
****************************************************************************************************
* 输入命令指令
* 描 述:对PDIUSBD12输入命令指令,设置它
****************************************************************************************************
*/
void INPUT_Command( unsigned char Data )
{
rPDATC = 0x4000; //设置I/O为1,命令
*((UINT32 *) D12_Addr) = Data;
//DelayX1ms( 1 );
}

/*
****************************************************************************************************
* 输入数据
* 描 述:对PDIUSBD12输入数据
****************************************************************************************************
*/
void INPUT_Data( unsigned char Data )
{
rPDATC = 0x0000; //设置I/O为0,数据
*((UINT32 *) D12_Addr) = Data;
}

/*
****************************************************************************************************
* 读出数据
* 描 述:从PDIUSBD12读出数据
****************************************************************************************************
*/
unsigned char Read_Data( void )
{
unsigned char Data;

rPDATC = 0x0000; //设置I/O为0,数据
Data   = *((UINT32 *) D12_Addr);
//DelayX1ms( 1 );
return Data;
}

/*
****************************************************************************************************
* 开USB中断(INT2)
* 描 述:PDIUSBD12---占用INT2,开中断(INT2)
****************************************************************************************************
*/

void USB_Int_Enable( void )
{
UINT32 INT_REG_VAL;

INT_REG_VAL  = rINTMSK; //读取中断屏蔽寄存器(INTMSK)中内容
INT_REG_VAL &= USB_INT_ENABLE_VALUE;
rINTMSK = INT_REG_VAL;
}


/*
****************************************************************************************************
* 关USB中断(INT2)
* 描 述:PDIUSBD12---占用INT2,开中断(INT2)
****************************************************************************************************
*/

void USB_Int_Disable( void )
{
UINT32 INT_REG_VAL;

INT_REG_VAL  = rINTMSK; //读取中断屏蔽寄存器(INTMSK)中内容
INT_REG_VAL |= USB_INT_DISABLE_VALUE;
rINTMSK = INT_REG_VAL;
}


/*
****************************************************************************************************
*  初始化EINT2
* 功 能:初始化EINT2
****************************************************************************************************
*/

void Init_USB_INT( void )
{
unsigned int REG_VAL;

REG_VAL  = rPCONG; //读控制寄存器
REG_VAL |= 0x0030; //设置对应位
rPCONG   = REG_VAL; //写寄存器

rINTMSK  = 0x37FFFFF; //使能EINT2
}


这是接口部分代码,
GPC15为D12挂起控制引脚 1:挂起; 0:正常
GPC14为D12的A0控制引脚 A0=1:命令;A0=0:数据
片选为S3C44B0X的CS3---0x06000000

DMAACK是连一4.7K接高的,
yyouking
驱动老牛
驱动老牛
  • 注册日期2003-12-18
  • 最后登录2020-04-28
  • 粉丝0
  • 关注0
  • 积分967分
  • 威望114点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-03-17 15:00
那就那样做啊
提供: AT89S52+D12开发套件 W78E54+Sl811HST单片机读写U盘套件 PL2303HX-串口转USB 网站http://www.devking.cn 联系 sl811hs@yahoo.com.cn QQ:14441292
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-17 15:15
指针D12_Addr的定义是怎样的?
为何在void INPUT_Command( unsigned char Data )
等函数中没有设置A0的代码,也没有片选的代码?
A strong man can save himself. A great man can save another.
hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-17 15:24
指针D12_Addr的定义是怎样的?
为何在void INPUT_Command( unsigned char Data )
等函数中没有设置A0的代码,也没有片选的代码?



D12_Addr的定义是Ox06000000
//D12的地址定义---S3C44B0X的CS3
#define D12_Addr 0x06000000    //片选CS3

片选用的是S3C44B0X的片选3(CS3),这不需要代码的,当你寻址在0x06000000地址时,片选时自动有效的!

****************************************************************************************************
* 设置GPC14为I/O
* 描 述:设置GPC14为I/O,用于控制D12的A0,选择命令或是数据
****************************************************************************************************
*/
void Set_GPC14_2_D12A0( void )
{
UINT32 REG_Value;

REG_Value = rPCONC;
REG_Value &= 0xCFFFFFFF; //清零BIT28/29
REG_Value |= 0x5FFFFFFF; //设置BIT28/29
rPCONC = REG_Value; //写寄存器,设置GPC14为I/O

rPDATC = 0x0000; //设置为0,数据
}

/*
****************************************************************************************************
* 输入命令指令
* 描 述:对PDIUSBD12输入命令指令,设置它
****************************************************************************************************
*/
void INPUT_Command( unsigned char Data )
{
rPDATC = 0x4000; //设置I/O为1,命令
*((UINT32 *) D12_Addr) = Data;
//DelayX1ms( 1 );
}

/*
****************************************************************************************************
* 输入数据
* 描 述:对PDIUSBD12输入数据
****************************************************************************************************
*/
void INPUT_Data( unsigned char Data )
{
rPDATC = 0x0000; //设置I/O为0,数据
*((UINT32 *) D12_Addr) = Data;
}

这就是AO的设置代码啊,
void Set_GPC14_2_D12A0( void )
设置GPC14为I/O,用于控制D12的A0,选择命令或是数据

void INPUT_Command( unsigned char Data )中的
rPDATC = 0x4000; //设置I/O为1,命令
就是AO置1

void INPUT_Data( unsigned char Data )中的
rPDATC = 0x0000; //设置I/O为0,数据
就是AO置0



hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-03-17 15:30
D12芯片应该是好的,时钟信号正常CLKOUT输出也正常
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-03-17 15:38
你的MCU我没用过,不过经过你的解释我已经懂了。
那为什么你的图上面A0接Addr0呢?这和你的代码不符呀?
A strong man can save himself. A great man can save another.
hustd6zzg
驱动牛犊
驱动牛犊
  • 注册日期2003-03-22
  • 最后登录2005-01-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-03-17 15:42
我用WORD划的图,写错了,Sorry!!!
你有MSN吗?我想和你交流交流!!!

MSN: hustd6zzg@hotmail.com
在深圳科技园
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-03-17 15:49
你的MSN脱机呀?
A strong man can save himself. A great man can save another.
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-03-17 16:31
如果你有双踪示波器或逻辑分析仪的话,可以跟踪看你对D12进行操作时候的时序。

另:我回忆起了数年前的一个现象:我手工焊接的板子,D12出现了故障:片选无法正常拉低!
当时的做法是将之对地下拉500欧姆!
如果你的板子不复杂,可以将D12的片选接地试一试。

当时的原因是焊接过程可能损坏了片内的上拉三极管之类的东西。
A strong man can save himself. A great man can save another.
游客

返回顶部