Oracle® Java ME Embedded Getting Started Guide for the Reference Platform (Raspberry Pi) Release 8.1 E48512-04 |
|
Previous |
Next |
This appendix describes the proper ID and names for the various peripheral ports and buses for the Raspberry Pi embedded board, which are accessible using the Device I/O APIs.
Note that any IMlet that accesses the Device I/O APIs must be digitally signed using a trusted certificate authority. An IMlet that is not signed will encounter an authentication error when attempting to access the Device I/O APIs.
To access any device from the preconfigured peripheral list, the following permission is required:
jdk.dio.DeviceMgmtPermission(%Name%:%ID%);
You can find the names and IDs for specific devices in the tables that follow in this appendix. You must also specify an action. An empty string means open
.
The tables use the following legend:
Device ID: an integer identifier that can be used to open the device with the methods of the DeviceManager
class.
Device Name: the string name of a device that can be used to open it by name with the methods of the DeviceManager class
.
Mapped: all hardware-related information regarding a peripheral, such as physical location, mapping, or port. This information enables the user to determine the peripheral's location on a target board.
Configuration: properties that are passed to the specific DeviceConfig
constructor to open the peripheral by ID or name. The configuration can be used to open the peripheral using the DeviceManager
with the appropriate configuration.
Note the following items for Device I/O in the Raspberry Pi board:
The interface DeviceConfig.HardwareAddressing
supports device names only with UART devices. Do not use the DeviceConfig.HardwareAddressing.getDeviceName()
method.
The PulseCounter
instance cannot be opened by the PulseCounterConfig
instance with the GPIOPinConfig
instance specified.
The PWMChannel
instance cannot be opened by the PWMChannelConfig
class with the GPIOPinConfig
instance specified.
The following GPIO pins are preconfigured.
Devicel ID | Device Name | Mapped | Configuration |
---|---|---|---|
4 | GPIO4 | GPIO 4 | controllerNumber = 0
|
7 | GPIO7 | GPIO 7 | controllerNumber = 0
|
17 | GPIO17 | GPIO 17 | controllerNumber = 0
|
18 | GPIO18 | GPIO 18 | controllerNumber = 0
|
22 | GPIO22 | GPIO 22 | controllerNumber = 0
|
23 | GPIO23 | GPIO 23 | controllerNumber = 0
|
24 | GPIO24 | GPIO 24 | controllerNumber = 0
|
25 | GPIO25 | GPIO 25 | controllerNumber = 0
|
27 | GPIO27 | GPIO 27 | controllerNumber = 0
|
Please note the following items concerning GPIO on the Raspberry Pi board.
The value of DeviceConfig.DEFAULT
when applied to the controllerNumber
is 0.
The value of DeviceConfig.DEFAULT
when applied to the mode
means that the GPIO pin be configured in the default mode, as per the table above.
GPIO modes are not software-configurable. All GPIO pins in the preceding table are given with the only mode that is supported on the Raspberry Pi. If an application attempts to configure a GPIO pin to use an unsupportable mode, an exception will be thrown.
For GPIO pins that are configured as input pins, the initValue
parameter is ignored.
The trigger modes TRIGGER_HIGH_LEVEL
, TRIGGER_LOW_LEVEL
, and TRIGGER_BOTH_LEVELS
are not supported on the Raspberry Pi.
For all GPIO pins, the application should pass in a 0 for the GPIO port when necessary.
The following diagram represents the pin positions of the Raspberry Pi, Revision 2.
There is no static I2C configuration with the Raspberry Pi because there is no connected hardware. In comparison with SPI, I2C does not allow any communication with a loopback device.
Device ID | Device Name | Mapped | Configuration |
---|---|---|---|
NONE | GPIO 2 (SDA)
GPIO 3 (SCL) |
Please note the following items about I2C on the Raspberry Pi.
I2CDevicePermission
is necessary.
For revision 1 boards, I2C is provided by default on GPIO 0 and 1 (bus 0), and for revision 2 boards, I2C is provided on GPIO 2 and 3 (bus 1.)
The value of DeviceConfig.DEFAULT
when applied to the busNumber
is 0.
The value of DeviceConfig.DEFAULT
when applied to the addressSize
is 7.
The clockFrequency
field is ignored.
Before using I2C, you will have to load two I2C modules: i2c-bcm2708
and i2c-dev
. Add the following two lines to the /etc/modules
file and reboot to apply the changes.
i2c-bcm2708 i2c-dev
The following MMIO peripherals are available:
Device ID | Device Name | Mapped | Configuration |
---|---|---|---|
61 | PWM |
The MMIO peripherals include CTL, STA, RNG1, DAT1, and FIF1 registers (all of them are of type INT) with no event support.
Due to nature of memory organization of the Raspberry Pi, programmers can create a custom MMIODeviceConfig
to access the memory range {0x20000000, 0x21000000}. Please note that not all addresses are accessible in the range and some of them may cause a board reboot. Please check the documentation for SFR addresses and its behavior. The end addresses are not inclusive.
The SPI has a single static configuration with the following parameters:
Device ID | Device Name | Mapped | Configuration |
---|---|---|---|
12 | SPI_Slave | GPIO10 (MOSI)GPIO9 (MISO)GPIO11 (SCLK)GPIO8 (CE0) | SPI bus number: 0 (SPI1)
Chip Enable: 0 (CE0/GPIO8) The number of bit of slave's word: 8 Clock frequency in Hz: 2000000 Clock polarity and phase: 1 (CPOL_Low, CPHA_2Edge) Bit ordering of the slave device: 1 (BIG_ENDIAN) |
Please note the following items about SPI on the Raspberry Pi.
The value of DeviceConfig.DEFAULT
when applied to the busNumber
is 0.
The value of DeviceConfig.DEFAULT
when applied to the clockFrequency
is 2000000 Hz.
The value of DeviceConfig.DEFAULT
when applied to the wordLength
is 8.
The value of DeviceConfig.DEFAULT
when applied to the bitOrdering
is 1 (big-endian).
Before using SPI, you will have to load the SPI modules by running the following command: $ modprobe spi_bcm2708
, or by using the same method as I2C: uncomment the appropriate line in the etc/modprob.d/raspi-blacklist.conf
file and reboot the board.
Only 8-bit word lengths are supported on the Raspberry Pi board.
No real hardware is connected by default.
Note: You can connect MISO and MOSI pins to get a simple loopback device for testing your code. |
The following UART devices are preconfigured:
Device ID | Device Name | Mapped | Configuration |
---|---|---|---|
40 | UART | GPIO 14 (TXD)GPIO 15 (RXD) | uartNumber - <to be removed>
|
Please note the following items about UART on the Raspberry Pi.
By default, the Raspberry Pi uses the UART as a serial console. Before using UART, make sure that /dev/ttyAMA0
is not being used as a console. This can be done by changing the boot command line by editing the /boot/cmdline.txt
file and removing the line "console=ttyAMA0,115200 kgdboc=ttyAMA0,115200
" from the boot arguments. Also, comment out the following line: "2:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
" in the file /etc/inittab
.
In the case when the /boot
is mounted as a read-only partition, it must be remounted with write permissions to enable modifying the cmdline.txt
file.
sudo mount -n -o remount,rw /boot
Then edit the cmdline.txt
file and reboot the Raspberry Pi board.
By default, the pi
user is in the dialout
group. That gives pi
the ability to access /dev/ttyAMA0
(and, consequently, UART from Java) without administrator rights.
The UARTConfig.controllerNumber
value is an index of the port in the array of port names obtained from the microedition.commports
property. The microedition.commports
property is platform-specific.
In a Linux environment, the microedition.commports
property lists the devices, filtered by using the deviceaccess.uart.prefix
property. The deviceaccess.uart.prefix
property in the jwc_properties.ini
file contains a list of prefixes separated with a space. If there are 4 serial ports available on a Linux system such as /dev/ttyAMA0
, /dev/ttyUSB1
, /dev/ttyUSB2
, and /dev/ttyCusom0
and deviceaccess.uart.prefix=ttyAMA ttyUSB
, then the microedition.commports
property contains ttyAMA0
, ttyUSB0
, and ttyUSB1
, in a different order maybe. The actual order depends on the dedicated operating system file structure. To find out the real order of devices on Linux, use the ls -f/dev
command.
The following parameters are supported in an ad-hoc configuration:
baudRate
- 110, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200
dataBits
- 7, 8
parity
- PARITY_ODD, PARITY_EVEN, PARITY_NONE
stopBits
- 1, 2
flowcontrol
- FLOWCONTROL_NONE