
Somebody heard
After the check there is one slot in which any receiver that got the message intact shouts. The sender learns that at least one device heard, not which or how many.
One slot, left quiet
After the check there is one bit called the acknowledge slot. The sender sends it quiet. Every receiver that got the message without a check error, stuffing error or malformed field drives it loud. The sender reads the slot like any other bit and sees loud or quiet.
What the sender learns
A loud slot means at least one device received the message intact. It does not say which device, how many, or whether any of them did anything with it. There are no addresses to name a receiver with.
A device that does not want the message still acknowledges it. Filtering decides whether a device uses a message, and in the specification it sits above the part that acknowledges. So a loud slot is no evidence that the device you meant got it. If that matters, the application has to ask for a reply.
Listening without speaking
A controller can be set to listen only. It reads every frame and drives nothing, the acknowledge slot included, so the sender does not count it. That suits a device that only watches a network. A bus with one sender and one watcher in this mode still sees no acknowledge.
Sending to nobody
A sender with no other normal device on the pair gets a quiet slot. It sees an acknowledgement error, sends an error flag and tries again. Each failed try adds eight to its transmit error count. At 128 it becomes error passive, and from then on a missing acknowledge adds nothing, so the count stops there. The specification says such a node can become error passive but not bus off for this reason.
A passive transmitter also waits eight extra quiet bit times between tries. Whether a given chip's counter stops at exactly 128 is that chip's own behaviour, so check it on yours.
Common mistakes
- Reading an acknowledge as delivery to the right device. It means at least one device got an undamaged frame, whatever its filter says.
- Testing a single board with a normal controller. Nothing acknowledges, so it retries for ever. Use a second node, or the controller's self-test mode where it has one.
- Expecting a lone sender to go bus off. A missing acknowledge stops counting once the node is error passive. Bus off comes from real transmit errors, which lesson nine covers.
Edit this page — content/fundamentals/can/somebody-heard.mdx
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.