Чисто случайно нашёл сейчас свою тему, на какую следовало бы,в общем-то, отрапортовать : "Хэппи энд".
Косяк нашёлся, дело было не в шине I2C, не в питании, и не в разводке платы.
Проблема крылась в небольшом куске ассемблерного программного кода :
CODE
SIG_UART0_RECV:
push r16 ; 2
in r16, IO_PORT(SREG) ; 1
push r17 ; 2
lds r17, LED_PORT ; 2 /* atmega128 */
ori r17, RECV_LED ; 1
sts LED_PORT, r17 ; 2 /* atmega128 */
push r30 ; 2
push r31 ; 2
in r31, IO_PORT(UDR0) ; 1 /* atmega128 */
in r17, IO_PORT(UCSR0A) ; 1 /* atmega128 */
andi r17, parity_error ; 1
lds r30, modbus_line_state ; 2
or r30, r17 ; 1
sts modbus_line_state, r30 ; 2
lds r16, modbus_line_timeout; 2
out IO_PORT(TCNT0), r16 ; 1 /* atmega128 */
in r17, IO_PORT(TIMSK) ; 1 /* atmega128 */
ori r17, BIT(TOIE0) ; 1
out IO_PORT(TIMSK), r17 ; 1 /* atmega128 */
in r17, IO_PORT(TIFR) ; 1
ori r17, BIT(TOV0) ; 1
out IO_PORT(TIFR), r17 ; 1
mov r17, r31 ; 1
lds r30, rxtx_buffer_ptr ; 2
lds r31, rxtx_buffer_ptr + 1; 2
st Z+, r17 ; 2
cpi r30, lo8(rxtx_buffer + RECV_MODBUS_BUFFER_SIZE) /* buffer size <= 256 bytes */
breq HERE + 8 ; 1 / 2
sts rxtx_buffer_ptr, r30 ; 2
sts rxtx_buffer_ptr + 1, r31; 2
pop r31 ; 2
pop r30 ; 2
pop r17 ; 2
out IO_PORT(SREG), r16 ; 1
pop r16 ; 2
reti
Даже не очень опытный глаз тут сможет найти ошибку, которая в сочетании с другими дефектами программного кода (в частности сбросом собаки более, чем в одном месте приложения) с единичной вероятностью приводит к отказу устройства.
Отсюда вывод (особенно всем тем, кто иногда заявляет "ИАР/ГЦЦ - глючит, атмел гонит брак"): мойте руки перед едой и не экономьте заварку. То есть, просто надо соблюдать простые элементарные правила - в частности чаще тестировать код, проверять в коде возвращаемые функциями значения.
Но, хотя ни один из ответов по теме не мог бы решить проблему непосредственно, некоторые неспецифические рекомендации данные здесь, помогли в конечном итоге отловить этого жука. В частности, полезной оказалась рекомендация оставить сброс WDT только в одной точке приложения (и то, только после проверки некоторых условий),
и помогла запись в EEPROM запись состояний регистра SREG при возникновении ошибки шины I2C и при возникновении других критических ошибок.
Спасибо всем, кто ответил по этой теме.