阅读:2074回复:6
求助,不能读取eeprom,大家帮帮手
具体的情况是:计算机认出9050,而且应用windriver能够完成硬件的安装,但是不认eeprom的数据,eeprom没有起作用(插上和去掉eeprom所有9050寄存器都是默认值),eeprom的型号是93c46(atm公司),
[编辑 - 2/14/03 by czhyf] |
|
沙发#
发布于:2003-02-16 15:33
你是怎么读的?
|
|
板凳#
发布于:2003-02-16 21:03
eeprom的型号是93c46(atm公司) 我知道PCI9054的DataBook里,PLX有明确说明,不能用93C56,而要用支持连续读的93CS56!如果我没有猜 错,可能是你的SerialEEPROM的问题,换成93CS46就可以了,是“CS“而不是“C” |
|
地板#
发布于:2003-02-17 16:21
你这个问题我遇到过,肯定是你的eeprom的EEDO脚上拉了。这样的话9052不管你的eeprom如何配置,都调用默认的配置。其实你的93C46是不能用的,只是因为你的EEDO脚上拉了,所以掩盖了真相。不信你用示波器看一下,你的eeprom的时钟输入端肯定不是1MHz的。如果我没有记错的话,可能是1KHz吧。
你将上拉断开再试一下,如果真是我说的那样子,要记的给分呀,这可是我曾经花了好几天才解决的。 |
|
地下室#
发布于:2003-02-20 11:11
问题解决,换了eeprom为st93c46w,能够顺序读,多谢大家!!
|
|
5楼#
发布于:2004-05-05 18:16
我在调试936的读写程序。可是do脚始终是高电平,
怎么办啊? 请教各位大侠!!!谢谢!! |
|
6楼#
发布于:2004-05-24 12:28
请教:93c46的do脚怎么总是高电平啊?? 程序如下
//ICC-AVR application builder : 2004-4-21 20:26:09 // Target : 8515 // Crystal: 8.0000Mhz #include <io8515v.h> #include <macros.h> #include \"9346.h\" void sturt(void); void delay_us(uint time); //sbit CS=P1^0; void port_init(void) { //0入 DDRA = 0x00; DDRB = 0xFF; DDRC = 0xFF; } //call this routine to initialise all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x00; SEI(); //re-enable interrupts //all peripherals are now initialised } void delay_us(uint time) { do time--; while(time>1); //1us } void Ewen(void)//允许写指令 { uchar i,a,InData; cs0; delay_us(20); sk0; delay_us(20); cs1;delay_us(20); InData=0x98; // 10011XXXX for(i=0;i<10;i++) { a=InData&0x80; // 10 if(a==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); InData<<=1; } cs0;delay_us(20); } void Ewds(void) //禁止写指令 { uchar i,InData; cs0;delay_us(20); sk0; delay_us(20); cs1;delay_us(20); InData=0x80; // 10000XXXX for(i=0;i<10;i++) { // 10 if((InData&0x80)==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); InData<<=1; } cs0; delay_us(20); } void Read(uchar address1) { uchar i,d; uint result=0x0000; Ewen(); sk0;delay_us(20); DIB1;delay_us(20); cs0; delay_us(20); cs1;delay_us(20); sk1;delay_us(20); sk0;delay_us(20); address1=address1&0x3f|0x80;// 110 A5-A0 for(i=0;i<8;i++) { // 8 if((address1&0x80)==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); address1<<=1; } DDRA = 0xff; DOA7=0x80;delay_us(20); for(i=0;i<16;i++) { // 16 sk1;delay_us(20); result=(result<<1)|DOA7; sk0;delay_us(20); } cs0; Ewds(); buffer[0]=result; } void Write(uchar address,uint InData) { uchar i; uint a; Ewen(); sk0; delay_us(20); cs0;delay_us(20); cs1;delay_us(20); DIB1;delay_us(20); // 101 A5-A0 sk1;delay_us(20); sk0; delay_us(20); address=address&0x3f|0x40; for(i=0;i<8;i++) { // 8 if((address&0x80)==0x80) { DIB1;} else {DIB0;} sk1; delay_us(20); sk0; delay_us(20); address<<=1; } for(i=0;i<16;i++) { // 16 if((InData&0x8000)==0x8000) { DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1; delay_us(20); sk0;delay_us(20); InData<<=1; } cs0;delay_us(20); DDRA=0xff; DOA7=0x80;delay_us(20); cs1;delay_us(20); sk1;delay_us(20); DDRA=0x00; while((a=(DOA7&0x80))==0) { // busy test delay_us(20); sk0; delay_us(20); sk1;delay_us(20); } sk0;delay_us(20); cs0;delay_us(20); Ewds(); } void main() { uint i; uchar add=0x02; init_devices(); Write(add,0x2003); Read(add); while(1); } ////////上面是我用的AVR C语言的程序 请大家帮忙啊, do脚一直是高电平。 读不回来数!! 谢谢指教!!! |
|