主题中讨论的其他器件:MOTORWARE
工具/软件:Code Composer Studio
你好
美好的一天!
我正在使用 F28027F、并尝试通过 I2C 接口将数据存储到 EEPROM (Atmel 24C04)中
C:\ti\motorware_1_01_00_16\sw\solutions\instaspin_foc\boards\hvkit_rev1p1\F28x\f2802xF\projects\ccs5\example_F2802xI2C_EEPROM_Example_2802xI2C_EEPROM.c
很高兴它运行得相当好,但我有一些问题。
- 我需要的是、将32位(浮点)数据存储到 EEPROM 中、这可以是这样的
|
地址 |
数据 |
|
0x0000 |
0x23 |
|
0x0001 |
0x54 |
|
0x0002 |
0x42 |
|
0x0003 |
0x26 |
|
0x0004 |
0x34 |
|
0x0005 |
0x76 |
|
0x0006 |
0x56 |
|
0x0007 |
0x45 |
如表中所示、0x0000 -0x0003属于一个32位浮点数据、而0x0004-0x0007属于另一个32位浮点数据、等等…
怎么做?
2.注意此代码。
#define I2C_SLAVE_ADDR 0x50 #define I2C_NUMBYTES 2 #define I2C_EEPROM_HIGH_ADDR 0x00 #define I2C_EEPROM_LOW_ADDR 0x30 //全局变量 //传出地址将使用两个字节, //因此仅设置最大 14字节结构 I2CI2cMsgOut1={I2C_MSG_SEND_WITHSTOP, I2C_SLAVE_ADDR、 I2C_NUMBYTES、 I2C_EEPROM_HIGH_ADDR、 I2C_EEPROM_LOW_ADDR、 0x10、//消息字节1 0x20 //消息字节2 }; struct I2CMSG I2cMsgIn1={I2C_MSGSTAT_SEND_NOSTOP、 I2C_SLAVE_ADDR、 I2C_NUMBYTES、 I2C_EEPROM_HIGH_ADDR、 I2C_EEPROM_LOW_ADDR
};
A.这些(#define I2C_EEPROM_HIGH_ADDR 0x00和#define I2C_EEPROM_LOW_ADDR 0x30)是否为 EEPROM 地址?
如果是、那么为什么(I2C_EEPROM_LOW_ADDR 0x30)没有从0x00开始?!
如果您能更详细地解释2C_EEPROM_HIGH_ADDR 和 I2C_EEPROM_LOW_ADDR,我会很高兴。
b.我对该项目中的评论有点困惑。(
"传出地址将使用两个字节、因此最多只设置14个字节)"这是什么意思?
如果我将 I2C_NUMBYTES 设置为大于2、我还必须将#define I2C_MAX_BUFFER_SIZE 设置为大于4
这又造成了另一个问题... 请看下面的代码。
// I2C 消息结构 结构 I2CMSG{ uint16 MsgStatus; //字说明 msg 处于什么状态: // I2C_MSGCMD_INACTIVE =不发送消息 // I2C_MSGCMD_BUSY =已发送 msg start, // 等待停止 // I2C_MSGCMD_SEND_WITHSTOP =要发送的命令 // 主器件传输消息完成、带有一个停止位 // I2C_MSGCMD_SEND_NOSTOP =要发送的命令 // 不带停止位的主器件传输消息 // I2C_MSGCMD_RESTART =发送重启的命令 // 作为具有停止位 UINT16 SlaveAddress 的主接收器; //从器件消息的 I2C 地址用于 uint16 NumberOfBytes; // uint16 memoryHighAddr 中(或将放置在 MsgBuffer 中)的有效字节数量; //与 msg (高字节) 关联的数据的 EEPROM 地址 uint16 memoryLowAddr; //与 msg (低字节) 关联的数据的 EEPROM 地址 uint16 MsgBuffer[I2C_MAX_Buffer_SIZE];//阵列保存 msg 数据-最大值 //由于、MAX_BUFFER_SIZE 可以是4 // FIFO 的};
正如您看到的、I2C_MAX_BUFFER_SIZE 不能设置为超过4...
uint16 MsgBuffer[I2C_MAX_Buffer_SIZE];//阵列保存 msg 数据-最大值
//由于、MAX_BUFFER_SIZE 可以是4
// FIFO
请告诉我如何 逐字节存储 EEPROM?
它是否需要 按顺序(Getdata (Address = 0x0000.0x0001.0x0002.0x0003、...0xFFFF) 对 EEPROM 进行寻址、或者我们可以随机进行寻址(我需要随机寻址)?
感谢您的关注。
此致。
Dave。