I2C Speed issues
Posted: Thu Jan 02, 2020 6:05 pm
Hi Esp32 Folk
I'm guessing the I2C system is limited to around 1mhz?
I'm testing out various OLEDs - that I know can run above 1mhz - and I'm getting about 1.1mhz speed out the current I2C IDF system.
OLED is a SSD1327, buffer size is 8192 bytes - i2c speed is set to 2,000,000. Transfer time is around 16fps. This all works just splendidly - except it's not transferring at 2mhz:
9 bits per bytes transfer - extra bit is ACK - I'm ignoring the address bits overhead - since I blast my entire buffer in one go. And I have ack_en turned off when using
i2c_master_write_byte.
Filters are turned off:
i2c_filter_disable(I2C_NUM_0);
16x8192x9 = 1,179,648 bits per second.
Is there any simple mod to the current method to bypass the interrupt system - I'm guessing this is the slowdown. It's a really great simple system for general purpose I2C sub 1mhz - but I need a blasty polling system to hit max speeds.
I have attempted to modify the current setup - by changing the i2c structure to a word size for the byte count - and plonking a polling system to wait and fill for the fifo - but honestly I don't know what I'm doing and it crash panics
thanks
Shabby
I'm guessing the I2C system is limited to around 1mhz?
I'm testing out various OLEDs - that I know can run above 1mhz - and I'm getting about 1.1mhz speed out the current I2C IDF system.
OLED is a SSD1327, buffer size is 8192 bytes - i2c speed is set to 2,000,000. Transfer time is around 16fps. This all works just splendidly - except it's not transferring at 2mhz:
9 bits per bytes transfer - extra bit is ACK - I'm ignoring the address bits overhead - since I blast my entire buffer in one go. And I have ack_en turned off when using
i2c_master_write_byte.
Filters are turned off:
i2c_filter_disable(I2C_NUM_0);
16x8192x9 = 1,179,648 bits per second.
Is there any simple mod to the current method to bypass the interrupt system - I'm guessing this is the slowdown. It's a really great simple system for general purpose I2C sub 1mhz - but I need a blasty polling system to hit max speeds.
I have attempted to modify the current setup - by changing the i2c structure to a word size for the byte count - and plonking a polling system to wait and fill for the fifo - but honestly I don't know what I'm doing and it crash panics
thanks
Shabby