Насколько я понимаю, все очень просто - есть стандартные скорости 1мбит, 500к, 250к, 125к, 50к, 20к, 10кбит и так далее. Для каждой скорости существует определенный набор значений регистров SYNC_SEG , PROP_SEG , PHASE_SEG1 , PHASE_SEG2.
Т.е. каждой скорости будет соответсвовать только один такой набор.
При автонастройке контроллер переходит в так-называемый режим прослушки, когда он принимать данные может, но посылать ничего не может - например acknowledge или error frame.
Т.е все происходит след. образом.
1. По CAN шине должны посылаться сообщения. Если сообщений нет, автонастройка не будет работать.
2. Контроллер в режиме автонастройки подключается к шине. Он не будет оказывать никакого влияния, так как будет находиться в режиме прослушки.
3. Контроллер заносит в регистры CAN контроллера первый набор значений регистров тайминга, соответствующий какой либо скорости.
4. При приеме след. сообщения, если скорость совпадает, то контроллер примет это сообщение. Иначе у него взведется флаг ошибки изза ошибки стаффинга или CRC или чего нибудь еще.
5. Если флаг ошибки взвелся, то контроллер переходит к п.3 с с другими значениями скорости.
Вроде так все скорости и перебираются, пока не примется сообщение без ошибок.
Вроде так.
А стандартные наборы значений регистров легко гуглятся по CAN baudrate Calculator. Например
вот этот.