I already have a working implementation of USI I2C (write_reg and read_reg) functions, but I am now being asked to implement High Speed Mode for the project. The MSP430F2012 acts as the master and the buck converter chip that I am working with is the slave. According to the chip's data sheet:
High Speed, 3.4 MHz, Mode
High speed mode is entered by:
1) Start condition
2) Chip Address: 0000 1XXX (X = don't care)
3) Wait a clock for the acknowledge
4) Now everything is in HS mode... do a repeated start (do NOT do a "stop" then a "start" because a "stop" kicks the parts out of HS mode)
5) Send read and or writes in HS mode. (remember to use "repeated starts" between commands.)
6) When you are done with the last command send a "stop" condition to put the part back into regular 400k mode.
Before I get into coding questions, I wanted to clear some things up. My project currently functions correctly with various frequencies (using the line "USICKCTL = USIDIV_6 + USISSEL_2 + USICKPL;" and changing USIDIV_X to get various frequencies) so what does regular 400k mode refer to? Does that just mean that anything up to 400kHz can function without HS mode?
On the same token, does HS mode HAVE to run at 3.4MHz. What does that frequency represent and is it specific to this slave only? Is that frequency guaranteed to work for the MSP430F2012 (as this frequency was only in the slave datasheet and not the MSP430's).
Also, can someone explain to me how HS mode is different in terms of functionality? I'm assuming that there are various hardware changes that allow both master and slave to run at that very high frequency without messing up, but what are they?
Lastly, am I correct in believing that it is the master's job to change the clock to whatever frequency is necessary for HS mode? And once that new clock frequency is set, I just do my reads and writes as usual and assume that some kind of hardware was changed to make it work faster?
Any help would be greatly appreciated.
Thanks,
Matt