1.The information contained herein can change without notice owing to product and/or technical
improvements. Before using the product, please make sure that the information being referred to is
up-to-date.
2.The outline of action and examples for application circuits described herein have been chosen as an
explanation for the standard action and performance of the product. When planning to use the
product, please ensure that the external conditions are reflected in the actual circuit, assembly, and
program designs.
3.When designing your product, please use our product below the specified maximum ratings and
within the specified operating ranges including, but not limited to, operating voltage, power
dissipation, and operating temperature.
4.Oki assumes no responsibility or liability whatsoever for any failure or unusual or unexpected
operation resulting from misuse, neglect, improper installation, repair, alteration or accident,
improper handling, or unusual physical or electrical stress including, but not limited to, exposure to
parameters beyond the specified maximum ratings or operation outside the specified operating
range.
5.Neither indemnity against nor license of a third party’s industrial and intellectual property right, etc.
is granted by us in connection with the use of the product and/or the information and drawings
contained herein. No responsibility is assumed by us for any infringement of a third party’s right
which may result from the use thereof.
6.The products listed in this document are intended for use in general electronics equipment for
commercial applications (e.g., office automation, communication equipment, measurement
equipment, consumer electronics, etc.). These products are not authorized for use in any system or
application that requires special or enhanced quality and reliability characteristics nor in any system
or application where the failure of such system or application may result in the loss or damage of
property, or death or injury to humans.
Such applications include, but are not limited to, traffic and automotive equipment, safety devices,
aerospace equipment, nuclear power control, medical equipment, and life-support systems.
7.Certain products in this document may need government approval before they can be exported to
particular countries. The purchaser assumes the responsibility of determining the legality of export
of these products and will take appropriate and necessary steps at their own expense for these.
8.No part of the contents contained herein may be reprinted or reproduced without our prior
permission.
4-5. Standard I/O over Serial Link.....................................................................4-26
4-5-1. JOB60851 Board Standard I/O....................................................................4-26
4-5-2. Serial Port ....................................................................................................4-27
4-5-3. read() and write() Functions.........................................................................4-29
4-5-4. Standard I/O Examples................................................................................4-31
4-5-5. Debugging with Standard I/O.......................................................................4-32
Page 7
1. Introduction
Page 8
Chapter 1 Introduction
1-1.Checking Packing List
Thank you for purchasing the JOB60851 Starter Kit.
The JOB60851 Starter Kit drives an Oki Electric Industry ML60851 Universal Serial Bus (USB)
device controller with an Oki MSM66Q573 microcontroller to create a starting point for developing
products with built-in USB support. The kit also includes sample firmware source code and the C
compiler package for the Oki MSM66 microcontroller Series, so the developer can start writing
firmware right away.
Before starting development, however, check the kit contents against the packing list in Table 1.1.1.
If a component is missing or damaged during shipping, please contact your Oki Electric distributor
or Technocollage and include the JOB60851 serial number. Replacement is free within one (1)
month of delivery.
Table 1.1.1. Packing List
JOB608511
USB cable1
RS-232c cable1
AC adapter1
CD-ROM1
Two 60-pin user connectors2
Introduction (this page)1
The CD-ROM contains the following directories and files.
\DocumentDocumentation
\CC665SC compiler User's Manual, etc.
\JOB60851JOB60851 Starter Kit User's Guide, etc.
\M66573MSM66573 User's Guide, etc.
\ML60851CUSB controller documentation, etc.
\PackageCompiler package and sample source code
\Cc665sC compiler package, etc.
\HostSample files for evaluating USB operation, etc.
\SampleSample programs, etc.
\Usb_firmSample source code for MSM60851C control software: Hot plugging
(a.k.a. dynamic insertion and removal) capability for USB device, loopback test,
etc.
Before using this product, read through to the end of this section ("Introduction"). Detailed
descriptions start in Section 2 "Putting Board through Its Paces."
If a component is missing or damaged during shipping, please contact your Oki Electric distributor
with the included JOB60851 serial number. Replacement is free within one month of delivery.
Technical support for this product is limited to the product description. We do not offer personalized
support in Japanese or English, not by e-mail or fax and especially not over the telephone.
page 1-2
Page 9
Chapter 1 Introduction
1-2.Host Environment
The JOB60851 Starter Kit assumes the following development environment.
• Microsoft Windows 98
• USB interface fully compatible with Microsoft Windows 98 USB driver
• Terminal emulation software
The compiler package will also run under Microsoft Windows 95 and MS-DOS version 5.0 or later,
but the JOB60851 board will not be accessible as a USB device.
page 1-3
Page 10
Chapter 1 Introduction
Warning
Caution
1-3.Precaution for Safe and Proper Use
This User’s Guide uses various labels and icons that serve as your guides to operating this product
safely and properly so as to prevent death, personal injury, and property damage. The following
table lists these labels and their definitions.
Labels
This label indicates precautions that, if ignored or
otherwise not completely followed, could lead to
death or serious personal injury.
This label indicates precautions that, if ignored or
otherwise not completely followed, could lead to
personal injury or property damage.
Icons
A triangular icon draws your attention to the presence of a hazard.
The illustration inside the triangular frame indicates the nature of the
hazard—in this example, an electrical shock hazard.
A circular icon with a solid background illustrates an action to be
performed. The illustration inside this circle indicates this action—in
this example, unplugging the power cord.
A circular icon with a crossbar indicates a prohibition. The illustration
inside this circle indicates the prohibited action—in this example,
disassembly.
page 1-4
Page 11
Please read this page before using the product.
Warning
Use only the specified voltage.
Using the wrong voltage risks fire and electrical shock.
At the first signs of smoke, an unusual smell, or other problems,
unplug the emulator and disconnect all external power cords.
Continued use risks fire and electrical shock.
Do not use the product in an environment exposing it to moisture
or high humidity.
Such exposure risks fire and electrical shock.
Chapter 1 Introduction
Do not pile objects on top of the product.
Such pressure risks fire and electrical shock.
At the first signs of breakdown, immediately stop using the
product, unplug the emulator, and disconnect all external power
cords.
Continued use risks fire and electrical shock.
page 1-5
Page 12
Chapter 1 Introduction
Caution
Please read this page before using the product.
Do not use this product on an unstable or inclined base as it can
fall or overturn, producing injury.
Do not use this product in an environment exposing it to
excessive vibration, strong magnetic fields, or corrosive gases.
Such factors can loosen or even disconnect cable connectors, producing a
breakdown.
Do not use this product in an environment exposing it to
temperatures outside the specified range, direct sunlight, or
excessive dust.
Such factors risk fire and breakdown.
Use only the cables and other accessories provided.
Using non-compatible parts risks fire and breakdown.
Always observe the specified order for turning equipment on and
off.
Using the incorrect order risks fire and breakdown.
Do not use the cables and other accessories provided with other
systems.
Such improper usage risks fire.
Before connecting or disconnecting the cables and the
accessories, the power source for the emulator must be turned
OFF.
Connections or disconnections performed while the power source is ON risk
fire and damage to the system.
page 1-6
Page 13
Chapter 1 Introduction
Notation
This manual utilizes the following notational conventions for convenience.
n
Caution
n
A “caution” indicates a section of the manual that
requires special attention.
n
Reference
n
A “reference” provides information related to the current
topic and indicates the page number of a related section
of the manual.
n
Application Example
n
An “application example” indicates an example related
to the current topic.
(note ×)“(note ×)” is a reference to a numbered note that
provides supplementary information lower on the same
page.
n
Note x
n
“Note ×:” provides supplementary information related to
the passage marked with “(note ×).”
The descriptions below indicate keyboard keys with capitalized names inside angle brackets.
Examples
<Enter>Enter (or Return) key
<Space>Space key
<Ctrl>Control key (left or right)
<Shift>Shift key (left or right)
page 1-7
Page 14
2. Putting Board through Its Paces
Page 15
Chapter 2 Putting Board through its Paces
2-1.Setup
2-1-1.Configuring JOB60851 Board
Make sure that the switches and jumpers numbered 4, 7, 8, and 9 in Figure 2.1.1 are all in their
factory default positions, B.
Figure 2.1.1. JOB60851 Board, Top View
(1) AC adapter jack(6) Serial (RS-232C) connector
(2) Power switch(7) Clock selection jumper
(3) Flash writer connector(8) Power supply jumpers
(4) Flash writer selection switch (FW-SEL)(9) Power supply jumpers
(5) USB connector(10) Indicator LEDs (LED1 and LED2)
(11) User connectors (CN1 and CN2)
page 2-2
Page 16
Chapter 2 Putting Board through its Paces
2-1-2.Installing Development Software
(1) Install CC665S compiler package
1. Create a directory for the package--c:\665s, for example.
2. Copy the contents of the CD-ROM directory \package\cc665s to that directory.
3. In an MS-DOS compatibility box, switch to the above directory and run the .EXE files, selfexpanding archives that automatically extract compiler files to the appropriate
subdirectories.
1. Make a copy of the standard Windows 9x .PIF file for opening an MS-DOS window and
rename it 665s--665s.pif if you have Explorer set to display file extensions.
2. Create a work directory--c:\test, for example.
3. Using a text editor, create the following batch file in the work directory--c665.bat, for
example. (Modify the c:\665s portions as necessary.)
set path=\665s;c:%path%
set INCL66K=c:\665s\INCLUDE
set LIB66K=c:\665s\LIB
4. Display the Properties for the .PIF file created above, click the Program tab, and set the
Work directory and Batch file fields to the names used above.
c:\test
c:\test\c665s.bat
5. Press <Enter> to save the changes.
(3) Copy sample executables
Copy the contents of the CD-ROM directory \package\sample to the work directory created
above.
The software installation is now complete.
n
Note
n
The above procedures assume that the compiler package is installed in the directory
\665s on drive C:. If you wish to locate this directory on another drive or even change
both drive and directory, simply change all occurrences of c:\665s above to the name
of the new directory.
Page2-3
Page 17
Chapter 2 Putting Board through its Paces
2-1-3.Connecting Board
This section gives the procedures for preparing the JOB60851 board for connection to the
development host.
1.Make sure that the Flash writer selection switch (FW-SEL, #4 in Figure 2.1.1) is in its B
position.
2.Plug the AC adapter into the jack (#1 in Figure 2.1.1) on the board. Make sure that the power
(#2 in Figure 2.1.1) is OFF.
3.Plug one end of the USB cable into the connector (#5 in Figure 2.1.1) on the board. Connect the
other end into the host controller.
2-2.Running Default Program
This section gives the procedures for running the program shipped in the MSM66Q573 Flash
memory.
2-2-1.Installing USB Driver
The included CD-ROM includes the necessary USB driver as well as host software, used in the next
Section, for testing bulk data flow.
1.Create a directory for the host software--c:\usb, for example.
2.Copy the contents of the CD-ROM directory \package\host to that directory.
Rwbulk.exe
Bulkusb.sys
Bulkusb.inf
3.Connect the JOB60851 board as described in Section 2.1.3 above and apply power to it.
4.When Windows 98 automatically detects the new device, install the driver using the Windows
98 driver wizard. (Have the Windows 98 CD-ROM or CABs handy.)
2-2-2.Running Flash Memory Program
The JOB60851 Starter Kit ships with a program already in the MSM66Q573 Flash memory. The
executable Rwbulk.exe installed above is for transferring data to and from this program.
1.Open an MS-DOS window and change to the directory containing Rwbulk.exe--c:\usb in our
example.
C:\usb>rwbulk.exe<Enter>
2.Run Rwbulk.exe to display the built-in help screen.
page 2-4
Usage for RwBulk:
RwBulk type [options]
type : INFO -- dump USB configuration and pipe info
BULK -- Read/Write test
DESC -- Get Descriptor test
CLASS -- Class Request test
Page 18
Chapter 2 Putting Board through its Paces
VENDOR -- Vendor Request test
Detail Usage for -? option:
RwBulk INFO -?
RwBulk BULK -?
RwBulk DESC -?
RwBulk CLASS -?
RwBulk VENDOR -?
3.Use the -u command line option to view the USB pipe numbers.
C:\usb>rwbulk.exe BULK –? <Enter>
Usage for Read/Write test:
RwBulk [BULK] [-options]
-i [s] where s is the input pipe
-o [s] where s is the output pipe
-r [n] where n is number of bytes to read
-w [n] where n is number of bytes to write
-fi [fn] where fn is a filename for the input pipe
-fo [fn] where fn is a filename for the output pipe
-vl [n] where n is verbose level(0,2,5, default=2)
-c [n] where n is number of iterations (default=1, 0 is infinity)
The options and the meanings are:
-i [s] To specify the input pipe name the device(JOB60851) to the host direction.
-o [s] To specify the output pipe name the host to the device(JOB60851) direction.
-r [n] To activate operation of n-bytes read from the input pipe
-w [n]To activate operation of n-byte write into the output pipe.
-fi [fn] To specify a file name for bulk in operation using the input pipe.
-fo [fn]To specify a file name for data bulkout operation using bulk out pipe.
-vl [n] To specify verbose level as 0, 2 ro 5
-c [n] To specify the number of iterations of specified write and read operations
3.Use the -u command line option to view the USB pipe numbers.
C:\usb>rwbulk.exe –u<Enter>
Page2-5
Page 19
Chapter 2 Putting Board through its Paces
"USB_ENDPOINT_DESCRIPTOR for Pipe00"
"USB_ENDPOINT_DESCRIPTOR for Pipe01"
"USB_ENDPOINT_DESCRIPTOR for Pipe02"
The software defines three pipes, PIPE00 to PIPE02. The first is for output--that is, from the
development host to the JOB60851 board. The other two are for input (in the opposite
direction).
PIPE00→OUTPUT:PC→From host to JOB60851
PIPE01→INPUT:JOB60851→To host from JOB60851
PIPE02→INPUT:JOB60851→To host from JOB60851
This command line adds a repeat count of ten, so should produce ten such message pairs.
Opened successfully.
Device Opened successfully.
<pipe00> W (tot:1024 @ 17:21:07) : req 1024 - 1024 written
<pipe01> R (tot:1024 @ 17:21:07) : req 1024 - 1024 read
:
:
<pipe00> W (tot:9216 @ 17:21:07) : req 1024 - 1024 written
<pipe01> R (tot:9216 @ 17:21:07) : req 1024 - 1024 read
<pipe00> W (tot:10240 @ 17:21:07) : req 1024 - 1024 written
<pipe01> R (tot:10240 @ 17:21:07) : req 1024 - 1024 read
<Enter>
6.Additional operation
For more detailed operation please refer to readme.txt file in host driver (Package\Host)
directory.
2-3.Running User Programs
This section gives the procedures for downloading a program over a serial link to the JOB60851
board and then running it.
page 2-6
Page 20
Chapter 2 Putting Board through its Paces
IOIO
IOIO
2-3-1.Connecting Serial Cable
1.Disconnect the USB cable from the board and plug the AC adapter into the jack (#1 in Figure
2.1.1). Make sure that the power (#2 in Figure 2.1.1) is OFF.
2.Plug one end of the serial cable into a serial port on the development host. Serial ports usually
have an icon similar to the following, a label (COM1 or COM2), or just a number.
1
2
or
3.Plug the other end of the serial cable into the serial connector (#6 in Figure 2.1.1) on the board.
4.Make sure that the Flash writer selection switch (FW-SEL, #4 in Figure 2.1.1) is in its A
position.
2-3-2.Loading Terminal Emulator
Checking serial link operation requires HyperTerminal, Tera Term Pro, or other terminal emulator
configured to use the following communications parameters for the serial port (COM1 or COM2)
with the serial cable to the JOB60851 board.
Once the terminal emulator is configured, turn on the power (#2 in Figure 2.1.1).
2-3-3.Synchronizing Link
Before communicating with the JOB60851 board, check that it and the development host are using
the same data transfer speed by downloading the file !zero.dat in the work directory--c:\test in our
example.
(1) Using HyperTerminal
1. Choose the Transfer menu's Send text file command.
2. In the dialog box that appears, double-click the file !zero.dat.
3. Wait for the response OK indicating synchronization.
(2) Using Tera Term Pro
1. Choose the File menu's Send file command.
2. In the dialog box that appears, make sure that the Binary option in the lower left corner is
selected and double-click the file !zero.dat.
3. Wait for the response OK indicating synchronization.
2-3-4.Downloading and Executing
Next repeat the above procedure with the precompiled "Hello world!" program (main.hex) in the
work directory--c:\test in our example.
(1) Using HyperTerminal
1. Choose the Transfer menu's Send text file command.
2. In the dialog box that appears, double-click the file main.hex.
3. Wait for the response "Hello World" indicating successful downloading and execution.
4. To terminate communications, close the window and answer "Yes" to the query asking
permission to break the link.
5. Answering "Yes" to the query asking whether to save the session saves the current settings
under the name first entered or selected above in Section 2.3.2 for reuse next time.
(2) Using Tera Term Pro
1. Choose the File menu's Send file command.
2. In the dialog box that appears, make sure that the Binary option in the lower left corner is
selected and double-click the file main.hex.
3. Wait for the response "Hello World" indicating successful downloading and execution.
(3) Compiling, downloading, and executing a program
The above procedures simply download a precompiled program that was ready to run. Now it is
time to compile an actual user program. By way of illustration, the following simply modifies
page 2-8
Page 22
Chapter 2 Putting Board through its Paces
the above program to display a different string.
1. Copy the source code main.c to a new name, test.c, in the work directory--c:\test in our
example.
std_init_573();
S0BUF = 0x0A;/* 1st byte send to get transmit ready status */
printf_c("Hello World!! \n");
for(;;);
}
3. Modify the string in line 10, replacing "World" with your own name.
4. Save the modified version. Exit or minimize the text editor.
5. Double-click the 665s.pif icon and enter the following command line to compile the new
version into test.hex, an executable for downloading to the JOB60851 board.
n
Note
n
Case counts for command line options (/T, /WIN, and /H here), but not for the
command name (cl665s) or file names.
6. Repeat the appropriate download procedure above substituting the new program, test.hex,
for main.hex.
7. Wait for your name to appear.
2-4. Overwriting Flash Memory Contents
As already mentioned in Section 2.2 above, the board ships with a test program in the MSM66Q573
Flash memory. This may be overwritten, however, with a PW66K Flash programmer.
For further details about flash programmer, contact Oki Electric Device Sales or distributor.
Page2-9
Page 23
3. System Specifications
Page 24
Chapter 3 System Specifications
USB link
Serial link
3-1.System Components
3-1-1.System Objective
The JOB60851 board's primary objective is lowering the threshold for developing new USB devices.
3-1-2.System Components
The JOB60851 board has the components shown in Figure 3.1.1.
JOB60851
MSM66Q573
Flash
PC
TERMINAL
ROM
(LOADER)
ExRAM
ML60851C
Figure 3.1.1. System Block Diagram
PC
USB HOST
Windows98
page 3-2
Page 25
3-2.Hardware Specification
3-2-1.Connectors and Switches
Chapter 3 System Specifications
Figure 3.2.1. JOB60851 Board, Top View
(1) AC adapter jack
The included AC adapter has the following specifications.
Input:100 V AC, 50/60 Hz, 18 VA
Output:10 V DC, 850 mA
n
Note
n
Use only the AC adapter included with the product.
(2) Power switch
Pressing this switch alternately turns the power to the board on and off. If the indicator fails to
light, check the AC adapter connections.
(3) Flash writer connector
This set of pins connects to the PW66K Flash writer for rewriting the program in the
MSM66Q573 Flash memory. For further details, contact Oki Electric Device Sales at +81-35445-6027.
page 3-3
Page 26
Chapter 3 System Specifications
(4) Flash writer selection switch (FW-SEL)
The B side of this switch is for executing the program in the MSM66Q573 Flash memory or
overwriting it with the PW66K Flash writer (available separately).
(5) USB connector
This Series B connector is for the USB cable.
(6) Serial (RS-232C) connector This 9-pin female DSUB connector is for the RS-232C cable
linking the JOB60851 board to a terminal emulator running on the host personal computer.
n
Note
n
Always include the JOB60851 serial number with any queries. It is printed in black ink
on the underside of the board, near the serial connector.
(7) Clock selection jumper
This jumper offers a choice of two onboard MSM66Q573 microcontroller system clock
frequencies: 16 (A) and 24 (B) MHz.
(8), (9) Power supply jumpers
These jumpers offer a choice of two power supplies: USB (A) and AC adapter (B). Both must
be in the same position.
(10) Indicator LEDs (LED1 and LED2)
LED1 monitors the LOAD_SEL signal
LED2 is connected to Port 7, so is under program control. The built-in loader, for example,
changes it from the default red that it has when the power is first applied to green when a
downloaded program is executing.
(11) User connectors (CN1 and CN2)
These connectors provide access to almost all onboard MSM66Q573 microcontroller pins as
well as to the ML60851C USB controller pins. The JOB60851 Starter Kit even includes the
matching connectors for easily connecting these to the user application circuit under
development.
page 3-4
Page 27
3-2-2.Circuit Diagram
Chapter 3 System Specifications
Figure 3.2.2. Circuit Diagram (1/2)
page 3-5
Page 28
Chapter 3 System Specifications
Figure 3.2.3. Circuit Diagram (2/2)
n
Note
n
An electronic version of this circuit diagram is available in the CD-ROM directory
\document\job60851 as the MS Power Point document cir_j851.ppt.
page 3-6
Page 29
Chapter 3 System Specifications
3-2-3.Parts List
Tables 3.2.1 and 3.2.2 list the parts on the JOB60851 board.
This Section gives code and data memory maps for the various JOB60851 operation modes.
(1) Download mode
This mode maps the code memory to the EPROM and the data memory to program RAM and
Flash memory. It uses the loader, a program stored in the EPROM, to download a user
application program over a serial link from the development host to program RAM.
Loader Mode 1 memory map
Program Memory
0:0000 h
Ext._EPROM(E)
(Loader Program)
0:7FFFh
( Load_Sel/ = L ) ( EA/ = L )
Data Memory
0:0000 h
0:0200 h
0:1200 h
0:2000 h
0:3000 h
0:8000 h
1:0000 h
1:0200 h
1:1200 h
1:2000 h
1:3000 h
1:8000 h
1:FFFFh
SFR/XSFR
Int._RAM
Ext._SRAM(A)or(B)
ML60851A
Ext._SRAM(A)or(B)
Ext._SRAM(A)or(B)
SFR/XSFR
Int._RAM
Ext._SRAM(C)or(D)
ML60851A
Ext._SRAM(C)or(D)
Ext._SRAM(C)or(D)
0:0000 h
0:8000 h
1:0000 h
1:8000 h
1:FFFFh
Ext._SRAM
(A)
(B)
(C)
(D)
0:0000 h
0:7FFFh
Ext._EPROM
(E)
page 3-8
Figure 3.2.4. Memory Map for Download Mode
Page 31
Chapter 3 System Specifications
(2) Flash execution mode
This mode maps the code memory to the Flash memory and the data memory to work RAM. It
executes the program in Flash memory. Cutting the power does not erase the program, which
starts automatically when the power is next applied.
Loader Mode2 memory map
Program Memory
0:0000h
Int._FlashROM
(Loader Program)
1:0000h
Int._FlashROM
(Only M66Q577)
1:FFFFh
( Load_Sel/ = L ) ( EA/ = H )
Data Memory
0:0000h
0:0200h
0:1200h
0:2000h
0:3000h
0:8000h
1:0000h
1:0200h
1:1200h
1:2000h
1:3000h
1:8000h
1:FFFFh
SFR/XSFR
Int._RAM
Ext._SRAM(A)or(B)
ML60851A
Ext._SRAM(A)or(B)
Ext._SRAM(A)or(B)
SFR/XSFR
Int._RAM
Ext._SRAM(C)or(D)
ML60851A
Ext._SRAM(C)or(D)
Ext._SRAM(C)or(D)
0:0000h
0:8000h
1:0000h
1:8000h
1:FFFFh
Ext._SRAM
(A)
(B)
(C)
(D)
Ext._EPROM
0:0000h
(E)
0:7FFFh
Figure 3.2.5. Memory Map for Flash Execution Mode
page 3-9
Page 32
Chapter 3 System Specifications
(3) Application mode
This mode maps the code memory to program RAM and the data memory to work RAM. It
executes the program in program RAM.
AP Mode 1 memory map
Program Memory
0:0000 h
Ext._SRAM(A)
(AP Program)
0:7FFFh
Ext._SRAM(B)
(AP Program)
1:0000 h
Ext._SRAM(A)
(AP Program)
1:8000 h
Ext._SRAM(B)
(AP Program)
1:FFFFh
( Load_Sel/ = H ) ( EA/ = L )
Data Memory
0:0000 h
0:0200 h
0:1200 h
0:2000 h
0:3000 h
0:8000 h
1:0000 h
1:0200 h
1:1200 h
1:2000 h
1:3000 h
1:8000 h
1:FFFFh
SFR/XSFR
Int._RAM
Ext._SRAM(C)
ML60851
Ext._SRAM(C)
Ext._SRAM(D)
SFR/XSFR
Int._RAM
Ext._SRAM(C)
ML60851
Ext._SRAM(C)
Ext._SRAM(D)
0:0000 h
0:8000 h
1:0000 h
1:8000 h
1:FFFFh
Ext._SRAM
(A)
(B)
(C)
(D)
0:0000 h
0:7FFFh
Ext._EPROM
(E)
Figure 3.2.6. Memory Map for Application Mode
page 3-10
Page 33
Chapter 3 System Specifications
(4) Flash rewrite mode
This mode maps the code memory to the Flash memory and the data memory to work RAM. It
executes the program in Flash memory. Cutting the power does not erase the program, which
starts automatically when the power is next applied.
AP Mode2 memory map
Program Memory
0:0000h
Int._FlashROM
(AP Program)
1:0000h
Int._FlashROM
(Only M66Q577)
1:FFFFh
( Load_Sel/ = H ) ( EA/ = H )
Data Memory
0:0000h
0:0200h
0:1200h
0:2000h
0:3000h
0:8000h
1:0000h
1:0200h
1:1200h
1:2000h
1:3000h
1:8000h
1:FFFFh
SFR/XSFR
Int._RAM
Ext._SRAM(C)
ML60851A
Ext._SRAM(C)
Ext._SRAM(D)
SFR/XSFR
Int._RAM
Ext._SRAM(C)
ML60851A
Ext._SRAM(C)
Ext._SRAM(D)
0:0000h
0:8000h
1:0000h
1:8000h
1:FFFFh
Ext._SRAM
(A)
(B)
(C)
(D)
Ext._EPROM
0:0000h
(E)
0:7FFFh
Figure 3.2.7. Memory Map for Flash Rewrite Mode
page 3-11
Page 34
Chapter 3 System Specifications
3-3.System Limitations
3-3-1.Resources Uses
The user connectors (CN1 and CN2) on the JOB60851 board make available to the user application
system almost all onboard MSM66Q573 microcontroller pins and thus most microcontroller
functionality.
The JOB60851 board, however, monopolizes certain microcontroller resources in running its own
system, making them unavailable to the developer.
Tables 3.3.1 through 3.3.3 list the MSM66Q573 pin assignments.
Section 4-1. "USB Basics" provides an overview of the Universal Serial Bus (USB) specifications as
well as URLs for obtaining detailed specifications.
Section 4-2. "Sample USB Firmware" provides a functional overview of the sample device firmware
shipped with the JOB60851 Starter Kit and procedures for modifying the source code and evaluating
the result.
Section 4-3. "USB Bits and Pieces" covers device controller specifications, device controller
operational overview, notes to device developers. etc.
Sections 4-4. "Port 7 LED2 Control" and 4.5 "Standard I/O over Serial Link" give procedures for
modifying the sample source code for simple debugging with the JOB60851 board. They cover both
procedures controlling the onboard LED2 and those using standard I/O library functions (printf(),
scanf(), etc.) over the serial link to a terminal emulator.
4-1.USB Basics
4-1-1.Bus Topology, Addresses, and Hot Plugging
The Universal Serial Bus (USB) features a tiered star topology with a single host controller (a.k.a.
root or Tier 0 hub) at the top of a device tree consisting of functions branching off hubs(a.k.a.
repeaters).
A tree has up to 127 such devices (hubs and functions) with addresses 1 to 127. The address 0 is
reserved for use as the default control address that USB devices use when they are first powered on
or reset. Requests from the host controller use this default address to determine the structure of this
new device and assign it an address. This highly flexible arrangement holds the key to hot plugging
(a.k.a. dynamic insertion and removal).
HOST
HOST
CONTROLLER
CONTROLLER
ROOT HUB
ROOT HUB
HUB
HUB
HUB
HUB
HUB
DEVICE
DEVICE
DEVICE
DEVICE
DEVICE
DEVICE
HUB
DEVICE
DEVICE
DEVICE
DEVICE
Figure 4.1.1. Bus Topology
The tree can chain hubs to produce up to five tiers. Cables between hubs or between a hub and a
device can be up to five meters long. To prevent the formation of illegal loopback connections at
hubs, the downstream ports on the root and other hubs use a connector (Series A) mechanically
different from those on the upstream ports on devices (Series B).
The JOB60851 board is for developing devices, not hubs, so features a Series B connector for
connection to the Series A one on the root or other hub.
page 4-2
Page 38
Chapter 4 Software Development
4-1-2.Specification Documents
USB specifications have been established by the USB Implementers Forum. These and other
materials are available on the World Wide Web at the following URLs.
Forum top pagehttp://www.usb.org/developers/
Developers sectionhttp://www.usb.org/developers/
Developer documentationhttp://www.usb.org/developers/docs.html
Device classeshttp://www.usb.org/developers/devclass.html
Compliance testinghttp://www.usb.org/developers/complian.html
The USB Implementers Forum augments the core specifications, the document specifying
characteristics shared by all USB devices, with separate Universal Serial Bus Device Class
Specifications for specific device types.
4-1-3.Core Specifications
This document covers common characteristics of host controllers, hubs, devices, and transmission
pathways. Specific areas include an overview of USB communications, functionality, and bus
drivers; physical and electrical specifications for connectors, transmission pathways, and other
components; and the standard command-response device requests that all USB devices must support.
The current version number is 1.1.
1
n
Note
n
Note: Version 1.1 superseded version 1.0 in October 1998. The older version is still
available on the World Wide Web. Apart from such additions as InterruptOut transfers,
most changes involve removing ambiguities in the older version. The electrical
specifications in Chapter 7 now provide more detail. The protocol layer specifications
in Chapter 8 add descriptions of STALL operation for the default control pipe and of
the Data stage of control transfers. The device framework specifications in Chapter 9
add descriptions of state processing for request errors. The hub specifications in
Chapter 11 have been completely rewritten.
Chapter 1IntroductionObjectives and target audience for USB specifications
Chapter 2Terms and
Definitions of key terms used
Abbreviations
Chapter 3BackgroundDesign goals and requirements addressed
Chapter 4Architectural OverviewOverview of USB architecture and key concepts
Chapter 8Protocol LayerPacket definitions and detailed descriptions of
transaction formats for error detection and recovery,
etc.
Chapter 9UBS Device FrameworkDetailed descriptions of device states, device requests,
1
Version 1.1 superseded version 1.0 in October 1998. The older version is still available on the World
Wide Web. Apart from such additions as InterruptOut transfers, most changes involve removing
ambiguities in the older version. The electrical specifications in Chapter 7 now provide more detail.
The protocol layer specifications in Chapter 8 add descriptions of STALL operation for the default
control pipe and of the Data stage of control transfers. The device framework specifications in
Chapter 9 add descriptions of state processing for request errors. The hub specifications in Chapter
11 have been completely rewritten.
page 4-3
Page 39
Chapter 4 Software Development
→
←
→
←
→
standard device requests, and standard device
descriptors
Chapter 10USB Host: Hardware
and Software
Functions and operation of host hardware and
software
Chapter 11Hub SpecificationHub port operation, requests, and descriptors
Chapter 4 provides a firm grounding in the USB core specifications. All developers of USB
equipment must study Chapter 5 very carefully. Hardware developers must read Chapter 7; firmware
developers, Chapters 8 and 9. Firmware developers must pay particular attention to the timing
specifications in Chapter 7.
What follows are key points from the core specifications. For complete details, refer to the
specifications available from the USB Implementers Forum web site.
4-1-4.Data Flow Types
The USB specifications define four data flow types with the following characteristics. Flexibly
combining these four data flow types provides solutions to the communications needs of a wide
variety of applications.
Table 4.1.2. USB Data Flow Types
ControlCommunication of commands and responses for device configuration and pipe
control
BulkTransfer of relatively large, bursty data volumes with wide dynamic latitude in
transmission constraints
InterruptTransfer of small data volumes within time limits based on human-perceptible echo
or feedback response characteristics
IsochronousTransfer using prenegotiated USB bandwidth with a prenegotiated delivery latency--
audio data, for example--with no procedure for retransmitting data
4-1-5.Bus Transactions
Data transfers consist of bus transactions, exchanges of basic packets between the host and a specific
device. The example below shows two such transactions.
The first data request (IN) from the host arrives when the device has no data for delivery, so the
latter returns a NAK handshake, completing the transaction. The NAK indicates two things: that the
device has no data ready and that the host should resend the request later.
The second data request (IN), in contrast, causes the device to deliver the data (DATA0) that it has
ready. The host acknowledges successful receipt of this data with an ACK, completing the
transaction.
Transactions require cirtain bit time order response, so are implemented in hardware.
HostDevice
(1) Data request (IN)
(2) No data (NAK)
(3) Data request (IN)
(4) Data transfer (DATA0)
(5) Successful receipt acknowledgment (ACK)
page 4-4
Page 40
Chapter 4 Software Development
Figure 4.1.2. Two USB Transactions
All bus transactions begin with a token packet from the host. Devices never initiate data transfers on
their own.
The host controller is in charge of scheduling all traffic on the bus. It schedules the appropriate
transactions for the four data flow types at 1-ms intervals, which the USB documentation calls
frames.
Token packet types include data request (IN), data transfer notification (OUT), and command
transfer notification (SETUP).
4-1-6.Packets
A packet is a continuous bit stream starting with the synchronization pattern and flowing in one
direction.
Table 4.1.3. lists the USB packet types.
PID TypePID NameTransmitterDescription
TokenOUTHostData transfer notification
INHostData request
SOFHostStart of frame
SETUPHostData transfer notification for control pipe
DataDATA0Host/DeviceData packet PID even
DATA1Host/DeviceData packet PID odd
HandshakeACKHost/DeviceReceiver accepts error-free packet
NAKDeviceTransmitter cannot send data
Receiver cannot accept data
STALLDeviceControl pipe request not supported
Endpoint halted
SpecialPREHost
Preamble enabling downstream bus traffic to low-speed devices
4-1-7.Endpoints
The USB provides separate logical communication flows, called pipes, between the host and a USB
function. The function end of a pipe is called the endpoint. This endpoint must provide buffer space
(FIFO) capable of holding at least one data packet (a.k.a. the maximum payload size).
Endpoints and pipes are characterized, at creation, by the direction (from or to host) and by the data
flow type (control, bulk, interrupt, or isochronous). There are provisions for up to 16 pipes in each
direction, for a total of 32 endpoints per function. The token packet that the host transmits to initiate
a transaction specifies the endpoint buffer with the endpoint address made up of the device address
and the endpoint number.
USB device controller capacity is expressed by the number of endpoints it has and such endpoint
specifications as supported data flow types and endpoint buffer sizes. Examining these endpoint
specifications thus reveals whether the USB device controller is suitable for the intended application.
page 4-5
Page 41
Chapter 4 Software Development
4-1-8.Data Rates
The USB supports two data rates: 12 Mb/s and 1.5 Mb/s. Table 4.1.4 lists the maximum payload
sizes for each combination of data flow type and data rate.
Table 4.1.4. Maximum Payload Sizes
Transfer Types
12 Mbps1.5 Mbps
Control8/16/32/648
Isochronous1023 or lessN/A
Interrupt64 or less8 or less
Bulk8/16/32/64N/A
A hub determines the data rates supported by an attached function by examining the latter's Non
Return to Zero Invert (NRZI) data signal lines (D+ and D-). A device supporting the high speed
pulls up the D+ line to the 3.3-volt power supply voltage with a 1.5-kΩ resistor; one supporting the
low speed does the same with the D- line.
The ML60851C USB controller operates exclusively at 12 Mb/s, so the JOB60851 board includes
only the D+ pull-up resistor.
4-1-9.Device Class Specifications
The Universal Serial Bus Device Class Specifications complement the core specifications by further
standardizing USB devices for major interfaces and specific applications devices using those
interfaces.
MAX Payload Size
Some interface specifications standardize the communications pathways that the USB hardware
provides for a specific purpose--the exchange of isochronous audio or image data, for example.
Others standardize USB specifications for devices combining multiple interfaces.
Table 4.1.5 lists some of the USB Device Class Specifications currently available. For further details,
refer to the following URL.
Table 4.1.5. USB Device Class Specifications
Device ClassApplicable Equipment
Human interface devices (HIDs)Mice, keyboards, joysticks, etc.
PrintersPrinters
Audio devicesSpeakers, microphones, etc.
Communications devicesModems, ISDN terminal adapters, etc.
Mass storage devicesFl oppy disk drives, SCSI equipment, ATAPI equipment, etc.
Image devicesDigital cameras, scanners, low-rate video, etc.
There is also a standard for downloading programs to devices.
http://www.usb.org/developers/devclass.html
page 4-6
Page 42
Chapter 4 Software Development
4-1-10. Device Requests
Device requests represent commands from the host to USB functions using control transfers. The
USB function parses the request, performs the necessary action, and returns the appropriate
response.
There are three types of device requests.
Table 4.1.6. Device Request Types
StandardRequests that all USB devices must support because they hold the key to hot plugging
(a.k.a. dynamic insertion and removal)
Class-specificRequests required by the USB Device Class Specifications for the general application
Vendor-specificRequests implemented by the vendor for accessing functionality particular to the USB
device
A control transfer starts with a SETUP token packet followed by an 8-byte data packet containing
the following fields. Note that the meaning of the wValue and wIndex fields depends on the request
type.
Transfer direction, request type, and endpoint address
Request number
Value (meaning depends on the request type)
Index or offset (which depends on the request type)
Number of bytes transferred during the Data stage
A control transfer consists of up to three stages.
1.Setup stage: The data packet following the SETUP token packet is an 8-byte command from the
host to the device. The device parses the command and, as necessary, prepares to send or
receive data.
2.Data stage: The pipe transfers the specified data in the direction specified by the command.
Note that commands that do not involve data transfer skip this stage.
3.Status stage: The host initiates a transaction, in the direction opposite the immediately
preceding data transfer, for reporting command success or failure from the device to the host.
4-1-11. Standard Device Requests
The standard device requests are common ones to all USB devices. Most important are those that
support hot plugging (a.k.a. dynamic insertion and removal). Detailed descriptions are in Section 9.4 of the USB version 1.1 specifications.
Table 4.1.8. Standard Device Requests
No.Request NameDescription
0GET_STATUSReturn status for specified recipient
1CLEAR_FEA TUREClear or disable a specific feature
3SET_FEATURESet or enable a specific feature
5SET_ADDRESSSet device address for al future device accesses
6GET_DESCRIPTORReturn the specified descriptor, if it exists
page 4-7
Page 43
Chapter 4 Software Development
7SET_DESCRIPTORUpdate or add a descriptor
8GET_CONFIGURATIONReturn the current device configuration value
9SET_CONFIGURATIONSet the device configuration value
10GET_INTERFACEReturn the selected alternate setting for the specified interface
11SET_INTERFACESet the alternate setting for the specified interface
12SYNCH_FRAMESet and report an endpoint's synchronization frame
4-1-12. Device Descriptors
When a USB device first connects to the bus, it reports its attributes to the host with a device
descriptor. Figure 4.1.3 illustrates the hierarchical structure of this data structure with the device
descriptor for a bidirectional printer.
Endpoint descriptors give the physical capabilities of the endpoints already discussed in Section
4.1.7 above.
Groups of endpoint descriptors form logical communications functions called interfaces. These
interfaces support alternate settings for changing the interface and thus device characteristics. Note
that these interfaces are mutually exclusive in that only one can be in use at any given time.
alternate setting #2; bidirectional printer
BulkOut
BulkIn
InterruptIn; Inform of data volumes by interrupt transfer
Figure 4.1.3. Device Descriptor for Bidirectional Printer
Higher up the hierarchy are the configuration and device layers. The same device can have multiple
configurations--drawing its power from the bus or its own local power supply, for example. It can
even start as a power-saving device and later switch to a high-consumption one.
The following are brief listings of descriptor contents. For detailed descriptions, refer to Section 9.4
of the USB version 1.1 specifications.
(1) Device descriptor
USB Specification release number in binary coded decimal
Device class code
Device subclass code
Protocol code
Maximum packet size for endpoint 0 (EP0)
Vendor and product IDs
page 4-8
Page 44
Device release number in binary coded decimal
Index numbers for string descriptors describing manufacturer, product, and device serial
number
Number of possible configurations
(2) Configuration descriptor
Total size of this descriptor in bytes
Number of interfaces supported by this configuration
Unique number for this configuration
Index number for string descriptor describing this configuration
Configuration power supply attributes
Remote wake-up support
Maximum power consumption when using bus power supply
(3) Interface descriptor
Total size of this descriptor in bytes
Number of interface
Number of endpoints used by this interface
Class code
Subclass code
Protocol code
Index number for string descriptor describing this interface
Chapter 4 Software Development
(4) Endpoint descriptor Total size of this descriptor in bytes
Data flow direction (IN or OUT)
Data flow type (control, bulk, interrupt, or isochronous)
Maximum packet size (payload) for this endpoint
Interval for polling this endpoint for interrupt transfers
(5) String descriptor
Total size of this descriptor in bytes
Unicode encoded string
page 4-9
Page 45
Chapter 4 Software Development
4-2.Sample USB Firmware
The JOB60851 Starter Kit includes the complete source code for use as the starting point for the user
USB firmware. To see the effects of user modifications on behavior, edit the source code, compile it,
link it into an executable .HEX file, and then download and execute this file with the procedure in
Section 2.3 "Running User Programs."
This Section outlines the entire cycle.
4-2-1.Setup
Copy the file M851xxxx.exe from the \Usb_firm directory on the CD-ROM to a work directory-c:\work in our example. This file is a self-expanding archive that automatically extracts the sample
source code to the appropriate subdirectories shown in Table 4.2.1.
After executing this file in the work directory, open Readme.txt. This text file lists the contents of
the archive. Be sure to read the disclaimer section about rights to the source code.
\66573cc665s source code for 16-bit MSM66573 microcontrollers
\ArmARM-SDT source code for 32-bit ARM microcontrollers
\Errcc665s assembler error output directory
\Lstcc665s assembler listing file output directory
\DebugARM-SDT debugging code output directory
\ReleaseARM-SDT release code output directory
\trafficSample data for use with the Computer Access Technology
Corporation (CATC) USB evaluation system.
4-2-2.Sample Firmware Specifications
The source code on the CD-ROM produces the sample USB firmware shipped in the MSM66Q573
Flash memory. This firmware is perfectly general code that provides the standard device request
support and standard descriptors required by the USB core specifications. It does not assume any
particular application. It supports the three data flow types (control, bulk, and interrupt) offered by
ML60851 USB controllers.
For the detailed specifications of this sample USB firmware, refer to the text file M852.txt
accompanying it in the work directory. Note that the source code supports both ML60851 and
ML60852 USB controllers and that M852.txt covers the 32-bit ARM microcontroller as well as
these two devices. Read only the sections applicable to the ML60851C USB controller and the 16bit MSM66Q573 microcontroller.
n
Note
n
As of August 1999, operation has been confirmed only for the MSM66Q573 plus
ML60851C combination. The ARM code is a preliminary version that does not
compile.
page 4-10
Page 46
Chapter 4 Software Development
4-2-3.Sample USB Host Software
The CD-ROM directory \package\host contains the following USB host software for testing such
things as bulk data flow. A brief overview of operation appears in Section 2.
Readme.txtSoftware description, usage notes, etc.
Rwbulk.exeTest application
Bulkusb.sysWDM-USB driver
Bulkusb.infWDM-USB driver installer information file
This USB host software adopts the following layered approach. For a detailed description, refer to
the accompanying text file Readme.txt.
RWbulk.exe Windows user mode console application
Win32API
BulkUsb.sys Windows kernel mode driver
USB Driver Interface(USBDI)
USB Host Stack Windows WDM USB Host Protocol Stack (Microsoft)
HostController
USB
n
Note
n
This sample host software runs only under Windows 98. It is only for provisional use
by firmware developers pending the completion of proper host drivers and
applications. It is not robust enough for heavy use. In fact, continued use risks
operating system instability and even hang-ups. Note that we are unable to respond
personally to technical queries with regard to this software.
4-2-4.Compiling and Executing Sample USB Firmware
Compiling the sample USB firmware requires the cc665s compiler installed in Section 2.1.2.
Double-check the environment variables from that Section.
The work directory containing the sample USB firmware--c:\work in our example--contains make
files for two popular make utilities (not included in the JOB60851 Starter Kit): Makefile.nmk for use
with nmake from Microsoft and Makefile.bor for use with maker from Inprise (formerly Borland).
Rename or copy the appropriate one to makefile. Also available is the batch file cl665s.bat for users
without either of these make implementations. Successful compilation produces the file USB.HEX
in the work directory. Check the link map file USB.M66 in the same directory for error messages
from the linker.
To test USB.HEX, download it to the JOB60851 board and execute it there with the procedure in
Section 2-3. "Running User Programs." Use Rwbulk.exe and the procedure in Section 2-2-2.
"Running Flash Memory Program" to test bulk data flow.
4-2-5.Confirming USB Compliance with Usbcheck.exe
The USB Implementers Forum web site provides Usbcomp.exe, a self-extracting archive containing
Usbcheck.exe, host software for checking support for USB standard device requests.
page 4-11
Page 47
Chapter 4 Software Development
http://www.usb.org/developers/complian.html
n
Note
n
As of August 1999, this software is at version 3.2 and requires Windows 98 Second
Edition. Users of older Windows 98 versions should download version 2.9 instead.
Once this software has been successfully installed, use the following test procedure to reconfirm the
compliance of the program shipped in the MSM66Q573 Flash memory.
n
Note
n
The procedure for running the program itself is in Section 2.2 "Running Default
Program."
1.Detach all USB devices connected to the personal computer.
2.Double-click the USB Check icon to start the application.
3.Comply with the message box asking you to connect USB devices by plugging in the cable to
the JOB60851 board and applying power to the latter (#2 in Figure 2.1.1).
4.Wait while Windows 98 automatically installs the drivers for the JOB60851 board.
5.When the USB Compliance Tool dialog box appears, click the Full test button at the bottom.
6.When the USB Chapter 9 tests dialog box appears, click the Start automatic testing button at the
bottom.
7.If the tests run successfully to completion and the Full test results dialog box with the Run other
tests button appears, click the OK button to return to the USB Chapter 9 tests dialog box.
8.Click the Cancel automated testing button to display the following information in the Device
info section in the middle of the left side of the dialog box that appears.
If the display matches the information above, the tests are complete.
Usbcheck.exe checks compliance by issuing each USB standard device request. It should, therefore,
always be the first test after downloading a modified version of the sample USB firmware to the
JOB60851 board.
n
Note
n
If Usbcheck.exe aborts in the early stages of dynamic insertion, go back and doublecheck the most recent source code modifications.
page 4-12
Page 48
Chapter 4 Software Development
4-2-6.Creating USB Mouse Demo
The next stage involves modifying the sample program slightly so that the JOB60851 board
emulates a USB mouse. Use the following steps to modify the source code and then recompile.
(1) Modifying source code
The file Include\Class.h under the work directory specifies as its default the device class
BULK_IN_OUT_AND_INT. Comment out that #define and uncomment the
HID_MOUSE_ONLY one.
/*1. Specify device class*/
#defineHID_MOUSE_ONLY /* ← Enable this one */
/*#defineBULK_AND_HID_MOUSE*/
/*#defineHID_MOUSE_AND_BULK*/
/*#defineBULK_IN_OUT_AND_INT*//* ←Disable this default */
/*#defineCOMPLEX_ALTERNATE*/
/*#definePRINTER*/
/*#defineISO_TEST*/
(2) Compiling
The supplied make files and compiler do not check for dependencies on files in the include
directory, so first clean the .HEX and .OBJ files from the work directory and then run the make
utility.
n make clean <Enter> or maker clean <Enter>
nmake <Enter> or maker <Enter>
Successful compilation produces the file USB.HEX in the work directory. Check the link map
file USB.M66 in the same directory for error messages from the linker.
(3) Setting up mouse demo
The sample mouse program emulates a USB mouse in response to commands received over a
serial link to the JOB60851 board. It therefore requires connecting both the USB cable and,
using the procedure in subsections 1-3 in Section 2.3 "Running User Programs," the serial
cable.
(4) Downloading program and installing mouse driver
To test USB.HEX, download it to the JOB60851 board and execute it there with the procedure
in Section 2.3 "Running User Programs."
When the JOB60851 board connects the emulated USB mouse to the personal computer,
Windows 98 automatically launches its driver wizard, so install the HID mouse driver from the
CD-ROM.
page 4-13
Page 49
Chapter 4 Software Development
n
Note
n
The Windows 98 CD-ROM is not necessary if the OEM release has copied the
installation image from the CD-ROM to the directory c:\Windows\Option. If so, specify
that directory instead of the CD-ROM.
(5) Operate mouse with terminal emulator
After reading the messages on the terminal emulator screen, enter HELP at the command
prompt to display the commands available. Try RIGHT, LEFT, UP, and DOWN, for example.
Another way to test the emulated USB mouse is with HIDview, the HID class device portion of
Usbcheck.exe.
4-2-7.Modifying Application Layer
This section gives a hints for modifying the application layer. Note that, in practice, such
modifications require careful study of the USB Specifications, M852.txt, and the source code.
A USB device controller basically uses interrupt-driven communications control. The following API
functions provide the application layer with access to such functionality as initialization, specifying
callback function, and initiating data flow.
usb_init()Initialize USB control variables
usb_set_callback()Specify notification function for bulk transfer compl
usb_tx_start()Specify transmit data buffer and start
usb_rx_start()Specify receive data buffer and start
usb_int_enable()Enable packet ready interrupt
usb_int_disable()Disable packet ready interrupt
usb_remote_wakeup()Transmit remote wake-up signal
usb_cfg_status()Retrieve information from current configuration descriptor
usb_alt_status()Retrieve current alternate setting
The sample firmware provides everything needed to evaluate hot plugging (a.k.a. dynamic insertion
and removal) using control transfers and standard device requests.
The sample application layer provides loopback from endpoint 1 (EP1) to endpoint 2 (EP2).
Modifying the source code in the file main.c permits the simple use of bulk transfers from upstream
applications.
The source code below gives skeletons for two simple application layers consisting of only BulkOut
(receive) or BulkIn (transmit) operations, respectively. Modify the source code, recompile it,
download it to the JOB60851 board, and run the program.
For further details on the API functions, refer to the file M852.txt.
page 4-14
Page 50
Receive Only Skeleton
char buf_rx[BUF_SIZE];
void bulk_rx(uchar *buf, uint size)
{
/* Called after receiving each packet, this function manages buffer overflow for the application
layer. */
if(Receive buffer threatens to overflow){
usb_rx_start(buf_rx, EP_RX);/* Reinitialize pointer to start of buffer */
}
}
void main(void)
{
/* Initialize microcontroller and peripherals, etc. */
:
usb_init();/* Initialize USB control vaiables */
usb_set_callback(EP_RX,rx_callback);/* Specify receive callback function */
usb_rx_start(buf_rx, EP_RX);/* Specify receive data buffer and start */
:
while(1){
/* Main loop */ ;
}
}
Chapter 4 Software Development
Transmit Only Skeleton
char buf_tx[BUF_SIZE];
void bulk_tx(uchar *buf, uint size)
{
/* This function is called after transmitting each packet. */
usb_tx_start(buf_tx, EP_TX);/* Reinitialize pointer to start of buffer */
}
void main(void)
{
/* Initialize microcontroller and peripherals, etc. */
:
usb_init();/* Initialize USB control variables */
usb_set_callback(EP_TX, bulk_tx);/* Specify transmit callback function */
usb_tx_start(buf_tx, EP_TX);/* Specify transmit data buffer and start */
:
while(1){
/* Main loop */ ;
}
}
page 4-15
Page 51
Chapter 4 Software Development
4-2-8.Simple Debugging
The JOB60851 board allows simple debugging over the serial link to a terminal emulator with
printf(), scanf(), and other C standard I/O library functions. Also available for use in debugging is
LED2, which is connected to Port 7 and thus under program control. For further details, see Sections
4.4 "Port 7 LED2 Control" and 4.5 "Standard I/O over Serial Link."
4-2-9.Evaluating USB Equipment
The USB Implementers Forum has published USB interface compliance guidelines. The following
URL provides access to guidelines and peripheral check lists for power consumption, UBS device
framework (using Usbcheck.exe described above), and equipment configurations for testing
interconnectivity.
http://www.usb.org/developers/complian.html
Every three or four months, the USB Implementers Forum conducts a compliance workshop for
testing interconnectivity. Passing these tests earns the devices the right to use the USB logo.
page 4-16
Page 52
Chapter 4 Software Development
4-3.USB Bits and Pieces
4-3-1.Device Controller Specifications
Table 4.3.1 summarizes the ML60851C specifications. For detailed device specifications, see the
data sheet (Ml60851c.pdf).
Table 4.3.1. ML60851C Specifications
Data transfer speedFull speed (12 Mb/s) only
Data flow typeEndpointDirectionBuffer size
In8bytesControlEP0
Endpoint
specifications
InterruptEP3In8bytes
Isochronous---
DMA8/16-bit DMA request function (Endpoint 1: DMA request and acknowledge)
Power supplyVcc3=3.0 to3.6V, Vcc5=3.0 to 5.5V
Interface to 5-volt microcontroller with local power supply (Vcc5)
Package44-pin QFP or TQFP
EP1In and out64 bytes × 2Bulk
EP2In and out64bytes
Out8bytes
4-3-2.Overview of ML60851C Operation
Figure 4.3.1 is a block diagram for ML60851C internals. The basic structure and operation are both
simple. The receiver digitizes the inputs from the USB differential (D+/D-) data bus for the protocol
engine. The phase-locked loop (DPLL) synchronizes the protocol engine with the bus clock.
The protocol engine executes the transactions. It analyzes the time-multiplexed packets over the
USB bus looking for transactions including its assigned address. If it finds one, it analyzes the
request from the host to the corresponding endpoint and then accesses the appropriate buffer for
receiving from or transmitting to the USB bus.
page 4-17
Page 53
Chapter 4 Software Development
USB
Status and
control registers
Setup
registers
(8 bytes)
EP0 receive
buffer ( 8 bytes)
D+
Transceiver
/receiver
D-
Protocol
Oscillator
engine
DPLL
EP0 trasmit
buffer (8bytes)
EP1 receive/
trasmit double
buffer
(64 bytes x 2)
EP2 receive/
transmit buffer
(64 bytes)
EP3 transmit
buffer (8 bytes)
FIFO
A7-A0
AD7- AD0
interface
INTR/
RD/
WR/
CS/
ALE
ADSEL
D15-D8
DREQ
DACK
-DMA
Microcontroller
Figure 4.3.1. ML60851C Block Diagram
Protocol engine operation for a control transfer setup transaction differs from that for all other
transactions.
Setup transactions always write the eight bytes in the associated data packet to the setup registers. If
this data is received successfully, the protocol engine sends an ACK back to the host. It also sends a
setup interrupt to the control microcontroller to request register readout.
Data receive transactions write the data from the USB bus to the specified endpoint's receive buffer
if there is room. If this data is received successfully, the protocol engine sends an ACK back to the
host. It also sends a data received interrupt for the command to the control microcontroller. If there
is no room in the receive buffer or there is an error, the protocol engine sends an NAK back to the
host.
Data transmit transactions send a data packet from the specified endpoint's transmit buffer to the
USB bus if there one ready. If the host then sends an ACK completing the transaction, the Data
transmit transactions send a data packet from the specified endpoint's transmit buffer to the USB bus
if there one ready. If the host then sends an ACK completing the transaction, the protocol engine
empties the buffer. It also sends a transmit buffer empty interrupt to the control microcontroller to
request more data.
4-3-3.Connecting Microcontroller to USB Controller
The ML60851C offers the following configuration options for the microcontroller interface.
(1) Choice, with ADSEL pin, of separate or multiplexed address and data buses
(2) Choice, with register setting under program control, of 8- or 16-bit DMA
The 16-bit data bus is only available when 16-bit DMA is used.
The JOB60851 board uses separate address and data buses, an 8-bit data bus, and no DMA.
page 4-18
Page 54
Chapter 4 Software Development
Figure 4.3.2 shows sample connections to a microcontroller with a 16- or 32-bit bus.
Register must be 8 bits wide. Only DMA uses 16-bit bus. Registers must be aligned at word
boundaries for 16-bit bus and at double boundaries for 32-bit bus.
ML60851C/D
A7-A0
AD7-AD0
D15-D8
RD/
WR/
CS/
INTR/
DREQ
DACK
ADSEL
16/32 bitMCU
A8-A1
D7-D0
D15-D8
RD/
WR/
CS/
INT/
DREQ
DACK
DMA
+
The 16-bit data
bus is only
available when
8- bit DMA is
used.
Figure 4.3.2. Microcontroller with 16- or 32-Bit Bus
4-3-4.Special USB Considerations
The following are special points to keep in mind about USB functions.
(1) D+ pull-up resistor
Some systems require software control over the timing with which the USB device connects to
the upstream host or hub to provide extra time for initialization and other tasks. The JOB60851
board therefore gives the microcontroller control over the D+ pull-up resistor. For further
details, refer to the circuit diagram and the source code for the sample firmware.
(2) Vbus monitor
The JOB60851 board connects the USB power supply (Vbus) line to the microcontroller's
analog-to-digital converter. This arrangement makes it possible for the firmware to measure the
voltage and thus monitor the connection to an upstream host or hub for disconnected USB
cables or removal of power to the host personal computer or intervening hubs. For further
details, refer to the circuit diagram.
(3) Bus-powered operation
Moving both the J3 and J15 jumpers from their default 1-2 positions to their 1-3 positions
configures the JOB60851 board to take its power from the bus, eliminating the need for the
power adapter. We do not recommend using this setting, however, because of the board's
development role. The board is able to guarantee neither that power consumption, a function of
the program under development, is within the limit reported by the firmware nor that the device
under development observes the USB requirement of an average suspend current of 500 µA for
bus-powered devices. In the worst case scenario, a power consumption exceeding the figure
reported by the firmware risks damaging the host or intervening hubs.
The ML60851C is, strictly speaking, not a fully compliant bus-powered device. Although it
notifies the firmware when it suspends operation in response to a suspend signal from the bus, it
also shuts down its clock signal, rendering it unable to detect a subsequent resume signal from
the bus. calling sequence Shutting down the clock signal is, however, the only way to comply
page 4-19
Page 55
Chapter 4 Software Development
with the above-mentioned requirement for average suspend current.
4-3-5.Building a Product
Generally speaking, building a product with the help of the JOB60851 board requires the following
modifications and additions to the software.
(1) Adding and modifying descriptors
At the minimum, the source code has to provide vendor and product IDs. (See Section 4.3.6
below.) Descriptors generally also have to be modified to reflect the final product, application,
and device class.
(2) Adding to class specifications
Building a product in a certain class involves adding requests specified by the class
specifications and descriptors required by the class. Some classes even require additions and
modifications to the standard descriptors.
(3) Adding vendor-specific specifications
Vendor-specific requests implement the control commands and control protocols unique to that
vendor. The vendor must also add descriptors that the host can access with
GET_DESCRIPTOR requests.
(4) Developing application layer
Here the developer writes an application layer program combining API functions and callback
functions.
(5) Tuning data flow
The flexibility of modification that the sample firmware provides through highly generalized
programming sometimes comes at the expense of efficiency. Although maximizing system
throughput involves looking at more than just firmware, there are places where the source code
should be rewritten for speed--to use unidirectional endpoints, for example.
4-3-6.Vendor and Product IDs
Each USB product requires two numbers to uniquely identify it to the host operating system for use
in selecting drivers: a VendorID assigned by the USB Implementers Forum and a ProductId chosen
by the vendor. The sample firmware uses those for Oki Semiconductor and the JOB60851 Starter
Kit, respectively. These may be safely used through the prototype stage. Shipping products, however,
must have their own.
The following URL links to the procedure for acquiring a VendorID from the USB Implementers
Forum.
http://www.usb.org/developers/
4-3-7.Other Tools Necessary
(1) Bus monitor
The sample firmware will not necessarily work perfectly when first ported to a new
microcontroller because of the differences in microcontrollers and compilers. An extremely
effective way to thoroughly check the operation of such a port is with a bus monitor tracing
actual traffic on the bus.
page 4-20
Page 56
Chapter 4 Software Development
A bus monitor also comes in handy during host driver development when the personal computer
hangs, making it impossible to pinpoint the exact circumstances producing the failure.
Bus monitor data is also highly effective in tracing host controller operation and evaluating the
final product.
As of August 1999, the following bus monitors are commercially available.
Product:Genoa Technology USB Expert™ Protocol Analyzer
Product:Genoa Technology, Incorporated.
http://www.gentech.com/
Japanese distributor:Bits Co., Ltd.
http://www.bits.co.jp/
(2) Microcontroller emulator
The JOB60851 Starter Kit provides printf(), scanf(), and other C standard I/O library functions
for confirmation of operation and simple debugging of programs running on its MSM66Q573
microcontroller. Thorough debugging with program tracing and other facilities for illuminating
firmware problems, however, requires an emulator (in-circuit emulator, ROM emulator, etc.)
for the target microcontroller. Look for such tools from the microcontroller vendor and thirdparty sources.
4-3-8.Note on Porting
JOB60851 programming uses a version of the C programming language extended for embedded
applications. The following is a list of extension requiring special attention when porting the sample
firmware to other microcontrollers and compilers. For further details on these language extension,
refer to the compiler manual (Cc665s.pdf) and programming guide (Pg665s.pdf) on the CD-ROM.
(1) #pragma ABSOLUTE variable_name address
This pragma permits specification of the final absolute address for a variable at the C source
code level.
(2) #pragma ACAL function_name
This pragma calls the specified function with the more efficient ACAL instruction instead of the
normal CAL instruction--provided that the function starts at an address between 1000h and
17ffh. Delete or disable these pragmas when porting the source code to a different
microcontroller.
(3) #pragma INTERRUPT function_name vector
This pragma makes the specified function into an interrupt service routine by assigning its entry
point to a vector table entry. This microcontroller has separate interrupt vectors for various
internal and external interrupts. The sample firmware, however, uses only external interrupts
from the USB controller.
page 4-21
Page 57
Chapter 4 Software Development
(4) #asm and #endasm
These two directives enclose an in-line assembly language block, which the compiler simply
passes to the assembler. The sample firmware uses them in read_fifo() and write_fifo(), the
functions for reading from and writing to USB controller buffers, and in extint1(), extint4(), and
extint5(), the functions for switching register banks in response to an external interrupt from the
USB controller.
For further details on this assembly language code, refer to the nX-8/500S Instruction Manual
(Nx8_500s.pdf).
(5) __accpass
This modifier changes the function calling sequence to pass one parameter in the accumulator.
Note that the compiler's /REG command line option makes this the default for all functions
without an overt __noacc modifier.
(6) __noacc
This modifier overrides __accpass and the compiler's /REG command line option to pass all
parameters on the stack. This is required for standard library functions, so always include the
header files containing the function prototypes. It also applies to the low-level I/O functions
read() and write() called by the standard library functions.
Note that incompatible __accpass and __noacc specifications between compile units produces a
program that runs out of control.
4-3-9.Limitations
(1) As of August 1999, sample firmware operation has been confirmed only for the MSM66Q573
plus ML60851C combination. The ARM code is a preliminary version that does not compile.
(2) The sample firmware has been compiled and tested only with the cc665s compiler only in the
small models. Other memory models have not been tested.
page 4-22
Page 58
Chapter 4 Software Development
4-4.Port 7 LED2 Control
The MSM66Q573 microcontroller on the JOB60851 board has twelve bidirectional ports (P0 to P11)
with 75 pins and an input only port (P12).
The Section describes the use of Port 7 (P7), the one connected to LED2.
4-4-1.Port 7 Registers
Each MSM66Q573 microcontroller port on the JOB60851 board has at least three control registers.
The following describes those for Port 7.
(1) Port Mode Register (P7IO)
The bits in this register control the I/O directions of the corresponding Port 7 pins: input ("0") or
output ("1"). After a reset, this register contains 00H, configuring all pins for input.
Port Mode Register (P7IO)
Bit numberbit7bit6bit5bit4bit3bit2bit1bit0
P7IOP7IO7P7IO6P7IO5P7IO4---P7IO2P7IO1P7IO0
After a reset0000---000
Setting a bit to "0" configures the corresponding Port 7 pin for input; "1" is for output.
(2) Port Secondary Function Control Register (P7SF)
The bits in this register switch between the primary ("0") and secondary ("1") functions of the
corresponding Port 7 pins. After a reset, this register contains 00H, configuring all pins for their
primary functions.
Port Secondary Function Control Register (P7SF)
Bit numberbit7bit6bit5bit4bit3bit2bit1bit0
P7SF
Primary
SecondaryP7SF7P7SF6P7SF5P7SF4---P7SF2P7SF1P7SF0
After a reset0000---000
PWM1
OUT
PWM2
OUT
---
PTM3
OUT
------TXD0---
Setting a bit to "0" configures the corresponding Port 7 pin for its primary function; "1" is for its
secondary function.
Note that bit 0 has no secondary function because the corresponding pin is always a serial port
receive data pin. To enable this input pin, simply write "0" to bit 0 in the Port Mode Register
(P7IO).
(3) Data Port Register (P7)
The bits in this register hold the port's I/O data. After a reset, this register contains 00H.
Reading this register yields the input states of pins configured for input and the last data written
for pins configured for output.
Writing to this register overwrites all bits regardless of pin I/O directions.
page 4-23
Page 59
Chapter 4 Software Development
This concludes the description of Port 7. To use the port, manipulate the above registers within the
program. For further details on registers for other ports and Port 7 operation, refer to Chapter 5 in the
MSM6657 Family User's Manual.
4-4-2.Changing LED2 Color
The next page gives sample code (port7exp.c) that changes the color of the LED connected to Port 7.
This sample program calls std_init_573(), a support function for initializing the MSM66Q573 on the
JOB60851 board, so be sure to include the corresponding source code file (stdrw573.c) on the
compiler command line.
This sample program uses the secondary function, serial port, for Port 7's lowest four bits to send
character strings to the terminal emulator running on the host personal computer by setting the lower
halves of Port Mode (P7IO) and Port Secondary Function Control (P7SF) Registers to the following
values.
P7IO = 0xC2; /* 1100_-010 */ /* Configure Port 7 pin 1 for output */
P7SF = 0x03; /* 0000_-011 */ /* Configure Port 7 pins 1 and 0 for secondary function */
See Section 4.5 "Standard I/O over Serial Link" below for a different approach.
page 4-24
Page 60
Chapter 4 Software Development
Sample Port 7 Control Program
/* Sample program(Port7) */
/* Filename:port7exp.c */
/* Copyright(C) 1999 TECHNOCOLLAGE,Inc. All rights reserved. */
P7IO = 0xC2;/* 1100_-010 */ /* Configure Port 7 pin 1 for output */
P7SF = 0x03;/* 0000_-011 */ /* Configure Port 7 pins 1 and 0 for secondary function
*/
S0BUF = 0x0A;
printf_c(" LED should now be orange \n");
/* Time waster (sleep) */
for(i=0;i<10;i++)
{
for(j=0;j<65535;j++);
}
printf_c(" LED should now be green \n");
P7_7 = 0;/* 01B = green */
P7_6 = 1;
/* Time waster (sleep) */
for(i=0;i<10;i++)
{
for(j=0;j<65535;j++);
}
printf_c(" LED should now be red \n");
P7_7 = 1;
P7_6 = 0;/* 10B = red */
}
page 4-25
Page 61
Chapter 4 Software Development
MSM66Q573 serial port
4-5.Standard I/O over Serial Link
Section 2-.3 "Running User Programs" downloaded and executed a simple "Hello world!" program
that displays its message on the personal computer screen.
C compilers for personal computers assign a keyboard to the standard input and a monitor to the
standard output. The JOB60851 board has neither, but the programmer can provide substitutes as
described in this section.
4-5-1.JOB60851 Board Standard I/O
The sample file stdrw573.c maps the JOB60851 board's standard input and output to a serial link
joining a terminal emulator running on the host personal computer to an MSM66Q573 serial port on
the JOB60851 board.
Standard input: Data from terminal emulator to MSM66Q573 RX pin
Standard output: Data to terminal emulator from MSM66Q573 TX pin
The functions required to create these mappings are read() and write(). Because of their tight links
with hardware, these are known as low-level functions (as opposed to high-level functions without
such dependencies).
Figure 4.5.1 summarizes the data flows for the resulting I/O.
C language I/O functions
Low-level standard I/O library
functions read() and write()
Terminal emulator running on
personal computer
getchar(), putchar(), and similar standard
library functions (high-level standard I/O
library functions)
High-level output functions write their data
with write(). High-level input functions read
their data with read().
TX data from write().
RX data to read().
(Only SIO0 used)
Data received: from MSM66Q573 TX pin
Data transmitted: to MSM66Q573 RX pin
Table 4.5.1 shows the dependencies on these two low-level functions by the higher-level I/O
functions included in the standard libraries for the JOB60851 board C compiler (cc665s). Because of
these dependencies, be sure to include the corresponding source code file (stdrw573.c) on the
compiler command line.
page 4-26
Figure 4.5.1. JOB60851 Board Standard I/O
Page 62
Chapter 4 Software Development
Table 4.5.1. Library Functions Calling read() and write()
For further details on these and other library functions, refer to the RTL665S Run-Time Library
Reference.
The source code file stdrw573.c contains the source code and settings for these two low-level
functions. Including it on the compiler command line provides the user program with access to the
standard library I/O functions.
Including the source code file stdrw573.c provides the user program with access to this standard I/O.
This Section discusses the MSM66Q573 internal serial port that the JOB60851 board uses for this
purpose, with the structure outlined in Figure 4.5.2.
Port 7_1 on the is the MSM66Q573 TX pin transmitting the standard output data to the terminal
emulator running on the host personal computer; Port 7_0, the RX pin receiving the standard input
data in the reverse direction. (The JOB60851 board does not use Port 7_2.)
The baud rate generator (BRG) uses the overflow signal from MSM66Q573 internal timer 3.
page 4-27
Page 63
Chapter 4 Software Development
For further details on these components, refer to the MSM6657 Family User's Manual.
Serial port (SIO0):Chapter 12
Internal timer:Chapter 8, page 9 and following
The source code file stdrw573.c sets up the serial port for these functions using the following steps
between the start and end comments for port and timer setup.
(1) Configure timer 3 for use as baud rate generator (BRG)
The serial port used for standard I/O derives its baud rate from the MSM66Q573 internal timer
3 overflow signal. The source code file stdrw573.c contains the settings for producing a 38,400b/s baud rate from the JOB60851 board's 24-MHz system clock.
(2) Configure serial port
All serial ports have registers for controlling operation. SIO0 has four such registers.
(a) SIO0 Transmit Control Register
This register specifies the data format for transmitting data and enables or disables the
relevant interrupts. The source code file stdrw573.c uses the following settings.
Word size8 bits
Stop bits2
Parity checkNone
Transmit buffer empty interruptEnabled
Transmission end interruptEnabled
(b) SIO0 Receive Control Register
This register specifies the data format for receiving and enables or disables the relevant
interrupts. The source code file stdrw573.c uses the following settings.
Word size8 bits
Baud rate clockTimer 3
Parity checkNone
Receive end interruptEnabled
SIO0 receiveEnabled
(c) SIO0 Receive/Transmit Buffer Register
This 8-bit register holds the transfer data. It is actually two separate registers differentiated
by access. Writing to it writes to the transmit buffer. Reading from it reads from the receive
buffer.
(d) SIO0 Status Register
This status register gives the error status at the end of transmit/receive operations and the
running status during such operations. Note that the hardware does not reset this register, so
the user application program must do so before using the serial port.
Framing error flag"0"
Overrun error flag"0"
Parity error flag "0"
Transmit buffer empty flag"0"
Transmit end interrupt flag"0"
page 4-28
Page 64
Chapter 4 Software Development
Receive end interrupt flag"0"
(3) Configuring TX and RX pins
These pins represent secondary functions for Port 7 pins 1 and 0, respectively, so write the
following values to the corresponding bits in the Port Mode (P7IO) and Port Secondary
Function Control (P7SF) Registers.
Port Mode (P7IO):"1" (output) for P7_1 and "0" (input) for P7_0
Port Secondary Function Control (P7SF):"1" (secondary) for both P7_1 and P7_0
This completes the serial port setup procedure.
4-5-3.read() and write() Functions
For full particulars on these two functions, refer to the comments in the source code file stdrw573.c.
This section gives just broad outlines.
(1) read() function
Figure 4.5.3 gives a flowchart for function operation.
Read character from receive buffer
Character is carriage
return
Echo character (carriage
return) to terminal
Echo line feed to
terminal
Save newline (line feed)
in memory
Character is not carriage
return
Echo character to
terminal
Save character in
memory
Figure 4.5.3. read() Operation
The function reads the character in the single-byte receive buffer.
If that character is not a carriage return, the function echoes it back to the terminal emulator and
stores it as is in memory (as specified by the user application program), incrementing a buffer
page 4-29
Page 65
Chapter 4 Software Development
Read first character from string
Character is line feed
Character is not line feed
pointer as necessary for string input.
If the character is a carriage return, the function echoes both it and a line feed back to the terminal
emulator and stores the latter in memory instead.
The function repeats the above cycle the number of times specified by the count argument to the
read() function. The compiler automatically determines this count from the standard I/O library
function calling read().
The echo portions of the function are there to provide visual feedback when testing the firmware
from the personal computer keyboard. If the user application program does not need this feedback,
echoing can be dropped.
(2) write() function
Figure 4.5.4 gives a flowchart for function operation.
Write carriage return to
transmit buffer
Transmit character (CR)
in transmit buffer
Write character (LF) to
transmit buffer
Transmit character (LF)
in transmit buffer
Write character to
transmit buffer
Transmit character in
transmit buffer
Figure 4.5.4. write() Operation
The control flow is slightly more complicated than that for read(), but the entire operation can be
described in a single sentence: The function reads a character from the buffer and transmits it,
inserting a carriage return into the output stream before a line feed.
The function repeats the above cycle the number of times specified by the count argument to the
write() function. The compiler automatically determines this count from the standard I/O library
function calling write().
page 4-30
Page 66
Chapter 4 Software Development
4-5-4.Standard I/O Examples
This Section presents examples actually using this standard I/O.
For further details on the printf_c(), puts(), and gets() library functions used, refer to the RTL665S
Run-Time Library Reference.
(1) Using standard output and write()
Section 2-3. "Running User Programs" gives one example of a program that writes to standard
output. The following is another.
For further details on the printf_c() and puts() library functions used, refer to the RTL665S
Run-Time Library Reference.
Sample Program Using Standard Output
/* Read/Write sample program 1 */
/* Filename:rw_smpl1.c */
/* Copyright(C) 1999 TECHNOCOLLAGE,Inc. All right reserved. */
puts(d_name[day]); /* Send string to standard output */
(2) Using standard input and read()
The following source codes is an example of a program that reads from standard input.
For further details on the printf_c() and gets() library functions used, refer to the RTL665S Run-
Time Library Reference.
page 4-31
Page 67
Chapter 4 Software Development
Sample Program Using Standard Input
/* Read/Write sample program 2 */
/* Filename:rw_smpl2.c */
/* Copyright(C) 1999 Oki Electric Industry Co.,Ltd. all right reserved. */
/* Copyright(C) 1999 TECHNOCOLLAGE,Inc. all right reserved. */
One way to debug programs for the JOB60851 board is with printf() calls. The sample program in
Section 4-4-2. "Changing LED2 Color," for example, used them to document program steps. These
calls can also track changes in key variables. These progress messages then become your guide to
program flow and beha
page 4-32
Loading...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.