Hi all of you,
I'm using I2C to control a touch panel with LPC1788 used as master. I'm using LPCOpen driver to gain time.
TouchPanel Iitialization
Pin muxing I2C
Chip_I2C_Init
Chip_I2C_SetClockRate // 100000
Board_I2C_SetMod // Pooling mode
The touch panel contain many register (page 6 - http://www.mouser.com/ds/2/291/NHD-4.3-480272EF-ATXL-CTP-28216.pdf -).
First of all I want to read or write one of this register on the slave, but the broblem is when I prob SDL SCA with a serial decode I capture only the Address 0x70 in read or write. It seems that the data and the Register Slave Adress isn't send.
I'm using this command to Send Data: Chip_I2C_MasterSend(BOARD_CTP_ID, CTP_ADDR, buf, 3);
The buf contain at 0 the register Adresse then from buf[1] it contain the data I want to write.
In case of Read I use Chip_I2C_MasterRead(BOARD_CTP_ID, FT5336_I2C_SLAVE_ADDRESS, &buf[2], 1);
What is the correct way to use a Read Slave Register, and Write Value in Slave Register?
Thank you
已解决! 转到解答。
The scope traces show your request is NAK'ed (no response from the slave device).
It may be a case of a shifted slave address: Try specifying 0x38 instead of 0x70 as the address.
There are two kinds of people: Those like you and me who understand the original Philips I2C specification (http://www.nxp.com/documents/user_manual/UM10204.pdf), and those who don't...
The I2C spec defines a 7-bit address space 0x00...0x7F in steps of one. In this world the address of your device is 0x38.
However, the address byte sent on the bus has the 7-bit slave address field shifted left by one bit (bits 7:1), with bit 0 indicating read/write operation. Now some prefer to treat the address byte as the slave address, so they get 0x00...0xFE in steps of two, and your slave address becomes 0x70.
You will find both interpretations in data sheets, and some trial and error is often involved to get it right.
(edited to get the example right...)