This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我们正在尝试在微控制器(TMS320F28035)和 EEPROM 24LC01BT-E/OT 之间建立通信。 但它会带来以下问题:
1) 1)数据通过 I2C 线路传输。 但是、当我们读回时、读取缓冲区是0x0000。
2) 2)我们无法调试数据是否已正确写入 EEPROM、并且问题出在只读函数。 与通过读取函数一样、我们只能知道 EEPROM 中写入的内容。
3)我们在控制套件(Example_2803xI2C_EEPROM)中尝试了示例代码 V130、这似乎起作用、但在此代码中、读写函数似乎同步为: 例如、如果我在其他位置写入数据、在其他位置读取数据、那么两个缓冲区中的数据也始终相同。
我们不需要基于中断的 I2C,因此我们编写了一段代码,提供了第1)和第2)点中提到的问题。
随函附上 SDA 和 SCLK 的代码和波形、请告诉我我们是否在按顺序或 code.e2e.ti.com/.../EEPROM_5F00_TEST_5F00_1.txt 中出现错误
是的、整个 EEPROM 在缓冲区中读取相同值的问题即将出现。
我将尝试在程序中使用 FIFO 和中断。
谢谢
您好!
感谢您的建议、导入示例的问题已解决。 我还有一个疑问:
我们的要求是1)从 CAN 获取值、将其写入 EEPROM 中的某些位置。
2) 2)从某些位置读取值。
3) 3)在代码中使用这些值。
当前代码出现的问题是调试后读取和写入代码、但我们需要在数据来自 CAN 后进行读取和写入。 如果可能、请为此建议解决方案。
您好,
您能否发布有关此主题的新查询,因为这是一个相互排斥的主题?
很容易让正确的人进入。
此致。
我们的目标是
1) 1) 1)输入 GUI 中的校准变量。
1) 1)从 GUI (通过 CAN)读取值、并将相同的值写入 EEPROM
2) 2)根据需要从 EEPROM 读取这些位置。
该过程中面临的问题包括:
1) 1) 我们在控制套件上找到了相同的示例。
集成了相同的状态机、但我们在执行测试时发现了一个问题、即当我们尝试读取/写入超过2个字节时、我们也无法读取。
我们将字节数设为2、将 I2C_Max_Buffer_size 设为6。 但在程序中、仍然缓冲区大小被视为4、请求为相同的解决方案提供建议。
2) 2) 我们希望将传递到写入缓冲区的数据设置为变量、因为它通过 CAN、我们需要在 EEPROM 中传递相同的值。
3) 3) 我们找到了一个应用手册:适用于高级应用的单相能量计解决方案、其中有一个 GUI、但下载后我们无法打开它。 可能缺少一些文件或需要一些预要求的软件。 我们也会请求帮助、因为我们将能够从同一个 GUI 中获得一些帮助。
以下是应用手册的链接:
http://www.ti.com/lit/ug/tidu386/tidu386.pdf
下载的文件是 slaa517e
尊敬的 Kevin:
我们尝试将 I2CCNT 更改为2以上、实际上我们也开发了一个新代码。 但直到读取的2个字节仍然正常、但超过2个字节会出现问题、例如数据不匹配
1) 1)请求告知我们是否要对写入/读取超过两个字节的数据进行任何检查、但增加 I2CCNT 寄存器除外。
2) 2)我们甚至尝试传递不同的位置并调用相同的函数两次、请求让我们知道在2个不同的位置进行读取/写入、而不提供上电复位。
谢谢
您好!
问题可能出在 I2CMDR 寄存器。 当写入/读取程序时、I2CMDR.STP 位被置位为1、当 I2C 模块的内部数据计数器(I2CCNT)计数到0时、这将导致器件产生一个停止条件。
将该位置位时、可以继续填充 TX/RX FIFO 缓冲区、发送更多字节而不会停止通信。
有关 I2C 外设的更多信息、请参阅 F2803x I2C 指南:
http://www.ti.com/lit/sprufz9
最棒的
Kevin
编辑:
您可能需要查看您正在使用的 EEPROM 的数据表、其中应提供如何正确从存储器读取连续字节的说明。
您好!
我们尝试将停止条件设置为0。
现在、当我们调用2个不同的函数时、我们能够读取和写入2个以上的字节、但接下来的问题是数据变得不匹配。
例如:如果我们在地址0x0056写入0x10,在0x0068写入0x20,则在0x0056写入0x20,在0068写入0x10。
随函附上读写函数
这两个函数都被调用2次,参数不同,希望在2个不同的位置写入。
unsigned char EEPROM_WRITE (uint16 t_data、uint16 t_add)
{
if (I2caRegs.I2CMDR.bit.STP=1)
{
返回0;
}
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = 4;
I2caRegs.I2CDXR = t_add>8;
I2caRegs.I2CDXR = t_add;
I2caRegs.I2CDXR = t_data>>8;
I2caRegs.I2CDXR = t_data;
I2caRegs.I2CMDR.ALL = 0x6E20;
W_FLAG = 1;
返回1;
}
无符号字符 EEPROM_READ_M (uint16 r_add)
{
if (I2caRegs.I2CMDR.bit.STP=1)
{
返回0;
}
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR = r_add>8;
I2caRegs.I2CDXR = r_add;
I2caRegs.I2CMDR.ALL = 0x2620;
DELAY_US (1000);
I2caRegs.I2CCNT = 2;
I2caRegs.I2CMDR.ALL = 0x2C20;
for (i=0;i<2;i++)
{
Z[i]=I2caRegs.I2CDRR;
// I2caRegs.I2CMDR.bit.STP=0;
DELAY_US (2000);
}
数据= I2caRegs.I2CDRR;
}
器件型号:TMS320F28035
您好!
我们的要求是1)从 CAN 获取值、将其写入 EEPROM 中的某些位置。
2) 2)从某些位置读取值。
3) 3)在代码中使用这些值。
我们尝试将停止条件设置为0。
现在、当我们调用2个不同的函数时、我们能够读取和写入2个以上的字节、但接下来的问题是数据变得不匹配。
例如:如果我们在地址0x0056写入0x10,在0x0068写入0x20,则在0x0056写入0x20,在0068写入0x10。
随函附上读写函数
这两个函数都被调用2次,参数不同,希望在2个不同的位置写入。
unsigned char EEPROM_WRITE (uint16 t_data、uint16 t_add)
{
if (I2caRegs.I2CMDR.bit.STP=1)
{
返回0;
}
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = 4;
I2caRegs.I2CDXR = t_add>8;
I2caRegs.I2CDXR = t_add;
I2caRegs.I2CDXR = t_data>>8;
I2caRegs.I2CDXR = t_data;
I2caRegs.I2CMDR.ALL = 0x6E20;
W_FLAG = 1;
返回1;
}
无符号字符 EEPROM_READ_M (uint16 r_add)
{
if (I2caRegs.I2CMDR.bit.STP=1)
{
返回0;
}
I2caRegs.I2CSAR = 0x50;
I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR = r_add>8;
I2caRegs.I2CDXR = r_add;
I2caRegs.I2CMDR.ALL = 0x2620;
DELAY_US (1000);
I2caRegs.I2CCNT = 2;
I2caRegs.I2CMDR.ALL = 0x2C20;
for (i=0;i<2;i++)
{
Z[i]=I2caRegs.I2CDRR;
// I2caRegs.I2CMDR.bit.STP=0;
DELAY_US (2000);
}
数据= I2caRegs.I2CDRR;
}