首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

wince上调试I2C总线驱动有关问题

2012-12-14 
wince下调试I2C总线驱动问题求助!我在调试一个I2C驱动,用IO口模拟的I2C总线,目前ADS调试裸机通过,但是加载

wince下调试I2C总线驱动问题求助!
我在调试一个I2C驱动,用IO口模拟的I2C总线,目前ADS调试裸机通过,但是加载到系统里面,总线时序就不对了,总收不到从设备发出的应答信号,即使我发送设备地址也不到应答。请问高手帮帮忙呀!我调试快两周了,没搞定呀!
下面是我的写字节函数,延时已经使用了精确延时,目前是20us(因为在ADS下调试通过),1us-60us延时都试过。


//---------------------------------------------- 
unsigned char I2c_WriteByte(unsigned char value) 
//---------------------------------------------- 
// writes a byte on the Sensibus and checks the acknowledge  
{  
interror=0, i1=0, i2=0;
//unsigned char ub;

for(i2 = 0; i2 < 8; i2++ )
{// setup data onto SDA
if(value & 0x80){
SDA_Set;//SetSDA( 1 );
}
else{
SDA_Clear;//SetSDA( 0 );
}
Delay_us(1);//I2C timing: data setup time > 200ns

// issue a clock
SCL_Set;//SetSCL( 1 );
Delay_us(1);//I2C timing: SCL high time > 0.6us
SCL_Clear;//SetSCL( 0 );
Delay_us(2);//I2C timing: SCL low time > 1.3us
value= value<< 1;
}
//check ACK(Low state) from I2C device 
SDA_OutDisable;//set SDA as input
 
Delay_us(1);//I2C timing: data(from I2C device) setup time > 200ns
SCL_Set;//SetSCL( 1 );// issue a clock
Delay_us(1);//I2C timing: SCL high time > 0.6us
if(s2440IOP->rGPFDAT>>1)//read ACK_BIT issued from I2C device
{
// NO ACK, so setup STOP condition
SCL_Set;//SetSCL( 1 );
Delay_us(1);//I2C timing: stop setup timing > 0.6us
SDA_Set;//SetSDA( 1 ); SDA is in input status!
return -(i1+1);// no acknowledgement -> failed
}
SCL_Clear;//SetSCL( 0 );
Delay_us(2);//I2C timing: SCL low time > 1.3us
//check ACK passed, config SDA as output for further outputing
SDA_OutEnable;
SDA_Set;
return 0;;
 

[最优解释]
提高驱动线程优先级。或关闭掉其他驱动试。
[其他解释]
只有自己根据数据手册对I2C的时序了,多看几遍直到你看懂了就知道怎么去调了,我也是这样过来的
[其他解释]
该回复于2012-07-16 10:59:30被版主删除
[其他解释]
看一下你的硬件是否有问题,有加上啦了吗?你若要读入SDA数据线,你的IO口要设为输入,这时外面最好要上啦,否则设备驱动能力不足,是读不到ACK的。
[其他解释]
上拉已经加了,读数据时也设置为input,硬件应该没有问题,ADS裸机跑程序是正常的。
[其他解释]
即使我发送设备地址也不到应答????
看起来像是地址冲突,建议楼主查查是否有I2C设备地址重复了。

热点排行