TS-7800 User's Manual
TS-7800 User's Manual
http://oz.embeddedarm.com/~michael/support/ts7800.html
Introduction Getting Started SD card features Board Specific features Jumpers LEDs Microsecond counter Random Number Generator LCD header DIO header Temperature Sensor PC-104 connector PC-104 bus Bus Addresses UARTs TS-UART GPIO on PC-104 connector Analog to Digital Conversion
The TS-7800 is a PC-104 form factor, high performance single board computer (SBC) designed for running Linux "out of the box". Its hardware features include:
500 MHz ARM9 CPU (3x faster then previous TS-72XX boards) Internal PCI bus PC/104 connector 128MB DDR-RAM 512MB NAND Flash (17MB/s) 12,000 LUT user-programmable FPGA Gigabit Ethernet, 10/100/1000 speeds dual SATA ports, dual SD sockets dual USB2.0 High-Speed Host/Slave Sleep mode uses 200 microamps
1 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
The TS-7800 utilizes a Marvell 88F5182 ("Media Vault") CPU which implements the SATA2, Gigabit Ethernet, USB 2.0, and COM1/COM2 functionality. For technical information on these functions please refer to the datasheets available from Marvell. The TS-7800 also utilizes a Lattice ECP2 (LFE2-12E) FPGA; please refer to datasheets available from Lattice for more information.
The TS-7800 provides three separate boot mechanisms: on-board flash, SD, and micro SD. To boot from the on-board flash, remove JP1. To boot from micro SD, install JP1 and a bootable micro SD card. To boot from SD, install JP1, ensure that no micro SD card is present, and insert a bootable SD card. All boot methods as shipped from the factory default to a fastboot, which provides a busybox prompt in under two seconds. When this shell is exited the board continues on to perform a full Debian boot.
The SD cards shipped with and for the TS-7800 contain a special four partition scheme. The first partition is a VFAT partition. On cards larger then 1GB, this partition contains Eclipse and other tools, documentation, and so forth. On cards smaller then 1GB this partition is empty. The second partition contains a raw image of the kernel to be booted on the board, while the third partition contains an initial ramdisk (initrd) which the kernel uses as its root filesystem until the fastboot shell exits. The fourth partition contains the Debian Linux distribution, and contains the root filesystem that is used when the fastboot shell exits and the full boot commences.
Jumpers
JP1 (boot select) Sampled at power-up. When ON, the board will first try to boot from the micro-SD card, and then from the SD card, and finally if both of those fail it will attempt to boot from the on-board flash. When OFF, only the last step (boot from on-board flash) is attempted. Software can sample the value of this jumper by reading bit 30 at address 0xE8000004. If this bit is set, JP1 is ON, otherwise it is OFF. JP2 Sampled at power-up. When OFF, the bootrom will not send any messages to the console port (COM1). When ON, the opposite is true. Note that it is up to the operating system kernel loaded as to whether or not it
2 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
will send messages to the console port. For instance, in Linux the CONFIG_CMDLINE kernel parameter and verbosity level control where boot-up messages go. Software can sample the value of this jumper by reading bit 31 at address 0xE8000004. If this bit is set, JP2 is ON, otherwise it is OFF.
JP3 Sampled at power-up. When OFF, the CPU will run at 500Mhz. When ON, the CPU will run at 333Mhz.
LEDs
There are two LEDs on the TS-7800: one RED and one GREEN. The GREEN LED blinks once at power-up to indicate that the power-up sequence succeeded. Both LEDs can be turned on or off under software control. The GREEN LED is accessed via bit 30 at address 0xE8000008. A value of 1 corresponds to the LED being on. The RED LED is accessed indirectly through the on-board AVR microcontroller. Please refer to the source code of the ts7800ctl program as a reference for controlling this LED.
Microsecond Counter
The TS-7800 has a counter which is incremented every microsecond. This can be used to increase the precision of short time measurements, for example. The 32-bit value at address 0xE8000040 contains the counter.
LCD header
The LCD header is a 14 pin (2x7, 0.1" spacing) header with open-drain pull-ups. A low (0) output value will sink current, while a high (1) output value will only tri-state. This header is 5V tolerant. Open drain outputs can sink 8mA, but can only source current through the pull-up resistor. There are two register bits for each pin on the LCD header: an output bit, the value of which controls whether the pin is low (0) or tri-stated (1), and an input bit, which contains the signal value present on the pin.
3 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
The LCD header is numbered as follows: 2 4 6 8 10 12 14 .1 3 5 7 9 11 13 (Pin 1 is next to the dot on the silkscreen) Input bits are read from address 0xE8000004 and output bits are written to address 0xE8000008. The register bits are as follows: pin bit pull 1 2 3 4 5 6 7 8 9 16 +5V 17 GND 18 N/A 19 20 470ohm inline LCD function Vcc GND contrast (bias) RS
21 N/A
10 25 HI via 2.2k DB3 11 26 HI via 2.2k DB4 12 27 HI via 2.2k DB5 13 28 HI via 2.2k DB6 14 29 HI via 2.2k DB7 Please note that pin 1 of the LCD header is tied to +5V and pin 2 is tied to ground; these pins are therefore not controllable through the output bit.
DIO header
The DIO header operates in a very similar manner as the LCD header. The DIO header is numbered as follows: 2 4 6 8 10 12 14 16 .1 3 5 7 9 11 13 15 (Pin 1 is next to the dot on the silkscreen) Input bits are read from address 0xE8000004 and output bits are written to address 0xE8000008. The register bits are as follows:
4 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
pin bit pull 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 HI via 2.2k HI (*) HI via 2.2k HI (*) HI via 2.2k HI (*) HI via 2.2k HI (*) HI via 2.2k
extra
SPI_FRAME
10 9
11 10 HI via 2.2k 12 11 HI (*) 13 12 HI via 2.2k 14 13 HI (*) 15 14 HI via 2.2k 16 15 HI (*) (*) pulled high internally through 20k-150k nominal resistance. The "extra" bits denote which pins have alternate meanings. However the implementation of these pins is left up to user software. SPI_CLK SPI_MOSI
PC-104 connector
The PC-104 connector consists of pins in four rows labelled A, B, C, and D. The numbering of the pins in each row is shown below:
D C
19 18 17 16 15 14 13 12 11 10 19 18 17 16 15 14 13 12 11 10
9 9
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
0
0
5 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
A B
32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10
9 9
8 8
7 7
6 6
5 5
4 4
3 3
2 2
1 1
The PC-104 connector can be multiplexed between different functionalities including ISA bus and GPIO. The power-up default is GPIO mode, with all I/Os in a neutral state. To enable the PC-104 bus (ISA) signals, it is necessary to write the following values to the registers specified: 0x55555555 to address 0xE8000030 0x55555555 to address 0xE8000034 0x55555 to address 0xE8000038 0x55555 to address 0xE800003C More specifically, the functionality of the PC-104 connector can be configured in a more fine-grained manner, two pins at a time. Each pin pair will have one of four functions: function description number 0 1 2 3 GPIO ISA reserved reserved
Setting the function of each pair of pins is done by writing the function number to the appropriate pair of bits in the register corresponding to the row in question. The table below shows the bit positions in each register on the top row, while the cells below in the same column give the corresponding pin numbers for each row which are programmed with those bits at the specified register address. register 31 29 27 25 23 21 19 17 15 13 11 09 07 05 03 01 adrs\/ bits-> 30 28 26 24 22 20 18 16 14 12 10 08 06 04 02 00 0xE8000030 0xE8000034 0xE8000038 0xE800003C 32 30 28 26 24 22 20 18 16 14 12 10 08 06 04 02 31 29 27 25 23 21 19 17 15 13 11 09 07 05 03 01 32 30 28 26 24 22 20 18 16 14 12 10 08 06 04 02 31 29 27 25 23 21 19 17 15 13 11 09 07 05 03 01 19 17 15 13 11 09 07 05 03 01 18 16 14 12 10 08 06 04 02 00 19 17 15 13 11 09 07 05 03 01 18 16 14 12 10 08 06 04 02 00
row A B C D
For example, from the above table we can see that to set the function of pins B19 and B20 we would write the function number to bits [19:18] of the register at address 0xE8000034. We can tell this because when we look at the "B" row we see "20 19" in the cell whose column is headed by "19 18". The function of the PC-104 connector pins are given in the table below. The "ISA" column gives the name of the pin signal when it is configured as ISA, while the "GPIO" column gives the name of the pin signal when it is configured as GPIO. To save space, there are two sets of columns in each table, whereby the pin name is listed first, followed by the ISA signal and then the GPIO signal, and then this order is repeated for the other
6 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
set of pins on the same physical header. The 64-pin connector is given first: pin ISA GPIO pin ISA GPIO GND B[1] +5V B[3] 3.3V B[5] B[6] B[7]
A1 IOCHK# A[0] B1 GND A2 D7 A3 D6 A4 D5 A5 D4 A6 D3 A7 D2 A8 D1 A9 D0 A[1] B2 RESET A[2] B3 +5V A[3] B4 IRQ9 A[4] B5 3.3V A[5] B6 DRQ2 A[6] B7 NC A[7] B8 ENDX#
A10 IORDY A[9] B10 GND A11 AEN A12 A19 A13 A18 A14 A17 A15 A16 A16 A15 A17 A14 A18 A13 A19 A12 A20 A11 A21 A10 A22 A9 A23 A8 A24 A7 A25 A6 A26 A5 A27 A4 A28 A3 A29 A2 A30 A1 A31 A0 A32 GND
A[10] B11 MEMW# B[10] A[11] B12 MEMR# B[11] A[12] B13 IOW# A[13] B14 IOR# B[12] B[13]
A[18] B19 RFRSH# B[18] A[19] B20 BCLK A[20] B21 IRQ7 A[21] B22 IRQ6 A[22] B23 IRQ5 A[23] B24 IRQ4 A[24] B25 IRQ3 B[19] B[20] B[21] B[22] B[23] B[24]
A[25] B26 DACK2# B[25] A[26] B27 TC A[27] B28 BALE A[28] B29 +5V A[29] B30 OSC A[30] B31 GND B[26] B[27] +5V B[29] GND
7 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
Here are the pin assignments for the 40-pin connector. pin ISA C0 GND C1 SBHE# C2 LA23 C3 LA22 C4 LA21 C5 LA20 C6 LA19 C7 LA18 C8 LA17 GPIO pin ISA GND D0 GND C[1] D1 MEM16# C[2] D2 IO16# C[3] D3 IRQ10 C[4] D4 IRQ11 C[5] D5 IRQ12 C[6] D6 IRQ15 C[7] D7 IRQ14 C[8] D8 3.3V GPIO GND D[1] D[2] D[3] D[4] D[5] D[6] D[7] 3.3V D[9] D[10] D[11] D[12] D[13] D[14] D[15] +5V
C9 MEMR# C[9] D9 DRQ0 C10 MEMW# C[10] D10 DACK5# C11 SD8 C12 SD9 C13 SD10 C14 SD11 C15 SD12 C16 SD13 C17 SD14 C18 SD15 C19 GND C[11] D11 DRQ5 C[12] D12 DACK6# C[13] D13 DRQ6 C[14] D14 DACK7# C[15] D15 DRQ7 C[16] D16 +5V
C[17] D17 MASTER# D[17] C[18] D18 GND GND D19 GND GND GND
Note: The GPIO nomenclature in these tables is such that, for example, "A[0]" means "Bit 0 of GPIO Register A", and in general "X[n]" means "Bit n of GPIO Register X" and "X[n:m]" means "Bits n through m of GPIO register X", where X is one of A, B, C, or D.
PC-104 bus
The TS-7800 provides control over some of the ISA parameters of the PC-104 bus through a 32-bit register located at address 0xE800000C, which is defined as follows: bit(s) function 5-0 9-6 ISA strobe length ISA setup length
8 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
10 11 12
Honor ISA 0WS/ENDX signal (1=true) TS special ISA pinout enable (1=true) ISA oscillator select 0 high-jitter approximation of 14.318Mhz 1 clean 25Mhz
(Other bits in this register should be masked out.) The ISA strobe length and ISA setup length are both given as the number of extra 10ns periods. The ISA strobe length is the amount of additional time that ISA_IOR, ISA_IOW, ISA_MEMR, and ISA_MEMW are held asserted. The minimum (when bits are zero) is 20ns. The default power-on value is 40, for a 420ns strobe length. If configured to honor the ISA 0WS/ENDX signal, the peripheral will skip the remaining strobe time for an early transaction end, allowing for faster devices than standard ISA allows. The ISA setup length is the additional amount of time above 20ns that the address and data are held stable before asserting the strobe. The default is 14 (160ns). There is an additional 20ns hold time at the end of the strobe where address and data are kept valid. The default total bus cycle length is then 160ns (setup) plus 420ns (strobe) plus 20ns (hold) for a total of 500ns (2Mhz). This is very conservative for modern hardware and most designs can actually run much faster.
Bus Addresses
To access peripherals on the PC104 bus it is necessary to add the base address from the table below to the offset of the peripheral to get a memory address for accessing the peripheral. For example, for ISA 8-bit I/O address 0x100, add 0xEE000000 to 0x100 to get 0xEE000100. memory I/O
UARTs
The TS-7800 has twelve UARTs. Two of these UARTs, which appear on the COM1 (DB9) header and the COM2 (10-pin) header are driven by the CPU. Under Linux these show up under /dev as ttyS0 and ttyS1. The other ten UARTs are TS-UARTs driven by the FPGA. Under Linux these show up under /dev as tttsn where n is the UART number listed in the table below. When some TS-UART ports are enabled, they override the meanings of other pins with their own meanings. When disabled, the pins revert to their original meaning. The table below describes the ten TS-UART ports. The "RS-" column indicates whether the port is RS-232, RS-485/422, or TTL. The "base adrs" column indicates the address of the STAT register; the DATA register is offset +2 from that. All TS-UART registers
9 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
must be accessed through 16-bit memory accesses. The "header" column indicates which header the port is located on, and the "Tx", "Rx", "TxEn", "RTS", and "CTS" indicate the pin number of those respective signals on the header specified. # 0 1 2(*) RS- base adrs header Tx Rx 8 1 TxEn RTS CTS N/A no N/A no no no no
232 0xE80000C0 COM1 7 232 0xE80000C4 COM1 4 485 +:6 / 0xE80000C8 COM2 -:1 422
no
232 0xE80000D0 COM3 Tx 232 0xE80000D4 COM3 7 TTL 0xE80000D8 DIO TTL 0xE80000DC LCD 13 13
Rx 8 15 14
N/A RTS CTS N/A N/A no 11 12 N/A no N/A no N/A no N/A N/A
TTL 0xE80000E0 PC-104 C17 C18 C16 TTL 0xE80000E4 PC-104 C14 C15 C13
These ports are only available if the OP-485-FD-14 option was ordered with the board. only if RS-422 is selected by setting bit 15 of register 0xE800000C only if RS-485 is selected by clearing bit 15 of register 0xE800000C
All TS-UARTs can be run at one of 7 programmable baud rates, accessed as baud rate indicies 0-6. These baud rates are programmable by accessing the 16-bit address for the index of interest. The baud rate index corresponds to the value written into the TS-UART STAT register's baud rate bits to select that speed. (Note: a baud rate index of 7 is reserved in the TS-UART to mean "disabled".) baud index register address 0 1 2 3 4 5 6 0xE80000E8 0xE80000EA 0xE80000EC 0xE80000EE 0xE80000F0 0xE80000F2 0xE80000F4
The value of the register can be computed from the following formula: 100,000,000 / (8 * baud_rate)
TS-UART
10 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
The TS-UART design used in the TS-7800 is fundamentally the same as the TS-UARTs in other TS boards. The TS-UART is a compact, two register design created to require minimal space in an FPGA. The two registers are STAT and DATA. The layout of the STAT register is: bit(s) name 0 1 2 3 4 TBRE DR OERR CTS RTS A function
RO transmit buffer not full RO receive data ready RO receive overflow RO UART CTS RW UART RTS baud rate index defaults to: 0 115200 1 57600 2 38400
7:5
BAUD
8 9 10 11 12 13
NINEBIT RW enable 9-bit mode RBREAK RO BREAK detected TBREAK RW transmit BREAK DMXS TRE SLOW RO Reserved RO transmitter empty X X Reserved Reserved
15:14 N/A
Please consult the driver source code files tsuart1.c and tsuart-7800.c for more information on implementing a device driver for the TS-UART on the TS-7800.
11 of 12
17-Jun-12 7:25 PM
http://oz.embeddedarm.com/~michael/support/ts7800.html
direction register. The direction register determines if the pin is an output (actively driven) or an input (tri-stated, driven externally). A high ("1") value sets a particular pin to be an output, while a low ("0") value sets it to be an input. The data register, when read, contains the current state of all pins in GPIO mode. When written, the value written will determine the state of all pins in GPIO mode, but only for pins which have their direction set to "output". The GPIO register map follows: address row register data data data data direction direction direction direction
12 of 12
17-Jun-12 7:25 PM