0fa630d29d
Update comments on SMP in README.txt Enable SYSTEM_TIME64 in defconfigs. Enable INSTRUMENTATION in rndis configuration. Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
297 lines
7.9 KiB
Plaintext
297 lines
7.9 KiB
Plaintext
README
|
|
^^^^^^
|
|
|
|
README for NuttX port to the LC823450XGEVK board.
|
|
|
|
The board information is available at
|
|
|
|
http://www.onsemi.com/PowerSolutions/evalBoard.do?id=LC823450XGEVK
|
|
|
|
LC823450 related documents are available at
|
|
|
|
http://www.onsemi.com/PowerSolutions/supportDoc.do?type=AppNotes&rpn=LC823450
|
|
|
|
OpenOCD for NuttX thread and LC823450 support is available at
|
|
|
|
https://github.com/sony/openocd-nuttx/wiki
|
|
|
|
MakeIPL2 Tool for eMMC boot is available at
|
|
|
|
http://www.onsemi.com/PowerSolutions/supportDoc.do?type=software&rpn=LC823450
|
|
|
|
This port is intended to test LC823450 features including SMP.
|
|
Supported peripherals:
|
|
UART, TIMER, RTC, GPIO, DMA, I2C, SPI, LCD, eMMC, USB, WDT, ADC, Audio.
|
|
|
|
Settings
|
|
^^^^^^^^
|
|
|
|
1. eMMC boot and SRAM boot via openocd are supported.
|
|
|
|
If you do SRAM boot via openocd+gdb, please specify hookpost-load in .gdbinit
|
|
to set MSP (main stack pointer) as follows.
|
|
|
|
define hookpost-load
|
|
print *(uint32_t *)0x02040000
|
|
set $sp=$
|
|
end
|
|
|
|
2. If SWD connection is lost, please specify lower adaptor clock.
|
|
3. Both CPUs are running at 160MHz.
|
|
4. Internal SRAMs (seg0 to seg5) are used.
|
|
5. Serial console can be used via external USB-UART (115200/8/N/1).
|
|
6. Interrupt handlers except for inter-cpu are handled on CPU0.
|
|
|
|
SMP related Status
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
CPU activities are shown at D9 (CPU0) and D10 (CPU1) respectively.
|
|
|
|
Currently all applications except for ostest work in SMP mode but might stop
|
|
due to deadlocks or ASSERT(). For a workaround, please try
|
|
|
|
$ cd apps; git diff
|
|
diff --git a/examples/ostest/waitpid.c b/examples/ostest/waitpid.c
|
|
index 687f50ca..8418eff8 100644
|
|
--- a/examples/ostest/waitpid.c
|
|
+++ b/examples/ostest/waitpid.c
|
|
@@ -54,7 +54,7 @@
|
|
****************************************************************************/
|
|
|
|
#define RETURN_STATUS 14
|
|
-#define NCHILDREN 3
|
|
+#define NCHILDREN 2
|
|
#define PRIORITY 100
|
|
|
|
/****************************************************************************
|
|
|
|
If other deadlocks or ASSERT() still happen, please try the following.
|
|
|
|
$ cd nuttx; git revert e238c8b0904988b966c3b33e7df2ba3faba52e2b
|
|
|
|
This will revert the changes for clock_systimer() for 64bit so that it can
|
|
use spinlock to protect the internal data. We think that there still exist
|
|
race conditions somewhere in SMP logic but the revert might relax the conditions.
|
|
|
|
Other Status
|
|
^^^^^^^^^^^^
|
|
|
|
1. nsh built-in commands such as ps, free are available.
|
|
|
|
NuttShell (NSH)
|
|
nsh> ps
|
|
PID GROUP CPU PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK COMMAND
|
|
0 0 0 0 FIFO Kthread N-- Assigned 00000000 000000 CPU0 IDLE
|
|
1 0 1 0 FIFO Kthread N-- Running 00000000 002044 CPU1 IDLE
|
|
3 1 0 100 FIFO Task --- Running 00000000 003052 init
|
|
nsh> free
|
|
total used free largest
|
|
Mem: 1027024 13136 1013888 1013888
|
|
|
|
2. date command can be used to get/set RTC date and time.
|
|
|
|
nsh> date
|
|
Oct 03 00:00:55 2013
|
|
nsh> date -s "Mar 31 12:34:56 2017"
|
|
nsh> date
|
|
Mar 31 12:34:56 2017
|
|
|
|
3. i2c app can be used to test I2C buses.
|
|
|
|
nsh> i2c get -b 1 -a 18 -r 0
|
|
READ Bus: 1 Addr: 18 Subaddr: 00 Value: f9
|
|
|
|
4. nxhello app can be used to test LCD via SPI.
|
|
|
|
nsh> nxhello
|
|
nxhello_initialize: Initializing LCD
|
|
nxhello_initialize: Open NX
|
|
nxhello_main: NX handle=20096f0
|
|
nxhello_main: Set background color=0
|
|
nxhello_main: Screen resolution (128,48)
|
|
nxhello_hello: Position (31,20)
|
|
nxhello_main: Close NX
|
|
|
|
5. eMMC can be accessed via /dev/mtdblock0pX
|
|
|
|
nsh> mkfatfs -F 32 /dev/mtdblock0p10
|
|
nsh> mount -t vfat /dev/mtdblock0p10 /mnt/sd0
|
|
nsh> df
|
|
Block Number
|
|
Size Blocks Used Available Mounted on
|
|
16384 453025 2 453023 /mnt/sd0
|
|
0 0 0 0 /proc
|
|
nsh> ls /mnt/sd0
|
|
/mnt/sd0:
|
|
nsh> ps > /mnt/sd0/ps.txt
|
|
nsh> ls /mnt/sd0
|
|
/mnt/sd0:
|
|
ps.txt
|
|
|
|
Micro SD slot on the board can be used via /dev/mtdblock1.
|
|
Please note that card hotplugging is not supported.
|
|
|
|
6. USB Mass Storage Class support
|
|
|
|
nsh> msconn
|
|
nsh> msdis
|
|
|
|
7. ADC
|
|
|
|
nsh> adc
|
|
adc_main: g_adcstate.count: 1
|
|
adc_main: Hardware initialized. Opening the ADC device: /dev/adc0
|
|
Sample:
|
|
1: channel: 0 value: 366
|
|
2: channel: 1 value: 691
|
|
3: channel: 2 value: 752
|
|
4: channel: 3 value: 963
|
|
5: channel: 4 value: 6
|
|
6: channel: 5 value: 0
|
|
|
|
8. WDT
|
|
|
|
nsh> wdog
|
|
ping elapsed=0
|
|
ping elapsed=500
|
|
ping elapsed=1000
|
|
ping elapsed=1500
|
|
ping elapsed=2000
|
|
ping elapsed=2500
|
|
ping elapsed=3000
|
|
ping elapsed=3500
|
|
ping elapsed=4000
|
|
ping elapsed=4500
|
|
NO ping elapsed=5000
|
|
NO ping elapsed=5500
|
|
NO ping elapsed=6000
|
|
|
|
9. IPL2 and eMMC boot
|
|
|
|
IPL2 is the 2nd boot loader based on NuttX and can be built as follows.
|
|
|
|
$ make distclean
|
|
$ ./tools/configure.sh lc823450-xgevk/ipl2
|
|
$ make V=1
|
|
$ MakeIPL2 ./nuttx.bin 0 2 0 0 0
|
|
$ cp LC8234xx_17S_start_data.boot_bin /tmp/
|
|
|
|
To write the IPL2 (LC8234xx_17S_start_data.boot_bin),
|
|
firstly build USB configuration image.
|
|
|
|
$ make distclean
|
|
$ ./tools/configure.sh lc823450-xgevk/usb
|
|
$ make V=1
|
|
|
|
Load the nuttx.bin with openocd + gdb
|
|
|
|
$ cd openocd-nuttx
|
|
$ ./bootstrap
|
|
$ ./configure
|
|
$ make
|
|
$ sudo ./src/openocd -s ./tcl -f ./tcl/board/lc823450_xgevk.cfg -c init -c "reset halt"
|
|
|
|
$ arm-none-eabi-gdb
|
|
(gdb) target extended-remote :3333
|
|
(gdb) load ./nuttx
|
|
(gdb) symbol-file ./nuttx
|
|
(gdb) c
|
|
|
|
Start USB MSC to copy nuttx.bin and the IPL2 to the FAT32 partition (/dev/mtdblock0p10)
|
|
then dd the files to the kernel partition (/dev/mtdblock0p4) and the IPL2 partition
|
|
(/dev/mtdblock0p1) respectively.
|
|
|
|
nsh> mkfatfs -F 32 /dev/mtdblock0p10
|
|
nsh> msconn
|
|
|
|
$ sudo cp ./nuttx.bin /media/usb0/
|
|
$ sudo cp /tmp/LC8234xx_17S_start_data.boot_bin /media/usb0/
|
|
$ sudo sync
|
|
|
|
nsh> msdis
|
|
nsh> mount -t vfat /dev/mtdblock0p10 /mnt/sd0
|
|
nsh> dd if=/mnt/sd0/nuttx.bin of=/dev/mtdblock0p4
|
|
nsh> dd if=/mnt/sd0/LC8234xx_17S_start_data.boot_bin of=/dev/mtdblock0p1
|
|
nsh> reboot
|
|
|
|
10. Audio playback (WAV/44.1k/16bit/2ch only)
|
|
|
|
Firstly, please make sure that the jumper pins are set as follows.
|
|
|
|
JP1, JP2 => short
|
|
JP3, JP4 => open
|
|
|
|
To play WAV file on uSD card,
|
|
|
|
nsh> mount -t vfat /dev/mtdblock1 /mnt/sd1
|
|
nsh> nxplayer
|
|
nxplayer> play /mnt/sd1/sample.wav
|
|
nxplayer> volume 50
|
|
|
|
Please note that a WAV file which contains sub-chunks other than "fmt"
|
|
and "data" is not supported in pcm_decode.c So, if your wav file contains
|
|
meta-data, please remove the sub-chunks before playing.
|
|
|
|
11. Networking
|
|
|
|
lc823450/rndis configuration supports networking features with RNDIS.
|
|
To use this feature, you have to connect the board to a RNDIS host.
|
|
Currently Linux host is only tested but Windows host should work.
|
|
|
|
If DHCP server is available, you would see ifconfig results like:
|
|
|
|
nsh> ifconfig
|
|
eth0 Link encap:Ethernet HWaddr 00:e0:de:ad:be:ff at UP
|
|
inet addr:192.168.1.244 DRaddr:192.168.1.1 Mask:255.255.255.0
|
|
|
|
|
|
lo Link encap:Local Loopback at UP
|
|
inet addr:127.0.0.1 DRaddr:127.0.0.1 Mask:255.0.0.0
|
|
|
|
|
|
IPv4 TCP UDP ICMP
|
|
Received 0007 0000 0006 0000
|
|
Dropped 0001 0000 0000 0000
|
|
IPv4 VHL: 0000 Frg: 0001
|
|
Checksum 0000 0000 0000 ----
|
|
TCP ACK: 0000 SYN: 0000
|
|
RST: 0000 0000
|
|
Type 0000 ---- ---- 0000
|
|
Sent 0003 0000 0003 0000
|
|
Rexmit ---- 0000 ---- ----
|
|
|
|
However, you might need to add a routing table if you want to send
|
|
a packet via the router.
|
|
|
|
nsh> addroute 0.0.0.0/0 192.168.1.1
|
|
nsh> route
|
|
SEQ TARGET NETMASK ROUTER
|
|
1. 0.0.0.0 0.0.0.0 192.168.1.1
|
|
|
|
12. DVFS (Dynamic Voltage and Frequency Scaling)
|
|
|
|
lc823450-xgevk/audio and rndis configurations support DVFS.
|
|
You can check the status via /proc/dvfs
|
|
|
|
nsh> cat /proc/dvfs
|
|
cur_freq 160
|
|
enable 0
|
|
|
|
By default, DVFS is disabled. To enable,
|
|
|
|
nsh> echo "enable 1" > /proc/dvfs
|
|
|
|
In addition, you can change CPU frequency to 160/80/40. To change the
|
|
frequency, enable the DVFS first then do the following.
|
|
|
|
nsh> echo "cur_freq 80" > /proc/dvfs.
|
|
|
|
Currently, DVFS works in manual mode and Vdd1 is fixed to 1.2V
|
|
which will be changed in the future version.
|
|
|
|
TODO
|
|
^^^^
|
|
|
|
The following features will be supported.
|
|
Accelerometer, etc.
|