Hi,
I have had a quick look at your code and I think you need to tidy it up a bit - there a few inconsitencies. If you do that it will be alot easier to follow.
For example,
unsigned char i2cData[4] = {0x98,0x01,0xAA};
This array has 4 elements, but only 3 are loaded, then it is overwritten in the code and then never changed again.
b = *i2cData2;
This seems to be the only use of
i2cData2, so what is it for? Were you trying to get the address of it then increment through it, I'm not sure?
DataSz is declared globally, but is only used in the 'writemany' function, is it used (or corrupted) anywhere else? Could it be local (that would be better)?
'a' is initialised but is it ever used?
Also, as previously suggested Microchip have a great forums, give it a look.
http://www.microchip.com/forums/Default.aspx?[
^]
Getting these things working the first time is always the hardest bit :)
Good Luck :thumbsup: