summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 6e56a6f)
raw | patch | inline | side by side (parent: 6e56a6f)
author | Mike Line <m-line1@ti.com> | |
Thu, 28 Oct 2010 15:49:44 +0000 (11:49 -0400) | ||
committer | Mike Line <m-line1@ti.com> | |
Thu, 28 Oct 2010 15:49:44 +0000 (11:49 -0400) |
The i2c writer will now verify the write
index f9e07ea82af532a222d392b220a343529ce36199..0bff0a5298bb546104e7cf4c681267d24ce7dd98 100644 (file)
options = 1
core_freq_mhz = 625
- i2c_clk_freq_khz = 50
+ i2c_clk_freq_khz = 200
dev_addr_ext = 0x51
index 242971f08765e3312f992a8d86182d2dba858a1b..9c9d1bd6c7dae980ac154d465fad9991b6396563 100644 (file)
options = 1
core_freq_mhz = 625
- i2c_clk_freq_khz = 50
+ i2c_clk_freq_khz = 200
dev_addr_ext = 0x50
diff --git a/src/make/makestg2 b/src/make/makestg2
index 35d3bdce0d4c5475b1f77f5d2c65a86df1e26516..456628b6bfc703e46f80c22f32302a544ededea6 100644 (file)
--- a/src/make/makestg2
+++ b/src/make/makestg2
make -C $(IBL_ROOT)/util/romparse TARGET=$(TARGET)
make -C $(IBL_ROOT)/util/i2cRead TARGET=$(TARGET) $(TARGET)
make -C $(IBL_ROOT)/util/i2cWrite TARGET=$(TARGET) $(TARGET)
+ make -C $(IBL_ROOT)/util/i2cConfig $(TARGET)
make -C $(IBL_ROOT)/util/bconvert
clean: $(CLEAN_MODULES)
index f3d93e09edcf2d1aef6016e054f910db1d6556d1..f9370980c1be704ac4aef77138042b34f85aa9bd 100644 (file)
#include "i2c.h"
#include "target.h"
#include <stdio.h>
+#include <string.h>
#define I2C_SIZE_BYTES 0x10000
#pragma DATA_SECTION(i2cData, ".i2cData")
unsigned int i2cData[I2C_SIZE_BYTES >> 2];
+#pragma DATA_SECTION(i2cRead, ".i2cRead")
+unsigned int i2cRead[I2C_SIZE_BYTES >> 2];
+
#define I2C_MAX_BLOCK_SIZE_BYTES 256
unsigned char i2cBlock[I2C_MAX_BLOCK_SIZE_BYTES+4]; /* need 2 bytes for the address */
+
+/**
+ * @brief
+ * Get a single byte of data from i2cData based on big endian ordering
+ */
+
+UINT8 getByte(int idx)
+{
+ int word;
+ int byte;
+ UINT8 u;
+ unsigned int v;
+
+ word = idx >> 2;
+ byte = idx & 0x3;
+
+ v = i2cData[word];
+
+ u = (v >> ((3 - byte) << 3)) & 0xff;
+
+ return (u);
+
+}
+
+
/**
* @brief
* Form a block of data to write to the i2c. The block is
int n;
int remain;
int progBytes;
+ int eCount;
+
+ UINT8 *iData;
+ UINT8 writeByte;
+ int j;
volatile int i;
}
+ printf ("I2C write complete, reading data\n");
+
+ memset (i2cRead, 0xffffffff, sizeof(i2cRead));
+
+ /* Read the data back */
+ i2cRet = hwI2cMasterRead (dataAddress,
+ nbytes,
+ (UINT8 *)i2cRead,
+ busAddress,
+ 0x100);
+
+
+ if (i2cRet != I2C_RET_OK) {
+ showI2cError (i2cRet);
+ return;
+ }
+
+ printf ("I2C read complete, comparing data\n");
+
+ /* The data received was simply packed bytes, but the data sent was in big endian mode,
+ * so the compare must get the ordering correct */
+ iData = (UINT8 *)i2cRead;
+ eCount = 0;
+ for (j = 0; j < nbytes; j++) {
+
+ writeByte = getByte(j);
+ if (writeByte != iData[j]) {
+ printf ("Error at data byte %d: expected 0x%02x, read 0x%02x\n", j, writeByte, iData[j]);
+ eCount += 1;
+ }
+
+ if (eCount >= 20) {
+ printf ("Too many errors, stopping compare\n");
+ break;
+ }
+
+ }
+
+ if (eCount == 0)
+ printf ("Data compare passed\n");
+ else
+ printf ("Data compare failed\n");
+
+
- printf ("I2C write complete\n");
}
index 930050c2adfbc10b57fd8d94685eb50cde78eea6..92913a3b479b3a0cf6d1fd85b672987059024676 100644 (file)
MEMORY
{
I2C_DAT : origin = 0x800000 length = 0x10000
- L2 : origin = 0x810000 length = 0x10000
+ I2C_READ : origin = 0x810000 length = 0x10000
+ L2 : origin = 0x820000 length = 0x10000
}
SECTIONS
{
.i2cData > I2C_DAT
+ .i2cRead > I2C_READ
.stack > L2
.heap > L2
.text > L2
index 30e19cbd1e167daebd2c41e266e9070ff3c58269..50b9f2d0eb9b2430044f69f6cb809754cd05bebd 100644 (file)
for (i = 0; i < PCI_DATA_LEN_32bit; i++) {
fprintf (str, "0x%08x\n", pciFile.data[i]);
}
+ } else {
+ for (i = 0; i < PCI_DATA_LEN_32bit; i++) {
+ fprintf (str, "0x%08x\n", 0);
+ }
}