Есть некоторое недопонимание процесса.
Известно, что один бит в CAN состоит из четырех сегментов - SYNC, PROPAGATION, PHASE1, PHASE2. Контроллер читает бит с шины между PHASE1- и PHASE2-сегментами и, если надо, выставляет ответ на шину в начале SYNC-сегмента, причем выставляемый бит зависит от считанного. Время, которое нужно контроллеру на то, чтобы вычислить значение выставляемого бита на основе считанного, называется IPT, и для большинства виденных мною контроллеров равно двум временным квантам, при этом в стандарте сказано, что PHASE2 >= IPT.
Допустим, что IPT = PHASE2 и отрицательный фронт на шине пришел до SYNC-сегмента, т.е. передатчик работает быстрее приемника (не рассматриваем передачу Start-of-frame, т.е. хард-синхронизацию, там все ясно). Контроллер, увидев это, пересинхронизируется (софт-синхронизацией) путем уменьшения PHASE2-сегмента, таким образом PHASE2 становится меньше IPT, что запрещено стандартом. Внимание, вопрос. Когда на самом деле контроллер выставляет данные на шину?
|