Thursday, August 5, 2010

The TINI™ Specification and Developer’s Guide















Contents
Foreword xi
Preface xiii
CHAPTER 1 The TINI Platform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 TINI Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 The Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2 Integrated I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3.3 A Hardware Reference Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 TINI Runtime Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.1 API Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.2 The Java Virtual Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.3 Native Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.4 TINI OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.4.5 Bootstrapping the System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.4.6 Step 1: Execute the Bootstrap Loader . . . . . . . . . . . . . . . . . . . . . . 19
1.4.7 Step 2: Initialize the Runtime Environment. . . . . . . . . . . . . . . . . . 20
1.4.8 Step 3: Start the Primary Java Application . . . . . . . . . . . . . . . . . . 21
1.5 The Future . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
CHAPTER 2 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1 Hardware Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1 The TINI Board Model 390 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2 The E10 Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Development Platform Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1 A Java Development Environment. . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.2 The Java Communications API . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.3 The TINI SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Loading the TINI Runtime Environment . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 Slush: A Quick Primer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.1 Slush Defined. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.4.2 Starting a New Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.4.3 Exploring the File System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.4.4 Getting Help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.5 Configuring the Network. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.6 Some Simple Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.1 HelloWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.6.2 Blinky, Your First TINI I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.6.3 HelloWeb, a Trivial Web Server . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.7 Debugging Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
CHAPTER 3 Serial Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.1 Introduction and Terminology. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2 The Java Communications API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.2.1 Acquiring and Configuring Serial Ports. . . . . . . . . . . . . . . . . . . . . 56
3.2.2 Flow Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2.3 Sending and Receiving Serial Data . . . . . . . . . . . . . . . . . . . . . . . . 61
3.2.4 Serial Port Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.3 TINI’s Serial Ports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.4 A Small Terminal Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.5 A Serial ⇔ Ethernet Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
CHAPTER 4 The 1-Wire Net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
4.1 1-Wire Networking Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.1.1 1-Wire Signalling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.1.2 1-Wire Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.1.3 Addressing 1-Wire Chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.1.4 1-Wire Chips and iButtons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2 Adapters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.2.1 Finding and Creating Adapters . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
4.2.2 The Internal Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.2.3 The External Adapter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.2.4 Determining an Adapter’s Capabilities . . . . . . . . . . . . . . . . . . . . . 91
4.2.5 Searching for 1-Wire Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
4.2.6 Adapter Ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.3 Direct 1-Wire Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.4 Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.1 The Class OneWireContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.2 Creating Container Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.4.3 Example: 1-Wire Humidity Sensor. . . . . . . . . . . . . . . . . . . . . . . 104
4.5 Ensuring Data Integrity Using CRCs . . . . . . . . . . . . . . . . . . . . . . . . . . 108
CHAPTER 5 TCP/IP Networking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1 TINI Networking Environment and API Overview. . . . . . . . . . . . . . . . 112
5.1.1 The Network Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.1.2 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.1.3 PPP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
5.1.4 Loopback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
5.2 Setting Network Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
5.2.1 Committing Static Network Parameters . . . . . . . . . . . . . . . . . . . 119
5.2.2 Dynamic IP Configuration Using DHCP. . . . . . . . . . . . . . . . . . . 121
5.3 DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
5.4 HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
5.5 ICMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
CHAPTER 6 Dial-Up Networking Using PPP . . . . . . . . . . . . . . . . . . . . . 139
6.1 The PPP API Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.2 PPP Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.2.1 STARTING Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.2.2 AUTHENTICATION_REQUESTED Event . . . . . . . . . . . . . . . . 143
6.2.3 UP Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.2.4 STOPPED Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.2.5 CLOSED Event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
CHAPTER 7 Building a Remote Data Logger . . . . . . . . . . . . . . . . . . . . 147
7.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
7.2 The DataLogger Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
7.3 Collecting the Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
7.4 A Sample Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7.5 Implementing the PPP Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
7.6 Managing the PPP Data Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.6.1 The Serial Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
7.6.2 Controlling the Modem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
7.7 Adding the PPP Daemon to DataLogger. . . . . . . . . . . . . . . . . . . . . . . . 175
7.8 Testing the Entire Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
CHAPTER 8 Parallel I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.1 TINI’s Parallel Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
8.2 The DataPort Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.2.1 Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
8.2.2 Memory Access Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
8.2.3 Controlling Bus Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
8.3 Parallel I/O Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.3.1 Additional TTL I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
8.3.2 Reading and Writing External Memory. . . . . . . . . . . . . . . . . . . . 196
CHAPTER 9 Just the Bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.1 TINI’s Ports and Port Pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
9.2 The BitPort Class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
9.3 Synthetic Port Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
9.3.1 Example: Creating Additional Outputs . . . . . . . . . . . . . . . . . . . . 204
9.4 The BytePort Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
9.5 Performance of BitPort and BytePort . . . . . . . . . . . . . . . . . . . . . . . . . . 207
CHAPTER 10 Accessing System Resources . . . . . . . . . . . . . . . . . . . . . . 209
10.1 The Real-Time Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
10.1.1 Setting the Current Date and Time . . . . . . . . . . . . . . . . . . . . . . 212
10.1.2 Using a Network Time Server . . . . . . . . . . . . . . . . . . . . . . . . . . 212
10.2 The Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
10.2.1 Motivation for Using the Watchdog. . . . . . . . . . . . . . . . . . . . . . 215
10.2.2 A Tail of Two Dogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
10.2.3 Using the Watchdog Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
10.2.4 Example Use of the Watchdog Timer . . . . . . . . . . . . . . . . . . . . 217
10.2.5 Beware of Dog! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3 The External Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3.1 Polling versus Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
10.3.2 Properties of the External Interrupt . . . . . . . . . . . . . . . . . . . . . . 220
10.3.3 Triggering the External Interrupt . . . . . . . . . . . . . . . . . . . . . . . . 220
10.3.4 Receiving Notification of Interrupts . . . . . . . . . . . . . . . . . . . . . 221
10.3.5 Sharing a Common Interrupt Source . . . . . . . . . . . . . . . . . . . . . 224
CHAPTER 11 Application Programming Tips . . . . . . . . . . . . . . . . . . . . 225
11.1 Performance Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
11.2 Efficient I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
11.2.1 Block Data Transfer versus Byte-Banging . . . . . . . . . . . . . . . . 227
11.2.2 Buffered Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
11.3 Memory Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.1 Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.2 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
11.3.3 Profiling Memory Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
11.3.4 Garbage Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
11.4 Other Optimization Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
11.4.1 Relative Cost of Common Operations . . . . . . . . . . . . . . . . . . . . 238
11.4.2 Loop Optimizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
11.4.3 Arithmetic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
11.4.4 The ArrayUtils Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
11.5 An Optimization Strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
11.6 Application Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
11.6.1 TINI’s Memory Technology and Data Persistence . . . . . . . . . . 249
11.6.2 Application Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
11.6.3 Hardening Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
APPENDIX Almanac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

Download
Another Software Engineering books

No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!