tag 标签: eeprom

相关帖子
相关博文
  • 热度 26
    2018-1-25 10:57
    2611 次阅读|
    0 个评论
    【小梅哥FPGA】CYUSB3014芯片使用EEPROM无法下载固件说明
    当使用128KB的EEPROM存储CYUSB3014芯片的固件时,需要注意,不同厂家的EEPROM存储器,其A0、A1、A2功能不一样,在设计时电路也不一样。Microchip对应的128KB的EEPROM存储器芯片型号为24LC1025。Atmel的128KB的EEPROM存储器型号为24C1024。 例如, Microchip EEPROM 将引脚 A1 和 A0 用于芯片 选择 , 并不使用引脚 A2 。但 Atmel EEPROM 会将引脚 A2 和 A1 用于芯片 选择 , 不使用引脚 A0。因此针对不同的厂家的器件,EEPROM存储器的A0、A1、A2三个引脚设置也应该不同具体如下所示:
  • 热度 13
    2013-1-24 17:25
    1558 次阅读|
    1 个评论
    参加一个小项目,负责编写其中的从模块的部分代码。最后测试发现模块地址写入有问题。   后来的解决方法是,设置一个用来指示地址是否修改过的标志。在每个模块的单片机的EEPROM中开辟两个字节(两个字节是为了消除偶然性),用来存储此标志(0x55、0xaa)。模块烧入代码后第一次先向EEPROM中存放模块地址的字节写入0x00,以后如果修改了地址且所改地址不为0x00,就将0x55和0xaa写入标志位。这样每次模块上电后先判断标志位是否0x55和0xaa在进行其他操作,这就保证了模块第一次上电后地址为0x00,修改成其他地址后可以保存且掉电后重新上电后地址也不会再次回到0x00。  
  • 热度 22
    2012-12-6 09:51
    5120 次阅读|
    0 个评论
    读写EEPROM时,STM32有中断产生可能会引起i2C死锁,然后为SCL为高,SDA一直为低,从新给EEPROM芯片上电又正常,或者直接把SDA拉高也恢复正常,查阅资料得知是EEPROM芯片把IIC总线拉死了。 网上有人是这么分析的,在正常情况下,I2C总线协议能够保证总线正常的读写操作。但是,当I2C主设备异常复位时(看门狗动作,板上电源异常导致复位芯片动作,手动按钮复位等等)有可能导致I2C总线死锁产生。总线死锁产生的原因是在I2C主设备进行读写操作的过程中.主设备在开始信号后控制SCL产生8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续I2C的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。 而对于I2C主设备来说.复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL和SDA信号变为高电 平。这样,I2C主设备等待从设备释放SDA信号,而同时I2C从设备又在等待主设备将SCL信号拉低以释放应答信号,两者相互等待,I2C总线进人一种 死锁状态。同样,当I2C进行读操作,I2C从设备应答后输出数据,如果在这个时刻I2C主设备异常复位而此时I2C从设备输出的数据位正好为0,也会导 致I2C总线进入死锁状态。 从上面的分析看,那么只要在读取的时候先将IIC总线复位一下应该能解决问题,搞了半个多月, 以前一直是在想怎么样让它能正确的读写数据,现在可以试着从出了问题怎么去解决它这个角度出发看是否可行。 现在程序的读写的开始先发送I2C Stop条件,让设备释放总线,再进行读写,经过几天的测试能正确的读写到据。具体实现如下:   //读数据 u8 I2C_EE_ReadByte(u8 xChip, u16 xAddr, u8 *xpErr) { u8 dat;  u8 errcnt; u32 tmr;   //发送I2C_Stop条件也能让从设备释放总线 //if(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) { I2C_Cmd(I2C1, DISABLE); I2C_SDA_SCL_GPIO_MODE(GPIO_Speed_2MHz,GPIO_Mode_Out_OD,GPIO_Mode_Out_OD); GPIO_ResetBits(SDA_port,SDA_pin);    //sda=0; GPIO_SetBits(SCL_port,SCL_pin);      //scl=1; GPIO_SetBits(SDA_port,SDA_pin);      //sda=1; I2C_SDA_SCL_GPIO_MODE(GPIO_Speed_10MHz,GPIO_Mode_AF_OD,GPIO_Mode_AF_OD); I2C_Cmd(I2C1, ENABLE);                                            }   errcnt = 0;   tmr = ulTimeOut_Time; while((tmr--)(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY))); if(tmr ==0) errcnt++; I2C_GenerateSTART(I2C1, ENABLE);                                                     // 发送I2C的START信号,接口自动从从设备编程主设备 tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)));               // 检查I2C的EV5状态并清除 if(tmr ==0) errcnt++;  I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Transmitter);                         // 发送从地址(EEPROM设备地址)和写命令 tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))); // 检查I2C的EV6状态并清除 if(tmr ==0) errcnt++;  I2C_SendData(I2C1, (u8)((xAddr 8)0x00ff));                                        // 发送 EEPROM 的存储空间地址(高字节) tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)));          // 检查I2C的EV8状态并清除 if(tmr ==0) errcnt++;  I2C_SendData(I2C1, (u8)(xAddr0x00ff));                                              // 发送 EEPROM 的存储空间地址(低字节) tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)));         // 检查I2C的EV8状态并清除 if(tmr ==0) errcnt++;  I2C_GenerateSTART(I2C1, ENABLE);                                                     // 发送I2C的START信号,接口自动从从设备编程主设备 tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)));               // 检查I2C的EV5状态并清除 if(tmr ==0) errcnt++;  I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Receiver);                            // 发送从地址(EEPROM设备地址)和读命令 tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)));    // 检查I2C的EV6状态并清除 if(tmr ==0) errcnt++;  tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)));              // 检查I2C的EV7状态并清除 if(tmr ==0) errcnt++;  *xpErr = errcnt; dat = I2C_ReceiveData(I2C1);                                                         // 接收数据    I2C_GenerateSTOP(I2C1, ENABLE);                                                      // 发送I2C的STOP信号,接口自动从主设备编程从设备 I2C_Cmd(I2C1, DISABLE);                                                              // 失能总线 return(dat); }   //写数据 u8 I2C_EE_WriteByte(u8 xChip, u16 xAddr, u8 xDat) { u32 tmr; u8 errcnt;   //发送I2C_Stop条件也能让从设备释放总线 //if(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY)) { I2C_Cmd(I2C1, DISABLE); I2C_SDA_SCL_GPIO_MODE(GPIO_Speed_2MHz,GPIO_Mode_Out_OD,GPIO_Mode_Out_OD); GPIO_ResetBits(SDA_port,SDA_pin);    //sda=0; GPIO_SetBits(SCL_port,SCL_pin);      //scl=1; GPIO_SetBits(SDA_port,SDA_pin);      //sda=1; I2C_SDA_SCL_GPIO_MODE(GPIO_Speed_10MHz,GPIO_Mode_AF_OD,GPIO_Mode_AF_OD); I2C_Cmd(I2C1, ENABLE);                                                         }   errcnt = 0; tmr = ulTimeOut_Time; while((tmr--)(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY))); if(tmr ==0) errcnt++; I2C_GenerateSTART(I2C1, ENABLE);                                                     // 发送I2C的START信号,接口自动从从设备编程主设备 tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)));               // 检查I2C的EV5状态并清除 if(tmr ==0) errcnt++;  I2C_Send7bitAddress(I2C1, xChip, I2C_Direction_Transmitter);                         // 发送从地址(EEPROM设备地址) tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))); // 检查I2C的EV6状态并清除 if(tmr ==0) errcnt++;  I2C_SendData(I2C1, (u8)((xAddr 8)0x00ff));                                        // 发送 EEPROM 的存储空间地址(高字节) tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)));          // 检查I2C的EV8状态并清除 if(tmr ==0) errcnt++;  I2C_SendData(I2C1, (u8)(xAddr0x00ff));                                              // 发送 EEPROM 的存储空间地址(低字节) tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)));          // 检查I2C的EV8状态并清除 if(tmr ==0) errcnt++;  I2C_SendData(I2C1, xDat);                                                            // 发送数据  tmr = ulTimeOut_Time; while((tmr--)(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)));          // 检查I2C的EV8状态并清除 if(tmr ==0) errcnt++;    I2C_GenerateSTOP(I2C1, ENABLE);                                                      // 发送I2C的STOP信号,接口自动从主设备编程从设备 I2C_Cmd(I2C1, DISABLE);                                                            tmr = ulTimeOut_Time;                                                             while(tmr--); return(errcnt);  }       交流QQ群:74204669
  • 热度 22
    2012-4-23 11:09
    2633 次阅读|
    0 个评论
        将cy3684开发包中的hid_kb.iic下载到EEPROM 24lc128后,复位开发板后,控制面板EZ-USB interface不能再识别开发板。但是PC机仍然能识别板子,并且在设备管理器键盘下可看到“HID Keyboard Device”,按轻触开关f1,f2,f3,f4都能对电脑进行操作。如果想重新对EEPROM 24lc128进行操作,或者想重新往这片EEPROM中下程序,则需要以下操作: 1.禁止EEPROM状态下,把开发板连接到PC机上,此时,在设备管理器中可看到字符串“Cypress EZ-USB FX2LP – EEPROM missing”。 2.不断电的情况下,硬件使能24lc128。 3.用控制面板EZ-USB interface将C:\Cypress\USB\Examples\FX2LP\Vend_ax目录下的Vendax.hex file文件下载到板子中。 4.在Vend Req工具条上对应的位置输入以下值: Req = 0xA9 Value = 0x0000 Index = 0xbeef Length = 1 Dir = 0 OUT Hex Bytes = 00     这一步可以认为是擦除EEPROM中的程序。之后重启开发板,在设备管理器中可以看到字符串“Cypress EZ-USB FX2LP– EEPROM missing”,此时可以通过控制面板EZ-USB interface对EEPROM进行重新操作。  
  • 热度 18
    2012-3-26 22:29
    1993 次阅读|
    0 个评论
    烧录small eeprom时具体方法步骤: 拔掉USB 断掉EEPROM SW1选择small EEPROM 连接USB 设备管理器下显示“……eeprom missing” 硬件使能EEPROM 打开EZ-USB Interface,确保USB设备选择正确 点击“Download”按钮,并选择下载“Vend_Ax.hex”文件 控制面板“Vend Req”工具条输入一些内容: Req = 0xA2 Value = 0x0000 Index = 0xbeef Length = 16 Dir = 1 IN 选择“Vend Req”按钮,检查显示区域显示的16比特数据是否是CD CD……。如果是,则不能读EEPROM,如果不是,则继续下面的操作。 在控制面板“Vend Req”工具条输入一些内容: Req = 0xA2 Value = 0x0000 Index = 0xbeef Length = 1 Dir = 0 OUT Hex Bytes = 00 选择“Vend Req”按钮,将第一比特数据烧进EEPROM。 控制面板“Vend Req”工具条输入一些内容: Req = 0xA2 Value = 0x0000 Index = 0xbeef Length = 1 Dir = 1 IN 选择“Vend Req”按钮,检查显示区域显示的数据是否是0x00 拔掉USB 连接USB 因为EEPROM中的第一比特数仍是无效数据0x00,在设备管理器中仍可见“……EEPROM missing” “Vend Req”工具条上,输入以下内容 Req = 0xA2 Value = 0x0000 Index = 0xbeef Length = 8 Dir = 0 OUT 在Hex Bytes区域一次输入C0 VID(LSB) VID(MSB)  PID(LSB) PID(MSB) DID(LSB) DID(MSB)以及配置byte。 如果输入为C0 B4 04 82 00 00 00 00,则重新插上USB后,设备管理器中将显示“……default keil monitor”
相关资源