Google Chat: zj734465502@gmail.com
+86-0755-88291180
sales@spotpear.com
dragon_manager@163.com
tech-support@spotpear.com
zhoujie@spotpear.com
WhatsApp:13246739196
The RDK X3 series encompasses the RDK X3 and RDK X3 Module, delivering exceptional 5Tops edge inference capabilities. Their standardized dimensions and interfaces seamlessly integrate with generic products, empowering developers to rapidly deploy intelligent products and robotic solutions.
CPU | Quad-core ARM® Cortex® A53@1.5G |
BPU | Dual-core Bernoulli Arch, 5Tops |
Memory | 2GB/4GB LPDDR4 RAM |
Storage | External TF card |
Canera | MIPI CSI 2lane × 2 |
Display interface | HDMI × 1 (up to 1920 × 1080); MIPI-DSI × 1 (up to 1920 × 1080) |
USB Host | USB Type-A 3.0 × 1; USB Type-A 2.0 × 2 |
USB Device | Micro USB 2.0 × 1 |
Wired Network | RJ45 Gigabit Ethernet × 1 |
Wireless Network | 2.4G Wi-Fi × 1, supports 802.11 b/g/n |
Bluetooth | Bluetooth 4.1 × 1 |
Other Interfaces | 40PIN × 1; Debug serial port × 1 |
Power Supply | USB Type-C, 5V-2A |
Dimensions | 85 × 56 × 20 mm |
Operating Temperature | -25°C ~ 95°C (X3M chip temperature) |
The RDK X3 development board currently supports the two system versions of Ubuntu 20.04 Server and Desktop,download the image
Please download the 2.1.1 or above version of the image.
Note: When using this software to flash, try to connect directly to the USB interface of the computer, do not use external extensions, which may cause unsuccessful flashing.
1. Insert the TF card into the Card reader, connect the Card reader to the computer, and open the balenaEtcher software after the TF card is recognized.
2. Click on Flash from file and select the image file 'system_sdcard.img' you just extracted.
3. Click the 'Select target' button to select the disk corresponding to the TF card as the target storage device.
4.Click the Flash button to start flashing. When the tool prompts Flash Comple, it means that the TF card image is completed, close balenaEtcher, remove the card reader from the computer, and remove the TF card.
Power off RDK X3, insert the TF card into the card slot, connect the display to the HDMI interface, and power up the development board.
When the system is started for the first time, the preset toolkit in the image will be installed. The whole process takes about 1 to 2 minutes. During the installation, HDMI has no display output. After the installation is completed, the system will automatically restart and open the HDMI display output, and the boot screen will be displayed (the server system displays the horizon logo, and the desktop version displays the system desktop).
After the startup screen is displayed normally, it indicates that the system startup is complete. At this time, you can log in to the development board through serial port login and SSH login, log in with user name: sunrise and password: sunrise
If the HDMI output is not displayed for a long time (more than 2 minutes) after the development board is powered on, the development board starts abnormally. At this time, user can log in to the development board through serial port login, check the printing of the serial port during the startup process, and confirm the startup status of the development board. When the TF storage card image is abnormal, the log is as follows:
At this time, user can remake the TF storage card for system recovery.
The IP of device is used when using VNC and SSH to log in remotely. Therefore, users need to obtain the IP address of the development board in advance. At this time, it is recommended that users log in to the development board using a serial port and confirm the network parameters. Log in with the user name: sunrise and Password: sunrise.
RDK X3 | Serial Port Module |
---|---|
Then connect the serial port module to the computer.
Note: The power cord is not connected.
After the hardware is connected and the driver is installed, open the device manager and you will see the following ports:
Open the putty software and configure it as shown below (based on the actually identified ports).
As soon as RDK X3 is Power-up, you will see a message printed in the putty window, and then you can log in.
Enter Command
ifconfig
Get the IP address of RDK X3
ifconfig eth0 represents the Ethernet network (refers to the Ethernet cable), and the system just flashed defaults to 192.168.1.10 ifconfig wlan0 stands for WiFi network
After the hardware is connected, power on the RDK X3, open the MobaXterm software, and configure it as shown in the figure below.
As soon as the Rising Sun X3 is powered on, you can see there is a message printed in MobaXterm , and then you can log in.
We need to configure the IP of the computer before SSH login
We have obtained the IP address(192.168.1.10) of RDK X3 from the serial port login
To enable communication between the computer and the RDK X3, the following steps need to be taken:
Configuring the IP of computer is mainly carried out in the following steps:
Note: Power on, enter the user name and password must be completed within 60s. If it is not completed, just enter it again within 60S.
Open the VNC software, enter the IP address of RDK X3 in the address bar, press Enter, and configure as shown in the following image
ubuntu virtual machine opens the terminal to enter:
ssh sunrise@192.168.1.10
For the safety and stability of the system, it is recommended that users update the system through the APT command after installing the system.
In the/etc/apt/source.list file, the software source list of the APT command is saved. Before installing the software, you need to update the package list with the apt command.
First, open the terminal command line and enter the following command:
sudo apt update
Secondly, upgrade all installed packages to the latest version with the following command:
sudo apt full-upgrade
Note: It is recommended to use full-upgrade command instead of the simple upgrade command, so that when the dependencies change, the dependency packages are also updated synchronously.
When the sudo apt full-upgrade command is run, the system will prompt for data download and disk usage size, but apt will not check whether there is enough disk space, it is recommended that users use command:
df-h
to check manually. In addition, the deb file downloaded during the upgrade process is stored in /var/cache/apt/archives directory, users can use command:
sudo apt clean
to delete the cache file to free up disk space.
After performing full-upgrade, it may be possible to reinstall the driver and upgrade the core of RDK X3, so it is recommended to restart the device, and the command is as follows:
sudo reboot
The development board network configuration is saved in the/etc/network/interfaces file, Please press the Esc key when saving when using the vim editor, and then enter
:wq!
It is recommended to use the nano editor, the installation command is as follows:
sudo apt update sudo apt-get install nano
Modify fields such as address, netmask, and gateway, you can complete the modification of the static IP configuration.
For example:
sudo vim/etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8) # Include files from/etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 metric 700
After completing the modification, in Command-line enter
sudo systemctl restart NetworkManager
to let the configuration take effect.
Restart to update network band:
sudo reboot
DHCP (Dynamic Host Configuration Protocol) is usually used in large-scale local area network environments. Its main role is to centrally manage and assign IP addresses, so that hosts in the network environment can dynamically obtain IP addresses, Gateway addresses, DNS server addresses and other information, and can improve the utilization of addresses. The DHCP network configuration of the development board is saved in the/etc/network/interfaces file. Modification of the DHCP mode can be completed by modifying the configuration related to eth0, for example the terminal enters:
sudo vim/etc/network/interfaces
Modify the following:
source-directory /etc/network/interfaces.d auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp metric 700
When the modification is complete, in Command-line enter command
sudo systemctl restart NetworkManager
to make the configuration effective.
Restart to update network bands:
sudo reboot
If you want to modify the default MAC address of the development board, you can add the pre-up configuration information in the/etc/network/interfaces file to specify the MAC address required by user, for example:
sudo vim /etc/network/interfaces
Modify the following:
# interfaces(5) file used by ifup(8) and ifdown(8)# Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto eth0 iface eth0 inet static address 192.168.1.10 netmask 255.255.255.0 gateway 192.168.1.1 pre-up ifconfig eth0 hw ether 00:11:22:9f:51:27
When the modification is complete, in Command-line enter
sudo systemctl restart NetworkManager
to make the configuration effective.
Restart to update the network frequency band.
sudo reboot
After connecting to WiFi, the indicated location in the image below will change to the WiFi style.
Enter the WiFi scan command:
sudo nmcli device wifi rescan
If there is an error; Scanning not allowed immediately following previous scan, it means scanning is too frequent. Please wait for a moment before scanning again. Show the scanned WIFI:
sudo nmcli device wifi list
Connect to WiFi using commands:
sudo wifi_connect "SSID" "PASSWD" sudo wifi_connect "JSBPI" "waveshare0755"
Return the following command to indicate success, if there are other problems, follow the error prompts to modify it
If an error: No network with SSID 'WiFi-Test' found.occurs, indicating that the hotspot has not been refreshed and you can execute the following command to rescan:
sudo nmcli device wifi rescan
Wireless networ Soft AP can be understood as WiFi hotspot on your phone.
The wifi of the AP6212 supports both soft AP and Station modes. By default, it runs in Station mode. If you want to use the soft AP function, follow the steps below to configure it.
1. Install hostapd and isc-dhcp-server
sudo apt update sudo apt install hostapd sudo apt install isc-dhcp-server
Configure hostapd and open:
sudo vim /etc/hostapd.conf
For hotspot configuration without a password, please add the following:
interface=wlan0 driver=nl80211 ctrl_interface=/var/run/hostapd ssid=Sunrise channel=6 ieee80211n=1 hw_mode=g ignore_broadcast_ssid=0
For hotspot configuration with a password, please add the following:
interface=wlan0 driver=nl80211 ctrl_interface=/var/run/hostapd ssid=Sunrise channel=6 ieee80211n=1 hw_mode=gignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP wpa_passphrase=12345678
2. To configure isc-dhcp-server terminal, enter
sudo vim /etc/default/isc-dhcp-server
Save and exit, if the network interface is defined and used as below: INTERFACESv4 = "wlan0"
Enter the following content in the terminal:
sudo vim /etc/dhcp/dhcpd.conf
Uncomment the following fields annotation:
authoritative;
Then Enter:
sudo vim /etc/dhcp/dhcpd.conf
Add the following configuration at the end of the file:
subnet 10.5.5.0 netmask 255.255.255.0 { range 10.5.5.100 10.5.5.254; option subnet-mask 255.255.255.0; option routers 10.5.5.1; option broadcast-address 10.5.5.31; default-lease-time 600; max-lease-time 7200;}
3. Stop the wpa_supplicant service and restart wlan0
Note: Starting from this step, it is best to enter the superuser mode
For the first time to enter the Power User, follow the steps below
Set the password for entering the root user:
sudo passwd root
Then enter the password 3 times, set the password, confirm the password and confirm the second time
Enter the root user:
su root / sudo su
Then enter your password
Log out of root user:
su sunrise
Enter the following command to stop the wpa_supplicant service and restart wlan0
systemctl stop wpa_supplicant
4. Start the hostapd service
sudo hostapd -B /etc/hostapd.conf
The following information will be printed:
root@ubuntu:~# sudo hostapd -B /etc/hostapd.conf Configuration file: /etc/hostapd.conf Using interface wlan0 with hwaddr 08:e9:f6:af:18:26 and ssid "sunrise" wlan0: interface state UNINITIALIZED->ENABLED wlan0: AP-ENABLED
5. Configure the IP and subnet for the wireless interface wlan0, ensure consistency with the configuration above.
sudo ifconfig wlan0 10.5.5.1 netmask 255.255.255.0
6. Start the DHCP server, after connectting to the hotspot, an IP address between 10.5.5.100 and 10.5.5.255 will be assign to the client.
sudo systemctl start isc-dhcp-server sudo systemctl enable isc-dhcp-server
Open your phone and connect to the hotspot named 'Sunrise'
7. Switch back to the Station mode
# stop hostapd killall5 -9 hostapd # Clear the address of wlan0 ip addr flush dev wlan0 sleep 0.5 ifconfig wlan0 down sleep 1 ifconfig wlan0 up # restart wpa_supplicant systemctl restart wpa_supplicant # Connect to the hotspot. For detailed instructions, please refer to the previous section'Wireless Network' wifi_connect "JSBPI" "waveshare0755"
DNS (Domain Name Server) is a server that performs domain name and corresponding IP address translation. The development board DNS has been configured with the/etc/systemd/resolved.conf file management, and users can complete the DNS-related configuration by modifying the file, in which users can remove the '#' symbol in the front of the '#DNS':
1. Modify the/etc/systemd/resolved.conf file:
sudo vim /etc/systemd/resolved.conf
Add the DNS server address:
DNS=8.8.8.8 114.114.114.114
2. Enable the new DNS configuration:
sudo systemctl restart systemd-resolved sudo systemctl enable systemd-resolved sudo mv /etc/resolv.conf /etc/resolv.conf.bak sudo ln -s /run/systemd/resolve/resolv.conf /etc/
The development board uses the CPUFreq driver in the Linux kernel to manage the CPU working state. The default state is ondemand mode. At this time, the CPU will dynamically adjust the frequency according to the load to achieve the purpose of reducing power consumption. The user can force the CPU to work at the highest frequency of 1.2GHz by the following command:
sudo bash -c 'echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor'
The development board provides overclocking in the system to increase the maximum frequency of CPU from 1.2GHz to 1.5GHz. The configuration command is as follows:
sudo bash -c 'echo 1 > /sys/devices/system/cpu/cpufreq/boost'
Note that CPU’s overclocking may cause system stability problems. If you encounter stability problems, you need to turn off the overclocking function and the command is as follows:
sudo bash -c 'echo 0 > /sys/devices/system/cpu/cpufreq/boost'
Special Statement: CPU overclocking is limited to developers Geek for experimental use only. Before overclocking, it is necessary to ensure that the chip has fan thermal measures to ensure that the junction temperature of the chip can be kept below 95 degrees Celsius under long CPU operation, so as to avoid chip failure caused by the chip running for a long time under high temperature conditions. CPU overclocking will also cause some unpredictable chip reliability problems, so developers should proceed with caution. The commands for viewing the chip's current junction temperature, the running frequency of CPU, the running frequency and usage rate of BPU are as follows:
sudo hrut_somstat
By adding a command at the end of the sudo vim/etc/rc.local file, you can achieve the function of booting and running the command automatically.
Call the script to complete initialization;
sudo startbt6212.sh
The script being called for initialization has completed the following tasks:
cd /usr/bin *ls #Check if there are dbus-daemon and brcm_patchram_plus files *cd ..#Back to previous *cd lib/bluetooth #Go to directory *ls #Check if there is bluetooth files
Enter the Bluetooth configuration interface in interactive mode
sudo bluetoothctl
Indicates Bluetooth has been recognized
Enter 'show' to view Bluetooth details
Pay attention to the status of Bluetooth Powered, Discovera (searchable)
power on Enables Bluetooth power off Disables Bluetooth discoverable on Makes the device detectable discoverable off Makes the device undetectable scan on Start scanning nearby Bluetooth devices scan off Stop scanning
Pair the corresponding Bluetooth device, note that enter yes according to the prompts
pair [targetMAC] Example: pair 9C:5A:81:3E:97:4C
After successful pairing, use the command to auto-connect the next time
trust [targetMAC] Example: trust 9C:5A:81:3E:97:4C
Bluetoothctl Command Extension
For more information, please visit the BlueZ website:
http://www.bluez.org/
Select the icon in the upper right corner or the menu bar to operate on Bluetooth
Or click Application.
Bluetooth Adapters: used to configure native Bluetooth setting
tooth Manager: used to scan Bluetooth devices and connect
see if the Bluetooth module is recognized: Hciconfig-a See the address of the Bluetooth module: hcitool dev Activate Bluetooth: sudo hciconfig hci0 up In this test, the Bluetooth module is set as the server and does not need a pairing code: hciconfig hci0 noauth
Edit the file and turn on the Bluetooth device:
sudo vi/etc/systemd/system/dbus-org.bluez.service
Find ExecStart =/usr/lib/bluetooth/bluetoothd, change and add as:
ExecStart =/usr/lib/bluetooth/bluetoothd-c; ExecStartPost =/usr/bin/sdptool add SP;
To test the camera, you need to connect the X3 to an HDMI screen
Put the metal side of the cable down and connect it to the camera interface.
The camera interface of the RDK X3 is turned on by default, and it can be used when it is powered on. The AI demo that comes with the system can be used to test the camera, please ensure that the HDMI screen is connected and the preview screen can be displayed.
When Raspberry Pi or Jetson series cameras connectting to RDK X3, Adapter plate needs to be purchased separately.
Open the terminal and enter the following instructions:
export DISPLAY =:0
cd/app/ai_inference/03_mipi_camera_sample Sudo python3 mipi_camera.py
Under normal circumstances, the camera will turn on the preview and display the image and corresponding object recognition results.
Turn on the peripherals on the 40Pin pin (SPI2, I2C0, I2S0, I2S1, UART3)
Enter
sudo srpi-config
Disabled means that this feature is turned off (configured to normal GPIO)
okay means to turn on this function (use special functions)
The on-board green LED light has pins of GPIO26
cd sys/class/gpio
1. Export GPIO105 (BCM26 pin) from kernel space into user space
sudo echo 105 >/sys/class/gpio/export
2. View GPIO18 pins
cd/sys/class/gpio/gpio105
3. Set the mode of GPIO18
sudo echo out > direction # set to output mode sudo echo in > direction # set to input mode
4. Set the status of pins
sudo echo 1 > value # set to high sudo echo 0 > value # set to low
5. Read the status of pins
sudo cat value # return value 0 for low state and 1 for high state
6. Read the pattern of pins
sudo cat direction # returns in as input and out as output
7. Cancel export
cd sudo echo 105 > /sys/class/gpio/unexport
RDK X3 has installed Python and Hobot.GPIO by default, you can import the module and view its version information.
The GPIO you are trying to use may already be used outside the current application. In this case, the GPIO library will warn you. It will also warn you if you try to clean before setting the mode and channel. To disable warnings, please call:
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
BOARD (the pin number of the 40 pin GPIO header): The serial number of physical pin, the serial number that can be seen directly on the silk screen on the hardware, is physically exactly one-to-one correspondence.
BCM (the Broadcom SoC GPIO numbers): BCM is named according to the GPIO rules of Broadcom SoC.
CVM uses a string instead of a number, corresponding to the signal name of the CVM/CVB connector.
The number corresponding to the SOC is the GPIO pin serial number of Horizon Sunrise X3M chip, which corresponds one-to-one with the chip data manual.
The GPIO channel must be set up before it can be used as an input or output. To configure a channel as an input, call:
# (where the channel is based on the pin numbering pattern discussed above) GPIO.setup (channel, GPIO.IN)
Setting the output:
GPIO.setup (channel, GPIO.OUT)
You can also specify an initial value for the output channel:
GPIO.setup (channel, GPIO.OUT, initial = GPIO.HIGH);
When a channel is set to output, multiple channels can be set at the same time:
# Add as many channels as needed. You can also use tuples:(18, 12, 13) channels = [18, 12, 13] GPIO.setup (channels, GPIO)
GPIO.output (channel, state)
state can be GPIO.LOW or GPIO.HIGH.
GPIO.input (channel)
It returns either 0 or 1. 0 stands for GPIO.LOW and 1 stands for GPIO.HIGH.
Release all pins
GPIO.cleanup ()
Only clear specific channels
# Clear a single channel GPIO.cleanup (channel) # Clear a set of channels GPIO.cleanup ((channel1, channel2)) GPIO.cleanup ([channel1, channel2])
GPIO.gpio _ function (channel) The function returns either IN or OUT.
This function blocks the calling thread until a supplied edge is detected.
GPIO.wait_for_edge (channel, GPIO.RISING)
After this function is called, skim directly, and need to be used with other functions
GPIO.add_event_detect(channel, GPIO.RISING) GPIO.RISING: rising edge; GPIO.FALLING: falling edge; GPIO.BOTH: Edge (up + down);
Set the time of wait timeout
# Timeout is in milliseconds GPIO.wait_for_edge(channel, GPIO.RISING, timeout=500)
The function returns the channel on which an edge was detected, or None if a timeout occurred.
This function can be used to periodically check whether an event has occurred since the last call.
GPIO.add_event_detect (channel, GPIO.RISING) If GPIO.event_detected (channel): print ("Rising edge event detected")
This functionality can be used to run a second thread for the callback function. Therefore, callback functions can run concurrently with your main program in response to edge events.
# Define callback function Def callback_fn (channel): print ("Callback called from channel s" channel) # Add rising edge detection GPIO.add_event_detect (channel, GPIO.RISING, callback=callback_fn)
You can also add multiple callbacks if you want, noting that the two callback functions run sequentially
Def callback_one (channel): print ("First Callback") Def callback_two (channel): print ("Second Callback") GPIO.add_event_detect (channel, GPIO.RISING) GPIO.add_event_callback (channel, callback_one) GPIO.add_event_callback (channel, callback_two)
# De-shaking time set in milliseconds GPIO.add_event_detect (channel, GPIO.RISING, callback=callback_fn, bouncetime = 200)
Edge detection can be removed if it is no longer required
GPIO.remove_event_detect (channel)
The RDK X3's 40 Pin has two PWM output pins:
PWM0: 33 (BOARD), 13 (BCM), 4 (x3 pin number);
PWM1: 32 (BOARD), 12 (BCM), 25 (x3 pin number)
Export PWM0 to User Space
echo 0 >/sys/class/pwm/pwmchip0/export
Time (ns) to set PWM for one cycle
Note: This time range for PWM waves is recommended from 50 to 21000
echo 20000 >/sys/class/pwm/pwmchip0/pwm0/period
Duty cycle setting, which is the time when the PWM is on (default is high)
echo 10000 >/sys/class/pwm/pwmchip0/pwm0/duty _ cycle # In the pwm signal, whether the low level is turned on or the high level is turned on, here it is set to the normal polarity, that is, high is on. # echo "normal" >/sys/class/pwm/pwmchip0/pwm0/polarity
Enable PWM Wave to output
echo 1 >/sys/class/pwm/pwmchip0/pwm0/enable
Disabling PWM Wave to output
echo 0 >/sys/class/pwm/pwmchip0/pwm0/enable
Cancel Export
echo 0 >/sys/class/pwm/pwmchip0/unexpor
Similar to PWM0
pwmchip3 + PWM1 = PWM4; echo 1 >/sys/class/pwm/pwmchip3/export echo 20000 >/sys/class/pwm/pwmchip3/pwm1/period echo 10000 >/sys/class/pwm/pwmchip3/pwm1/duty _ cycle echo 1 >/sys/class/pwm/pwmchip3/pwm1/enable echo 0 >/sys/class/pwm/pwmchip3/pwm1/enable echo 1 >/sys/class/pwm/pwmchip3/unexport
Properties under pwmchip0/3 directory
device export: export the pwm channel, which must be exported before use npwm: There are several PWM outputs under the PWM controller power subsystem uevent unexport: Cancels exporting PWM channels
Properties under pwm* directory
Period period Duty cycle duty _ cycle polarity polarity Period: in nanoseconds, 10000000000 ns = 1s Duty cycle: The ratio of high and low levels Polarity: whether the low level is the on state or the high level is the on state, generally normal, that is, the high level is the on state (inverted, normal)
The Hobot.GPIO library only supports PWM on pins with additional hardware PWM controllers. Unlike the RPi.GPIO library, the Hobot.GPIO library does not implement software simulation PWM, and the RDK X3 supports 2 PWM channels.
Import Hotbot.GPIO
sunrise@ubuntu:~$ sudo python3 Python 3.8.10 (default, Mar 15 2022, 12:22:08) Type "help", "copyright", "credits" or "license" for more information. >>> import Hobot.GPIO as GPIO >>> GPIO.VERSION '0.0.2' >>> GPIO.model 'X3PI'
Config:
Configure the method of pin numbering: GPIO.setmode(GPIO.BOARD) Configure the output pin and the frequency of the output PWM (48KHz ~ 192MHz) p = GPIO.PWM(output_pin, 48000) Configure initial duty cycle (0-100) p.start(val) Dynamicly adjust duty cycle (0-100) p.ChangeDutyCycle(val) Stop outputting PWM waves p.stop() Clean pin occupancy GPIO.cleanup()
Run Command:
sudo python3 test_PWM.py
Description of the test: Open the PWM channel specified by output_pin, the initial duty cycle is 25%, first increase the duty cycle by 5% every 0.25 seconds, and then reduce the duty cycle by 5% every 0.25 seconds after reaching 100%. When the waveform is normally output, you can use an oscilloscope or the logic analyzer to measure the output signal and observe the waveform.
RDK X3 enables UART3 by default on 40PIN, physical pin numbers 8 and 10, IO voltage 3.3 V.
Note: Only serial port 3 (/dev/ttyS3) exists on the 40Pin interface; serial port 1 (/dev/ttyS0) is the system debug port, and it is not recommended to test it until its role is understood.
View the properties of serial port :
sudo stty -F /dev/ttyS3
View all parameters
sudo stty -F /dev/ttyS3 -a
Set the baud rate of the serial port(default is 9600):
Sudo stty-F/dev/ttyS3 speed 115200
115200 baud rate, 8 data bits, 1 stop bit and no check bit
Sudo stty-F/dev/ttyS3 speed 115200 cs8-parenb-cstopb
Using serial port to send data:
sudo echo "afafsadf" >/dev/ttyS3
Using serial port to receive data (will add two characters to the received data and send it back):
sudo cat/dev/ttyS3
Extension: Read the data and save to a txt text file:
sudo cat /dev/ttyS3 > ttyS3_output.txt
Send data, then start receiving data
sudo echo "asdasdasdas" >/dev/ttyS3 cat/dev/ttyS3
Remove the serial port echo:
Stty-F/dev/ttyS3-ech0
After executing this command, the serial port will only print out when it detects a newline.
When reading serial port data, the number of lines to read is specified. For example, specify the first five columns of data.
cat/dev/ttyS3 head-n 5
Loopback test:
Connect TXD and RXD on the hardware, that is, connect pins 8 and 10, and then run the test program to perform write and read operations. The expected result is that the read data is exactly the same as the written data.
Run the sample program:
Sudo python3 test_serial.py
The RDK X3 leads out the SPI2 bus of the Horizon Sunrise X3 chip on the physical pins 19, 21, 23, and 24 on the 40Pin, supports one chip selection, and the IO voltage is 3.3 V.
Download library:
sudo apt-get update sudo apt-get install python-pip pip install spidev
# Import spidev module import spidev # Create an object of the spidev class to access spidev-based Python functions spi = spidev.SpiDev (); # Open spi bus handle spi.open (int (spi _ bus), int (spi _ device)) # int (spi _ bus): Sets the bus number of spi (0, 1, 2) # int (spi _ device): Set selection (0, 1) # Set the frequency of spi to 12MHz Spi.max _ speed _ hz = 120000000 # Send a few data and read back is also a few data resp = spi.xfer2 ([0x55, 0xAA]) # Release corresponding SPI spi.close () spi.readbytes (n) # reads n bytes from a spi device spi.writebytes (list of values) # writes a list of data to a spi device Spi.writebytes 2 (list of values) # accepts large lists and supports numpy byte arrays spi.xfer (send_list) # transfer data spi.xfer2 (send_list) # transfer data, list data cannot exceed 4096 bytes spi.xfer3 (send_list) # accepts large lists and supports numpy byte arrays
Max_speed_hz # the maximum frequency of communication clock mode # spi mode 0b00~0b11; No_CS # sets whether the SPI_NO_CS flag uses CS threewire # shared SI/SO signal lsbfirst # guess low is priority loop cshigh # guesses that in CS high is effective; bits_per_word
Sudo i2cdetect-y-r 1 Sudo i2cdetect-y-r 0
This command will start the I2C detection circuit, and the devices that are actually connected to the circuit will be displayed, but the devices that are not linked to the circuit will not be displayed, and the 7-bit I2C address will be detected.
sudo ls/dev/i2c-*
List all open I2C. RDK X3 has only two I2C hardware
/dev/i2c-0/dev/i2c-1
View the transfer rate for I2C
sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
Modify the baud rate
sudo nano/boot/config.txt Add a line with dtparam=i2c1_baudrate=50000 (assuming we set it to 50khz). sudo reboot
To get the current baud rate: sudo cat/sys/module/i2c _ bcm2708/parameters/baudrate
Set baud rate:
sudo emacs/etc/modprobe.d/custom.conf Adding a row of settings: Options i2c_bcm2708 baudrate = 100000 After setting, a restart is required to take effect.
Raspberry Pi Library
import smbus Used to confirm which bus to use: Use IIC bus 1 self.i2c = smbus.SMBus (1)
pip install smbus2
Call: import smbus Call the IIC1 of Raspberry Pi self.i2c = smbus.SMBus (1) Set the address of Raspberry Pi self.address = address; Read a single byte from the device. read_byte(i2c_addr,force=None) Read a single byte from the specified register. read_byte_data(i2c_addr,register,force=None) Read a block of up to 32 bytes from the specified register. read_block_data(i2c_addr,register,force=None) Read a block of byte data from a specified register read_i2c_block_data(i2c_addr,register,length,force=None) Read a single word (2 bytes) from the specified register read_word_data(i2c_addr,register,force=None) Write a single byte to the device. write_byte(i2c_addr,value,force=None) Write a byte to the specified register. write_byte_data(i2c_addr,register,value,force=None) Write a block of byte data to the specified register. write_block_data(i2c_addr,register,data,force=None) The data sent is in the following format:
Address, the number of register, the quantity of data , data Write a block of byte data to the specified register. write_i2c_block_data(i2c_addr,register,data,force=None) Write a byte to the specified register. write_word_data(i2c_addr,register,value,force=None) Perform fast transactions. If unsuccessful, throw IOError. write_quick(i2c_addr,force=None) Cancel the use/occupation of IIC close ()
Access I2C devices using the SMBus Library
The I2C bus can be accessed in a Python script using the SMBus library on RDK X3. SMBus is a subset of I2C interfaces. The Python library of SMBus can be used to communicate with I2C-based devices.
Run the following command to install the SMBus library on RDK X3:
sudo apt-get install python-smbus
In a Python script, you can import the SMBus library with the following statement:
import smbus
After importing the SMBus library, you must create an object of the SMBus class using the SMBus()method. The SMBus()method takes the port number of I2C as a parameter and must be used in an assignment statement to create an SMBus object. It has the following syntax:
<Object_name> = smbus.SMBus(I2C_Port_Number)
Here is a working example of creating an SMBus object:
i2c-bus = smbus.SMBus (1)
Note: To use the latest SMBus2 library, install it using pip by running the following command:
pip install smbus2
In a Python script, you can import the SMBus2 library with the following statement:
from smbus2 import SMBus, i2c_msg
You can create an object of the SMBus class using the smbus2.SMBus() method, as follows:
i2c-bus = smbus2.SMBus (1)
The smBus2 library has two classes--SMBus and i2c_msg. The class of SMBus supports the following methods:
SMBus.SMBus ()/smbus2. SMBus () -Creates an SMBus object in a Python script. open (bus) -Opens the given i2c bus. close () -closes the I2C connection.
Serial data from an I2C slave can be read in bytes, words, or blocks of bytes. In some I2C slave devices, the master device needs to access serial data from a specific register. The following methods for reading serial I2C data from a slave device are available in the SMBus2 library:
read_byte(i2c_addr,force=None) -reads a single byte from the device. read_byte_data(i2c_addr,register,force=None) -reads a single byte from the specified register. read_block_data(i2c_addr,register,force=None -reads a block of up to 32 bytes from a given register. read_i2c_block_data(i2c_addr,register,length,force=None) -reads a block of byte data from a given register. read_word_data(i2c_addr,register,force=None) -reads a single word (2 bytes) from a given register.
Similarly, data can be written to the I2C slave in bytes, words, or blocks of bytes. In some I2C slave devices, data must be written to specific registers. The following methods for writing serial I2C data from a slave device are available in the SMBus2 library:
write_byte(i2c_addr,value,force=None) -Writes a single byte to the device. write_byte_data(i2c_addr,register,value,force=None) -Writes a byte to a given register. write_block_data(i2c_addr,register,data,force=None) -Writes a block of byte data to a given register. write_i2c_block_data(i2c_addr,register,data,force=None) -Writes a block of byte data to a given register. write_word_data(i2c_addr,register,value,force=None) -Writes a byte to the given register. write_quick(i2c_addr,force=None) -Performs a fast transaction. If unsuccessful, throw IOError.
The following methods can be used to manage the processes of SMBus and combine read/write operations of I2C bus:
process_call(i2c_addr,register,value,force=None) -Executes an SMBus process call, sends a 16-bit value and receives a 16-bit response block_process_call(i2c_addr,register,data,force=None) -Sends a variable-size data block and receives another variable-size response. i2c_rdwr(*i2c_msgs) -Combines a series of i2c reads and writes in a single transaction.
RDK X3 provides a USB interface. Through USB HUB and hardware switching circuit, it expands one USB3.0 Type A (interface 6), two USB3.0 Type A (interface 5), and one Micro USB 2.0 (interface 4).
Type of interface | Sequence number of interface | Number of Interfaces | Interface description |
---|---|---|---|
Micro USB2.0 | Interface 4 | 1 | USB Device mode, which is used to connect the host computer to realize ADB, Fastboot, UVC and other functions |
USB 2.0 Type A | Interface 4 | 2 | USB Host mode for accessing USB 2.0 peripherals |
USB 3.0 Type A | Interface 6 | 1 | USB Host mode for accessing USB 3.0 peripherals |
The development board realizes the automatic switching of USB master-slave mode through the hardware circuit, and the user does not need to care about the USB master-slave mode, but only needs to connect the device according to the logic in the above table.
It should be noted that the development board is prohibited from using USB Host and Device interfaces at the same time, otherwise it will cause abnormal functions.
The directory of USB disk mount is /media
sda1: First USB disk mount path
sdb1: Second USB disk mount path
sdcard1: RDK X3 itself system disk path
The USB 2.0/3.0 Type A interface of the development board supports the function of the USB serial port adapter board, which can automatically detect the access of the USB serial port adapter board and create a device node /dev/ttyUSB* or /dev/ttyACM* (the asterisk represents the number starting from 0). User can refer to Serial Portchapter to use the serial port.
Enter in terminal, check the changes before and after insertion, and detect whether the camera is recognized
ls/dev/video *
Enter in terminal, check if the camera is working properly
Sudo v4l2-ctl-d/dev/video8 --all
Desktop VNC Installation First
Install the xfce4 desktop with the following command:
sudo apt update sudo apt install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Install the VNC server with the following command
sudo apt install tightvncserver
After the installation is complete, check if the vnc service has started using the following command:
ps -ef | grep vnc
If it starts normally, you can see that port 5900 is being monitored
Log on to the VNC host and install ffmpeg
sudo apt install ffmpeg
Before and after connecting the USB camera, use the following command to view the current video device and determine the device number of the camera:
ls/dev/video*
Enter command to start camera
sudo ffplay/dev/video8
Monday-Friday (9:30-6:30) Saturday (9:30-5:30)
Email: services01@spotpear.com