Разные результаты объясняются тем, что схема драйвера отличается для каждой технологии.
I2C 100 кГц обычно использует подтягивающий резистор, чтобы подавать сигнал на высокий уровень, и драйверы с открытым стоком, чтобы подавать сигнал на низкий уровень.
Подтягивающие резисторы обычно составляют несколько кОм. Чем длиннее кабель, тем больше его емкость. Время, необходимое для перехода линии от 0 до 1, будет пропорционально общей емкости линии и значению резистора. Где-то в диапазоне около T = 2 * R * C было бы примерно правильно.
Например, если у вас был кабель длиной 10 футов с емкостью 20 пФ на фут емкости, и вы использовали нагрузочный резистор 10 кОм, то для перехода с низкого уровня на высокий потребовалось бы T = 2 * 20 пФ / фут * 10 фут * 10 кОм = 3,6us.
В этом случае вы, очевидно, не можете иметь один бит после нулевого бита шириной менее 3,6 с, поэтому ваша скорость передачи будет ограничена 277 кГц.
В реальной системе I2C спецификация I2C дополнительно требует установки и удержания времени вокруг передачи данных и тактов. Те времена - или сотни наносекунд или микросекунд. Время было специально сделано очень медленным, чтобы устройства могли быть реализованы дешево (копейки) и потреблять очень мало энергии (милливатты).
Ethernet, с другой стороны, может работать быстрее, несмотря на емкость кабеля, потому что он не использует нагрузочный резистор. Он активно вбивает либо высоко, либо низко в кабель. Драйвер имеет низкий импеданс и может очень быстро зарядить любую емкость линии. Конечно, все это имеет цену. Ethernet, как правило, потребляет сотни мегаватт энергии и стоит не менее нескольких долларов на каждый порт для реализации.
Может, установка, аналогичная I2C, будет работать быстрее, конечно, просто измените нагрузку 10 кОм на 100 Ом, и теперь ваше время нарастания до 10 футов кабеля снизится с 3,6 до 36 нс. Тогда вы, вероятно, сможете работать на частоте около 10 МГц без особых проблем (за исключением того факта, что обычные микросхемы I2C не могут говорить так быстро).