Here is a quick guide on how autonegotiation supposed to work:
When both sides are set to autonegotiation, they will negotiate the speed and the duplexity and the maximum supported will be the common speed/duplexity. If one side is hardcoded and the autonegotiation is set to off, the autonegotiation process will fail, and the side with autoneg_on will be forced to used half duplex. So if the other side is set directly to full duplex autoneg_off, then you will end up with a duplex mismatch. Here is a table to easier to memorize:
Auto Half Full Auto optimal works mismatch Half works optimal mismatch Full mismatch mismatch optimal
“Optimal” means that the settings are correct, “works” means that you have luck and everything works because of the fallback-nature of autoneg, but the settings are not correct. In case of a duplex mismatch on the side running half-duplex you will see various errors and a number of late collisions. On the side running full-duplex you will see things like FCS errors. Those errors are not necessarily conclusive, they are simply indicators. Just to mention, a hub is always half duplex, and a switch can either be half- or full duplex.
Sources:
Ethernet Autonegotiation Best Practices (www.sun.com)
Setting Duplexity and Autonegotiation (www.docs.hp.com)