Corrections List for USB Complete, Third Edition by Jan Axelson Last update: 1/15/06 Thanks to the alert readers who have helped to find these and let me know about them. If you find other errors, please send them to me at jan@janaxelson.com and I'll add them to the list. This list is available online at www.janaxelson.com. These errors are corrected with each printing of the book, so your copy may have some or all of these errors corrected. (Note: a new printing is not a new edition. A new printing is identical to the previous printing except for error corrections.) Also check my website’s USB pages (www.janaxelson.com) for code fixes, additions, enhancements, and updates. p. 79 Change: The minimum requested bandwith for a full speed transfer is one byte per frame, which is 1 kilobyte per second to: The minimum requested bandwith for a USB 1.x full speed transfer is one byte per frame, which is 1 kilobyte per second p. 155 Table6-1 In the Microchip PIC18 row, change: Full/High to: Low/Full p. 163 In the last paragraph, change: RAM to: register space p. 210 In the last paragraph, change: On receiving a CSW, a device must check... to On receiving a CSW, a host must check... p. 324 Listing 11-1 Change: 0x50, //Maximum power consumption 100 mA to: 0x32, //Maximum power consumption 100 mA p. 329 Listing 11-2 has three sets of two lines that set Report Count and Report Size. Change each to: 0x95 0x02 Report Count (2) 0x75 0x08 Report Size (8 bits) p. 367 In Table 12-4, change: Centimeters to: Meters and change: Grams to: Kilograms These are the basic SI units. The HID specification section 6.2.2.7 has the same mistakes. p. 369 In the formula in the second paragraph, change: cm to: m and change: gm to: kg p. 408 In the third paragraph from the bottom, second line, change: TXD output, which connects to RX to: TXD output, which connects to TXD p. 417 Figure 14-3 Under “Read a Byte from the USB Host,” change: The device CPU reads the byte on the data lines and brings RXE# high again. to: The device CPU reads the byte on the data lines and brings RD# high again. p. 481 Change: Verify that all bulk and interrupt endpoints can be halted with a Clear_Feature request. to: Verify that all bulk and interrupt endpoints can be halted and unhalted with Set_Feature and Clear_Feature requests. p. 502 Under: Test_SEO_NAK Change: Value. 01h. to: Value. 03h Under: Test_J Change: Value. 02h. to: Value. 01h p. 503 Under: Test_K Change: Value. 03h. to: Value. 02h *** Pages 410-414 The terminology for the handshaking signals got turned around somehow. In short, on the '877, RTS is an output and CTS is an input. On the '232BM, RTS# is an output and CTS# is an input. RTS on the '877 connects to CTS# on the '232BM. RTS# on the '232BM connects to CTS on the '87. The following corrections make these changes. If your copy of the book implements the first change below, you can ignore the rest of the corrections below for pages 410-414. On page 410: line 1, change: '232BM transmits only when the '877 has brought RTS# to '232BM transmits only when the '877 has brought RTS line 2, change: should transmit only when the '232BM has brought CTS# to should transmit only when the '232BM has brought RTS# Paragraph 4, line 4, change: defines one port bit (PORTB.4) as the CTS to defines one port bit (PORTB.4) as the RTS Paragraph 4, line 5, change: (PORTB.5) as the RTS to (PORTB.5) as the CTS Paragraph 5, line 1, change: The program brings CTS to The program brings RTS Paragraph 5, line 2, change: byte. CTS connects to the '232BM's RTS# to byte. RTS connects to the '232BM's CTS# Pargraph 5, line 3, change: the PC and determining that RTS# to the PC and determining that CTS# Pages 411-413, Listing 14-1. These are mainly changes in terminology that don't change how the program functions. Page 411 Change: DEFINE HDER BAUD 2400 to DEFINE HSER BAUD 2400 Change: DEFINE HER_TXSTA 20h to: DEFINE HSER_TXSTA 20h Change: CTS VAR PORTB.4 to: RTS VAR PORTB.4 Change: RTS VAR PORTB.4 to: CTS VAR PORTB.4 Change: ' The CTS output connects to the '232BM's RTS# input. ' The RTS input connects to the '232BM's CTS# output. OUTPUT CTS INPUT RTS to: ' The RTS output connects to the '232BM's RTS# output. ' The CTS input connects to the '232BM's CTS# input. OUTPUT RTS INPUT CTS Change: CTS = 0 to RTS = 0 p. 412 Change: if RTS = 0 then to: if CTS = 0 then Change: CTS = 0 to RTS = 0 Page 413 Change: ' Set CTS high to prevent receiving more serial data. CTS = 1 to: ' Set RTS high to prevent receiving more serial data. RTS = 1 Change: CTS = 0 to: RTS = 0 Page 414 Paragraph 2 line 1, change: When the ’232BM’s CTS# to: When the ’232BM’s RTS# line 2, change: byte. CTS# connects to RTS to: byte. RTS# connects to CTS line 3, change: RTS is low, to CTS is low, line 5, change: host via the chip’s USB port. The ’877 sets CTS to: host via the chip’s USB port. The ’877 sets RTS p. 502 Change: Test_SE0_NAK Value. 01h to: Test_SE0_NAK Value. 03h Change: Test_J Value. 02h to: Test_J Value. 01h p. 503 Change: TestK Value. 03h to: Test_K Value. 02h