Jump to content
Electronics-Lab.com Community

Forlinx

Members
  • Posts

    81
  • Joined

  • Last visited

  • Days Won

    1

Forlinx last won the day on March 21

Forlinx had the most liked content!

2 Followers

Contact Methods

  • Website URL
    https://www.forlinx.net/

Recent Profile Visitors

5,108 profile views

Forlinx's Achievements

  1. Note: Operate under the root user by default. 1. Qemu and Debootstrap Installation Since a Debian file system is built on Ubuntu, these two tools can be installed directly using the apt-get command. The commands are as follows: sudo apt-get install binfmt-support qemu qemu-user-static debootstrap 2. Extracting Debian File System Use the debootstrap command to extract the file system. Execute the following command to retrieve the file system from the Debian mirror: mkdir /home/forlinx/debian sudo debootstrap --arch=armhf --foreign buster root https://mirrors.tuna.tsinghua.edu.cn/debian/ Explanation of command parameters: arch:Specify CPU architecture buster:Debian version (currently 10) foreign:Use when initializing unpacking in a different architecture than the host root:The folder where the file system is stored https: // mirrors.tuna.tsinghua.edu.cn / debian /:Download source Extraction may take around 10 minutes. Please be patient. Successful extraction reveals the Linux directory tree. If extraction fails, try multiple attempts or switch networks. 3. Perfecting the File System Since the operation is conducted on an X86 virtual machine, QEMU needs to be used to simulate an ARM environment to improve the file system. a.To copy qemu-arm-static into the newly built base system, use the following command: cd root sudo cp /usr/bin/qemu-arm-static usr/bin cd .. b.Initialize the file system. Execute the following command: sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C chroot root debootstrap/debootstrap --second-stage c.Use the chroot root command to initialize file system chroot root d.Use the command to create the following echo "proc /proc proc defaults 0 0" >> etc/fstab mkdir -p usr/share/man/man1/ mknod dev/console c 5 1 e.To update the download sources, use the command vi /etc/apt/sources.list to open the source.list file and replace the contents with the following: deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free #deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free deb http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free #deb-src http://mirrors.ustc.edu.cn/debian stable-updates main contrib non-free #deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free #deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free Then save and exit. Use the command apt-get update to update the source. If updating the download source reports an error,use the date command to modify the system time to solve the problem. f.Use the command apt-get install vim to install some necessary software apt-get install vim apt-get install sudo apt-get install dpkg apt-get install bzip2 apt-get install net-tools apt-get install ntpdate g.Create a new user with the command adduser forlinx, then enter the password adduser forlinx h.Set the root password, use the command passwd root, and set the password to forlinx. passwd root i.To set up Ethernet, enter the following command: vi /etc/network/interfaces As follows: #/etc/network/interfaces -- configuration file for ifup(8), ifdown(8) #The loopback interface auto lo iface lo inet loopback #Wireless interfaces iface wlan0 inet dhcp wireless_mode managed wireless_essid any wpa-driver wext wpa-conf /etc/wpa_supplicant.conf iface atml0 inet dhcp #Wired or wireless interfaces auto eth0 #iface eth0 inet dhcp #iface eth1 inet dhcp iface eth0 inet static address 192.168.0.232 netmask 255.255.255.0 gateway 192.168.0.1 broadcast 192.168.0.255 auto eth1 iface eth1 inet static address 192.168.1.232 netmask 255.255.255.0 gateway 192.168.1.1 broadcast 192.168.1.255 #Ethernet/RNDIS gadget (g_ether) #... or on host side, usbnet and random hwaddr iface usb0 inet static address 192.168.7.2 netmask 255.255.255.0 network 192.168.7.0 gateway 192.168.7.1 #Bluetooth networking iface bnep0 inet dhcp Add a network reboot cd etc/rc5.d/ vi /etc/rc5.d/S02net_restart.sh As follows: #!/bin/bash echo "network restarting!" /etc/init.d/networking restart echo "network restart complete!" j.Modify host name vi /etc/hostname Modify to: Debian k.Modify the system time zone cp /usr/share/zoneinfo/Hongkong /etc/localtime ntpdate ntp.aliyun.com Take East Zone 8 as an example, other time zone files are also included under this path. l.Since 6ull is weak, skip installing the desktop and go straight to using the exit m.Just exit the qemu environment exit 4. Package the file system Go to the debian filesystem directory and use the command tar - cjf rootfs.tar.bz2. / * to package it. 5. Burn-in verification Place the packaged file system into the burner, while keeping the other images as they are and only replacing the file system. Then proceed with the burn-in test. 6. Debian command a.Check Debian version cat /etc/issue b.Install wget apt-get install wget Solve ERROR: The certificate of ‘packages.microsoft.com’ is not trusted. Report error,then add -- no - check - certificate after the command. Appendix: Installation Method for .net on Linux 1. Download the .net compressed package from the official website https://dotnet.microsoft.com/en-us/download/dotnet/6.0 2. Enter the /home/root directory cd /home/root 3. Install script settings vi install.sh The script is as follows: #!/bin/sh DOTNET_FILE=dotnet-sdk-6.0.402-linux-arm.tar.gz export DOTNET_ROOT=$(pwd)/.dotnet mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT" export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools DOTNET_FILE is the name of the downloaded zip file. 4. Execute the installation chmod u+x install.sh ./install.sh 5. Modify environment variables vi /etc/profile As follows: export DOTNET_ROOT=$HOME/.dotnet export PATH=$PATH:$HOME/.dotnet:$HOME/.dotnet/tools 6. Test Enter the following command: dotnet new console -o sample1 cd sample1 dotnet run The following output should be seen: Hello World!
  2. 1. Product Description Vending machines, combining modern technology with the idea of convenient shopping, have become essential in our lives. It breaks through the constraints of time and space, providing us with round-the-clock uninterrupted product purchasing services. Whether in busy transportation hubs or quiet residential areas, you can always find its presence. 2. Components: Body Compartment: Made from high-strength, corrosion-resistant metal materials to ensure the stability and durability of the vending machine. The warehouse's interior is well-designed and can be adjusted according to the size of the goods to maximize the use of storage space. Payment System: Integrated with multiple payment methods including coins, bills, card swiping, and mobile payments, satisfying various consumer payment needs. Display and operation: HD touchscreen shows product information and purchase process, simplifying steps to enhance user experience. Product Delivery System: Uses precise mechanics and sensors for accurate, fast delivery to the outlet after payment. Communication Management System: Enables real-time monitoring, sales data analysis, and remote fault diagnosis and repair of vending machines via wireless network. Business Logic Topology The vending machine's main control system acts as its operational core, akin to its "brain", overseeing and coordinating each module's functions. With the ongoing development of IoT, big data, and AI, automation has become an inevitable trend in the vending machine industry. This has led to new demands for the main control systems, focusing on: Core Controller: It is essential to choose a stable, reliable, and high-performance core controller to ensure the overall logic control and data processing capabilities of vending machines. Device Stability: It requires 24/7 uninterrupted operation, necessitating high stability and durability in both hardware and software. Specifically, the software system should have fault self-check and automatic recovery capabilities. Scalability and Compatibility: To meet various scenarios and demands, the main control system of vending machines needs to be scalable. As products evolve, the main control system should be compatible with new hardware and software standards. Payment Security: As payment methods diversify, ensuring the security of the payment process has become increasingly important. Vending machines need to guard against various security threats, such as data breaches and fraudulent activities. AI Integration: Vending machines need to have intelligent recognition capabilities and data analysis abilities to recommend products based on users' purchasing preferences. FET3568-C system on module(SoM) from Forlinx Embedded Systems offers high performance, low power consumption, and rich functionality, making it ideal for vending machines for these reasons: Powerful Performance: FET3568-C SoM is based on the Rockchip RK3568 processor, which features a quad-core 64-bit Cortex-A55 architecture with a clock speed of up to 2.0GHz. It supports lightweight edge AI computing and delivers strong computational and processing capabilities. Such performance meets the high demands of logic control and data processing for vending machine control systems, ensuring efficient and stable operation of the vending machines. Rich Interfaces and Expandability: The FET3568-C SoM offers 3 x PCIe slots, 4 x USB ports, 3 x SATA3.0 controllers, and 2 x Gigabit Ethernet ports. It supports 5 x display interfaces including HDMI2.0, eDP, LVDS, RGB Parallel, and MIPI-DSI, with up to three simultaneous display outputs. These interfaces provide great convenience for expanding the functionality of vending machines, enabling customized development to meet various scenarios and requirements. Multi-OS Support: FET3568-C SoM supports multiple operating systems including Linux, Android 11, Ubuntu, and Debian 11. This flexibility allows developers to choose the most suitable operating system according to actual needs, thereby simplifying the software development process and improving development efficiency. Meanwhile, Forlinx Embedded has made numerous optimizations in software, such as introducing a 4G watchdog process. This design ensures that the 4G communication function can automatically recover after a disconnection, significantly improving the stability and reliability of the vending machine's network communication. Advanced Security: In terms of security, the FET3568-C hardware can integrate encryption chips and trusted root modules. These hardware-level security measures provide solid protection for system information security. The ability to verify software integrity and authenticity from the hardware level effectively prevents the intrusion of malicious software and the risk of system tampering. High Stability: FET3568-C has undergone rigorous environmental temperature testing, stress testing, and long-term stability operation testing, ensuring stable and reliable performance in various terminals and operational environments. This is crucial for vending machines that require 24/7 uninterrupted operation, as it can significantly reduce failure rates and enhance user experience. In summary, the FET3568-C SoM not only features robust performance and stability, but also offers flexible operating system options, optimized software design, rich interfaces, and powerful expandability. These features make it an ideal choice for vending machine control solutions, capable of meeting the evolving needs of the industry.
  3. Introduction to the U-Boot boot process U-Boot Boot Process Stage 1 Main process Partial Hardware Initialization -> Load Full U-Boot into RAM -> Jump to Stage 2 Entry for Execution. Files Used Mainly in Stage 1 (Non-Open Source Scenario): start.S (Hardware Initialization, watchdog, interrupts, clock configurations) lowlevel_init.S (RAM (DDR) initialization, U-Boot code loading, stack setup, BSS clearing, jump to U-Boot Stage 2 U-Boot Boot Process Stage 2 Stage 2 involves further hardware initialization by U-Boot, configuring command line parameters and environment variables, and transitioning to the kernel. The main documents used are: board.c file: Typically, our own files are located in the board/forlinx/ directory. main.c file: Located in the common directory Main function Some of the more important initialisation functions are as follows: 1.''setup_mon_len'' function: Set the ''gd'' structure's ''mon_len'' member variable, representing the length of the entire code; 2.''initf_malloc'' function: Sets the ''gd '' structure's member variables related to ''malloc''; 3.''board_early_init_f''function; 4.To initialize the IO configuration of the serial port, defined in the board/freescale/mx6ull_toto/mx6ull_toto.cfile; 5.''timer_init'' function: Initialize the kernel timer to provide clock ticks for U-Boot, defined in the ''arch/arm/imxcommon/timer.c''file; 6.''get_clocks'' function: Retrieve the clock for the SD card peripheral (sdhc_clk), defined in the arch/arm/imxcommon/speed.c file; 7.''init_baud_rate'' function: Initialize the baud rate, defined in the ''common/board_f.c'' file. 8.''serial_init'' function: Initialize serial communication settings, defined in the''drivers/serial/serial.c''file; 9.''console_init_f'' function: Initialize the console, defined in the ''common/console.c'' file; 10.''display_options'' function: Print U-Boot version information and compilation details, defined in the lib/display_options.c file; 11.''print_cpuinfo'' function: To display CPU information and the main clock frequency, defined in the arch/arm/imx-common/cpu.c file; 12.''show_board_info'' function: Print development board information, defined in the common/board _ info.c file; 13.''init_func_i2c'' function: To initialize I2C; 14.''announce_dram_init'' function: This function is simple, it outputs the string "DRAM:"; 15.''dram_init'' function: Doesn't actually initialize DDR but rather sets the value of gd->ram_size. Current U-boot startup print information U-Boot SPL 2021.01-gd1345267-dirty (Jul 08 2023 - 08:00:49 +0800) SYSFW ABI: 3.1 (firmware rev 0x0015 '21.5.1--w2022.07-am62x (Terrifi') am625_init: board_init_f done(counter=1) SPL initial stack usage: 13768 bytes i2c_write: error waiting for data ACK (status=0x116) i2c_write: error waiting for data ACK (status=0x116) Auth Success! normal mode am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 Trying to boot from MMC1 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 Loading Environment from MMC... MMC: block number 0x3500 exceeds max(0x2000) *** Warning - !read failed, using default environment am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 init_env from device 9 not supported! Starting ATF on ARM64 core... NOTICE: BL31: v2.5(release):v0.6-6-gd489c56b NOTICE: BL31: Built : 15:08:18, Jun 26 2023 U-Boot SPL 2021.01-gd1345267-dirty (Jul 08 2023 - 08:00:56 +0800) SYSFW ABI: 3.1 (firmware rev 0x0015 '21.5.1--w2022.07-am62x (Terrifi') am625_init: board_init_f done am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 Trying to boot from MMC1 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 U-Boot 2021.01-gd1345267-dirty (Jul 08 2023 - 08:00:56 +0800) SoC: AM62X SR1.0 Model: Forlinx OK62xx-C board DRAM: 2 GiB MMC: mmc@fa10000: 0, mmc@fa00000: 1 Loading Environment from MMC... OK In: serial@2800000 Out: serial@2800000 Err: serial@2800000 52334 bytes read in 5 ms (10 MiB/s) Saving Environment to MMC... Writing to MMC(0)... OK Net: eth0: ethernet@8000000 Autoboot in 1 seconds switch to partitions #0, OK mmc0(part 0) is current device SD/MMC found on device 0 Failed to load 'boot.scr' Failed to load 'uEnv.txt' MMC: no card present 20208128 bytes read in 111 ms (173.6 MiB/s) 52334 bytes read in 5 ms (10 MiB/s) 4595 bytes read in 5 ms (897.5 KiB/s) ## Flattened Device Tree blob at 88000000 Booting using the fdt blob at 0x88000000 Loading Device Tree to 000000008fef0000, end 000000008fffffff ... OK U-boot shortens 2 seconds of boot time by disabling USB and Ethernet via defconfig.Modify the autoboot.c file to hardcode bootdelay=0, reducing it by 1 second. diff --git a/common/autoboot.c b/common/autoboot.c index e628baff..685779b6 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -328,10 +328,11 @@ const char *bootdelay_process(void) int bootdelay; bootcount_inc(); - +/* s = env_get("bootdelay"); bootdelay = s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY; - +*/ +bootdelay = 0; if (IS_ENABLED(CONFIG_OF_CONTROL)) bootdelay = fdtdec_get_config_int(gd->fdt_blob, "bootdelay", bootdelay); Comment out the function that reads uEnv.txt file. Remove useless printed information. Cropped Log 16:33:00:290 U-Boot SPL 2021.01-gd1345267-dirty (Jul 25 2023 - 16:14:18 +0800) 16:33:00:303 SYSFW ABI: 3.1 (firmware rev 0x0015 '21.5.1--w2022.07-am62x (Terrifi') 16:33:00:351 am625_init: board_init_f done(counter=1) 16:33:00:351 SPL initial stack usage: 13768 bytes 16:33:01:527 i2c_write: error waiting for data ACK (status=0x116) 16:33:01:527 i2c_write: error waiting for data ACK (status=0x116) 16:33:01:527 Auth Success! 16:33:01:544 normal mode 16:33:01:544 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 16:33:01:544 Trying to boot from MMC1 16:33:01:729 Loading Environment from MMC... MMC: block number 0x3500 exceeds max(0x2000) 16:33:01:749 *** Warning - !read failed, using default environment 16:33:01:749 16:33:01:776 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 16:33:01:795 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 16:33:01:795 init_env from device 9 not supported! 16:33:01:795 Starting ATF on ARM64 core... 16:33:01:795 16:33:01:812 NOTICE: BL31: v2.5(release):v0.6-6-gd489c56b 16:33:01:812 NOTICE: BL31: Built : 15:08:18, Jun 26 2023 16:33:02:990 16:33:02:997 U-Boot SPL 2021.01-gd1345267-dirty (Jul 25 2023 - 16:14:43 +0800) 16:33:02:997 SYSFW ABI: 3.1 (firmware rev 0x0015 '21.5.1--w2022.07-am62x (Terrifi') 16:33:02:997 am625_init: board_init_f done 16:33:03:022 am625_init: spl_boot_device: devstat = 0x1843 bootmedia = 0x9 bootindex = 0 16:33:03:022 Trying to boot from MMC1 16:33:04:507 16:33:04:507 16:33:04:507 U-Boot 2021.01-gd1345267-dirty (Jul 25 2023 - 16:14:43 +0800) 16:33:04:507 16:33:04:507 SoC: AM62X SR1.0 16:33:04:508 Model: Forlinx OK62xx-C board 16:33:04:530 DRAM: 1 GiB 16:33:04:593 MMC: mmc@fa10000: 0, mmc@fa00000: 1 16:33:04:640 Loading Environment from MMC... OK 16:33:04:640 In: serial@2800000 16:33:04:640 Out: serial@2800000 16:33:04:640 Err: serial@2800000 16:33:04:654 51701 bytes read in 6 ms (8.2 MiB/s) 16:33:04:654 using kernel dtb display control 16:33:04:685 Saving Environment to MMC... Writing to MMC(0)... OK 16:33:04:701 Net: eth0: ethernet@8000000 16:33:04:701 Autoboot in 0 seconds 16:33:04:748 switch to partitions #0, OK 16:33:04:748 mmc0(part 0) is current device 16:33:04:795 SD/MMC found on device 0 16:33:05:104 3229642 bytes read in 141 ms (21.8 MiB/s) 16:33:05:228 20075008 bytes read in 111 ms (172.5 MiB/s) 16:33:05:228 51701 bytes read in 6 ms (8.2 MiB/s) 16:33:05:244 4575 bytes read in 5 ms (893.6 KiB/s) 16:33:05:285 ## Flattened Device Tree blob at 88000000 16:33:05:285 Booting using the fdt blob at 0x88000000 16:33:05:306 Loading Device Tree to 000000008fef0000, end 000000008fffffff ... OK 16:33:05:306 16:33:05:306 Starting kernel ...
  4. 1. RTC Description 1.1 What's RTC? RTC (Real Time Clock): It is an electronic device that functions like a clock to output real-world time. RTC Overview: The RTC is a 32-bit timer that increments every second, functioning like a clock. Date and time can be modified by adjusting the timer value. To ensure that the RTC time is not lost during power outages, a small battery is usually connected separately to provide power to the RTC. Once the small battery is removed, the RTC will lose the time after a power outage. However, the time in the lower right corner of the computer and the time seen with date under Linux are not RTC time. During system operation, a high-precision register on the chip serves as the system time reference. To avoid drift over extended system operation and prevent time loss after power failure, each time the system starts up, it retrieves the time from the RTC to set as the system time. 1.2 Difference Between Internal and External RTC External RTC advantages: Low power consumption Minimal deviation Therefore, an external RTC (Real-Time Clock) is generally used. 2. Unix Time Stamp Unix timestamp is defined as the number of seconds elapsed since 00:00:00 coordinated Universal Time (UTC) on January 1, 1970, excluding leap seconds. The timestamp is stored in a seconds counter, which is a 32-bit/64-bit integer variable. The timestamp is stored in a 32-bit/64-bit integer seconds counter, uniform globally across all time zones, with local times derived from applying offsets to this counter. 3. Common operation 3.1 Date The "date" command can read/write the current system time and also display the time zone. Common operations: View time: View timezone Set time: 3.2 Timezone modification The time zone file is/etc/localtime. When the time zone needs to be modified, only the corresponding time zone file needs to be linked to/etc/localtime. 3.3 hwclock Read RTC time Write in time Note: If UTC is enabled and the time zone is modified, hwclock -wu should be usedSync system time to RTC Sync RTC time to system 4. Sync RTC to system At system startup, the RTC time is read and used as the system time. Using the example of the imx6ull processor, after powering on, the operations related to RTC are as follows: There are the followings in the /etc/rcS.d/S55bootmisc.sh: The main functions of this part are: Call the/etc/init.d/hwclock.sh with the parameter start Read the timestamp /etc/timestamp and compare it to the existing system time, if the timestamp is further back, write the time in the timestamp to the system via date, and then call /etc/init.d/hwclock.sh again with the parameter stop; The followings are in the /etc/init.d/hwclock.sh: ...... [ "$UTC" = "yes" ] && tz="--utc" || tz="--localtime" case "$1" in start) ...... if [ "$HWCLOCKACCESS" != no ] then if [ -z "$TZ" ] then hwclock $tz --hctosys else TZ="$TZ" hwclock $tz --hctosys fi fi ...... stop|restart|reload|force-reload) ...... if [ "$HWCLOCKACCESS" != no ] then hwclock $tz --systohc fi if [ "$VERBOSE" != no ] then echo "Hardware Clock updated to `date`." fi exit 0 ;; ...... The main functions of this part are: When UTC is enabled, assign the tz variable to "--utc" and vice versa to "--localtime". When the parameter is start, execute hwclock $tz --hctosys to synchronise hardware time to system time; If $UTC is yes, the time read is considered to be UTC time, and vice versa for localtime. The main difference here lies in whether the system interprets the read time as UTC time, and adjusts the time according to the timezone pointed to by /etc/localtime. For example, in the current time zone (UTC+8), if the --utc option is added, the system will add 8 hours to the read time. If --utc is not added, or --localtime is used, the system will consider the read time as the current time and will not make any adjustments. Note that hwclock -w by default writes the system time. hwclock -w writes the current system time to the RTC (Real-Time Clock); hwclock -wu by default writes UTC time. Taking East 8 as an example, hwclock -wu is to write the current system time minus 8 hours to the RTC; When the parameter is stop, execute hwclock $tz --systohc to write the system time to the hardware RTC. As mentioned earlier, when the timestamp is later, it will enter this branch; "If $UTC is yes, it is considered that the time to be written is UTC time; otherwise, it is considered to be localtime." The main difference here is that if the --utc parameter is added, the system adjusts the system time obtained from date before writing it to the hardware RTC. Conversely, without the parameter, the system writes the time directly to RTC. Taking East 8 as an example, if the --utc parameter is added, the current system time minus 8 hours to the RTC. If --utc is not added, or --localtime is used, the system will write the current system time in hardware RTC; Note: The full name of hctosys is hardware clock to system. The full name of systohc is system to hardware clock. "timestamp" originates from: There are the followings in ls /etc/rc6.d/S25save-rtc.sh: Due to the system's runlevel being 5, during startup it runs scripts from /etc/rc5.d, as evident from the printed messages during boot. Printing information is as follows: ...... echo -e "\033[32mupdate timestamp\033[0m" date -u +%4Y%2m%2d%2H%2M%2S 2>/dev/null > /etc/timestamp ...... When reboot is called, you can see the printed information added: root@fl-imx6ull:~# reboot ...... update timestamp Unmounting remote filesystems... urandom stop: failed. Deactivating swap... Unmounting local filesystems... reboot Restarting system Conclude that the current system time is written to the timestamp when reboot is executed. After the next boot, the system time will definitely be later than after the last reboot. 5. RTC Test Please note: The following examples are based on the GMT+8 time zone. Case 1: Set the RTC time manually to an earlier date, for example, 2022. At this point, executing a reboot will set the current time as a timestamp eight hours ahead, which will then be written to the hardware clock. System time after reboot is: At this point, if you power off the board for about ten minutes to ensure the RTC battery remains charged, and then power it on again, you will see that the board's time is: The timestamp remains the same. Case 2: Set the RTC time manually to an earlier date, for example, 2022. Use ntpdate to synchronize the time, then execute a reboot to trigger the update of the timestamp. The updated timestamp is the system time minus 8 hours. At this point, if you power off the board for about ten minutes to ensure the RTC battery remains charged, and then power it on again after ten minutes, the board's time will be: The timestamp remains the same. Case 3: Use hwclock -w to directly write the system time to the RTC, then power off without updating the timestamp, and power on again. At this point, the timestamp remains unchanged, but the system time has moved back by 8 hours. Case 4: Read the RTC time directly as the system time, then power off directly and power on again. Note that the system time has to be later than the timestamp time in order not to be affected by timestamps. After booting again, the system adds eight hours to the RTC time as the system time, so the time is normal. 6. Common Problems 6.1 Loss of time due to power outage Check whether the software writes the time to the RTC. Measuring small cell voltage Check the number of RTC devices under/dev. Generally, there are two. If there is only one, it means that the external RTC is not recognized. 6.2 External RTC is not identified First, scan the I2C bus with I2C tools to see if the I2C address of the RTC chip can be found. The address for RX8010 is 0x32, and for PCF8563 it's 0x51. If the address cannot be found, troubleshooting hardware involves checking soldering, crystal oscillators, power supply, and replacing the chip if necessary. If the device is found but displays a numeric I2C address, it likely indicates that the corresponding device driver is not correctly loaded. Here are steps for troubleshooting and resolving this issue: If the device is found and displays ''UU,'' this scenario is unlikely to occur. If encountered, troubleshooting can be approached from these aspects: checking system boot logs for print information, examining the RTC loading section, and verifying if there are any kernel errors; investigating hardware for address conflicts. RX8010 root@fl-imx6ull:~# i2cdetect -r -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
  5. Fast Pesticide Residue Detector: Efficient and convenient device for rapid analysis of pesticide residue in fruits and vegetables. It accurately measures pesticide residue in agricultural products, ensuring food safety and dietary health. It is widely used in industrial and commercial administration, vegetable wholesale markets, supermarkets, shopping malls and other fields. Hardware Technology Implementation Features High Sensitivity and Accuracy: The detector employs advanced detection technology, capable of detecting very low concentrations of pesticide residues, ensuring precise and sensitive test results. Fast Detection and High Throughput: Utilizing advanced electronic and optoelectronic systems, the pesticide residue detector provides quick and accurate test results, enhancing detection efficiency. Some models also handle large sample volumes, further enhancing their high-throughput detection advantage. Automation and User-friendliness: It uses automated control technology to perform testing processes such as sample introduction, detection, and cleaning automatically, reducing manual operation time and errors. User-Friendly Interface: Its intuitive design simplifies operation, requiring minimal specialized skills. Versatility and Wide Applicability: In addition to pesticide residue detection, some pesticide residue analyzers also offer multiple detection methods to meet various pesticide testing needs. This makes the instrument valuable across various fields such as agricultural product quality and food safety. With food safety concerns increasingly prominent, pesticide residue detection has become a crucial step in ensuring food quality and safety. Traditional pesticide analyzers are often limited by processing capabilities and power consumption, hindering rapid and accurate detection demands. Forlinx Embedded recommends the FET3568-C SoM as the solution. FET3568-C is a high-performance, low-power processor, particularly suitable for embedded devices and IoT applications. In pesticide residue analyzers, the FET3568-C platform provides robust support for efficient operation with its outstanding computational power and power management capabilities. With powerful computing power. The powerful CPU cores can process large volumes of data to finish the pesticide residue detection and analysis within a short time. This is crucial for scenarios requiring real-time detection and output of results, effectively enhancing detection efficiency. Excellent power consumption control In the pesticide residue analyzer, low power consumption means extended battery life, which is crucial for users who need to conduct long-term detection in fields or laboratories. Additionally, low power consumption helps reduce device heat generation, thereby enhancing device stability and reliability. Rich peripheral interfaces such as UART, SPI, I2C, etc., facilitate communication with various sensors and external devices. In the pesticide residue analyzer, these interfaces can connect key components such as photodetectors and sensors, enabling rapid data acquisition and transmission. Additionally, the RK3568 supports various storage media, making it convenient for users to save and export test data. In addition to hardware performance improvements, the FET3568-C also enables software optimization for pesticide residue analyzers. Based on the powerful computing capabilities of RK3568, the analyzer can run more complex algorithms and models, thereby improving detection accuracy and precision. Additionally, the RK3568 supports various operating systems and programming environments, providing developers with flexible development options. Rockchip's RK3568 significantly enhances the performance and reliability of pesticide residue analyzers. Its powerful computing capabilities, excellent power management, and rich peripheral interfaces enable pesticide residue analyzers to better meet the demands for rapid and accurate detection, providing robust technical support for food safety.
  6. Marine instrument panels are critical display and monitoring devices on ships, crucial for ensuring maritime safety, efficiency, and comfort. Real-time monitoring of vital ship information such as position, speed, heading, and engine status through marine instrument panels enables prompt adjustments and decision-making. They not only enhance the precision and reliability of ship operations but also help reduce accident risks, ensuring safe navigation. Moreover, the digital and intelligent design of marine instrument panels allows crew members to manage and control ships more efficiently, improving operational efficiency. They are key tools for ship operation and management. With the continuous advancement of maritime technology, there is an increasing demand for intelligence and digitization in modern ships. As a core component for ship information display and monitoring, the performance and stability of marine instrument panels are crucial to meet modern maritime needs for information display, data monitoring, and navigation safety. Specific objectives include: Providing a clear and intuitive instrument display interface enables crew members to quickly access navigation information. Facilitating compatibility with various data interfaces enables seamless data transmission with onboard sensors and equipment. Ensuring that instrument panels can operate stably in harsh maritime environments, with high resistance to interference and waterproof performance, is essential. Based on the above characteristics, the hardware platform of modern marine instrument panels should possess the following features: High-performance processor: Ensures fast response and accurate display of navigation information, equipped with powerful data processing and graphic rendering capabilities. Rich Data Interfaces: Integrated with multiple data interfaces such as display ports, serial ports, Ethernet ports, USB ports, etc., enabling seamless connection with various sensors and devices onboard ships for easy data display, real-time acquisition, and transmission. Reliability Design: The hardware itself demands high quality and stability to ensure long-term reliable operation in harsh maritime environments. Based on a modern marine instrument screen hardware platform, Forlinx Embedded recommends FET3588J-C as the hardware development solution. Product Characteristics High-performance processor: Quad-core 64-bit Cortex-A72 + quad-core Cortex-A55 architecture with integrated 6 TOPS NPU for enhanced AI learning and edge computing capabilities in diverse operational scenarios. Rich Display Interfaces: Offers multiple interfaces such as HDMI, eDP, DP, MIPI-DSI, supporting various display types including up to 8K output, meeting diverse requirements for maritime instrumentation screens. At the same time, it supports four-screen display function, which enables the crew to monitor multiple important parameters at the same time and improve work efficiency. High-efficiency Graphics Processing: Integrates ARM Mali-G610 MP4 quad-core GPU, fully compatible with OpenGLES 1.1, 2.0, and 3.2, OpenCL up to 2.2, and Vulkan 1.2. Enables maritime instrumentation screens to efficiently handle complex graphic tasks such as real-time rendering and 3D map display, enhancing user operational experience. Versatile Peripheral Interfaces: Features include dual Gigabit Ethernet, USB 3.1, PCIe 3.0, and 10 UART ports, enhancing data speed and efficiency. This strengthens maritime instrumentation screen functionality, meets navigation needs, and ensures stable data transmission and efficient device communication. Robust and Reliable Performance: The RK3588J platform meets industrial-grade temperature range standards and has undergone rigorous testing to provide stable performance support for high-end applications. During maritime navigation, stable and reliable instrumentation screens are crucial for ensuring the safety of vessels. FET3588J-C SoM's excellent performance ensures reliable operation of the instrumentation screen in harsh environments, providing accurate data feedback to the crew.
  7. ▊ IP Settings Two IP configuration methods: (1)Set a default static IP; (2)Set a temporary static IP ( it is disabled after power cycling). 1. Static IP settings (1) Open /etc/network/interfaces and modify the configuration vi /etc/network/interfaces As follows, configure eth0 as static and eth1 as dynamic: (2) DNS settings Open rc.local with the command vi /etc/rc.local and add the following to it: echo "nameserver 8.8.8.8" > /etc/resolv.conf (3) Block information update&restart sync reboot 2. Temporary network settings Alternatively, the commands can be used temporarily to set the IP and gateway. However, please note that this method's configuration will be lost after a restart. ▊ Adding Startup Auto-run Content 1. Adding the following to the startup script Enter vi /etc/rc.local As an example of booting with the output ''hello world,'' add the following content: Note: Add the startup auto-run content before exit 0; 2. Adding startup auto-run items To create a startup auto-run item in the /etc/rc5.d/ directory vi /etc/rc5.d/S99test.sh As follows: #!/bin/bash echo "helloworld!" chmod 777 /etc/rc5.d/S99test.sh S99 indicates the startup priority as 99, which can be adjusted by the user based on demand. 3. Power-on self-starting 4G dialing method Previously it was mentioned that startup applications can be directly added to /etc/rc.local. However, 4G slightly differs from other applications because it uses a separate 4G module that requires initialization time. Based on practical tests, the 4G module takes 3-5 seconds after startup to function properly. Therefore, before initiating 4G dialing, a delay of 3-5 seconds is necessary. Modify as follows: vi /etc/rc.local Add the following: Note: The delay time cannot be less than 3s. ▊ WiFi 1. Static IP Settings (WiFi) WiFi login script: /usr/bin/fltest_cmd_wifi.sh The second-to-last line of the script assigns a dynamic IP to wlan0. If there is a need to set a static IP, it can be done as follows: 2. Power-on self-starting settings (WiFi) Also put the WiFi script in the/etc/rc.local. In this case, it is necessary to add an ''&'' symbol at the end to run the script in the background. Otherwise, it might block and prevent access to the file system. ▊ Boot 1. SSH connection failure (1) When SSH cannot connect, check if ping is possible. If ping fails, it could be due to network issues. The computer and the device should be on the same subnet. The default IP for eth0 is 192.168.0.232. Users can directly connect them or connect both to the same router. Then, set a 192.168.0 subnet IP on the computer; (2) If ping is successful, first confirm whether the factory image can connect normally. If the factory image can connect normally, check what services are starting up at boot causing the issue; ensure that services starting at boot are backgrounded. Failure to do so may cause process blocking, preventing SSH login. Consider reflashing the factory image if necessary; (3) Ensure that the board's IP address is being pinged. This can be tested by unplugging the Ethernet cable and then pinging from the computer.
  8. 1. GPIO Wake-up The supported system sleep modes can be viewed with cat /sys/power/state. To achieve functionality similar to the 6ul, use the "wake-up" function in ''gpio-keys.c''. Add a GPIO node specifying the wake-up GPIO pin. During sleep, a message indicates only GPIO0 supports wake-up; testing confirmed only GPIO0 can wake up. cat /proc/interrupts indicates that the interrupt for key1 has been successfully registered. Testing has been conducted to verify that both freeze and mem modes can wake up. 2. Network Wake-up Firstly, NIC support for Wake-on-LAN is required. Use the ethtool tool to check NIC information. The default setting for wake-on is ''d'', which means network wake-up is disabled. The ''supports Wake-on'' option is ''ug'', where ''u'' allows any unicast data and ''g'' allows magic packets. The wake-on can be set to ''ug'' for eth0 using the following command: ''ethtool -s eth0 wol ug''. Test for u: echo freeze > /sys/power/state//Enter freeze sleep mode Waking up can be achieved by pinging the IP of this network port in any local area network. Test for g: ethtool -s eth0 wol g//Set wake-on to g At this point, the ping fails, but the mac can be specified through the wol to wake up. Testing revealed that Wake-On-LAN is only possible in freeze mode. Observations showed that after entering mem mode, the network LED does not light up; whereas, in freeze mode, the network LED continues to blink normally. This indicates that the PHY (physical layer) is not functioning in mem mode, and therefore, it cannot trigger an interrupt for wake-up. It is also possible that this interrupt pin is connected to gpio3 _ A2.
  9. To fully meet the growing demand in the AIoT market for high performance, robust computing power, and low power consumption, Forlinx Embedded presents the all-new FET3576-C SoM, developed based on the Rockchip RK3576 processor! Integrated with 4 x ARM Cortex-A72 and 4 x ARM Cortex-A53 high-performance cores, featuring a built-in 6 TOPS powerful NPU, the FET3576-C SoM empowers your AI applications. With a board-to-board connection design and plug-and-play capability, it facilitates easy installation and maintenance for your products. The product undergoes rigorous testing at Forlinx Embedded Laboratory ensuring stability and reliability for your products. With a 10-15 year life-cycle, it assures continuous supply. FET3576-C SoM release marks a new milestone in the collaboration between Forlinx Embedded and Rockchip. As we enter the era of mobile intelligence, we are committed to working together to provide customers with excellent products and high-quality services. 01 Eight-core High-performance Chip with Advanced Video Decoding Capabilities RK3576 is a high-performance, low-power application processor designed by Rockchip specifically for the AIoT market. It features four ARM Cortex-A72 cores and four ARM Cortex-A53 high-performance cores, along with a built-in 6TOPS powerful NPU for advanced computing tasks. Additionally, it includes an embedded 3D GPU, a dedicated 2D hardware engine with MMU, and H.265 hardware decoding, supporting up to 8K resolution for enhanced display performance. 02 Firewall Achieves True Hardware Resource Isolation RK Firewall for managing access rights from master to slave devices and memory areas for true hardware resource isolation 03 Supercharge Your AI Applications With 6TOPS Computing Power NPU! RK3576 processor is equipped with a powerful 6TOPS NPU, supporting INT4/INT8/INT16/FP16/BF16/TF32 operations. It can operate in dual-core collaboration or independently, facilitating multitasking and parallel processing across various scenarios. It supports multiple deep learning frameworks such as TensorFlow, Caffe, Tflite, Pytorch, Onnx NN, and Android NN. 04 Ultra-HD Display + AI Intelligent Repair RK3576 processor supports high-definition H.264 and H.265 encoding/decoding, and features five display interfaces: HDMI/eDP, MIPI DSI, Parallel, EBC, and DP. It enables triple-display setups, 4K@120Hz Ultra HD display, and super-resolution capabilities. Intelligent image restoration enhances blurry images and improves video frame rates, meeting diverse display requirements across multiple scenarios. 05 FlexBus New Parallel Bus Interface FlexBus features a flexible parallel bus interface capable of simulating irregular or standard protocols, supporting 2/4/8/16-bit data parallel transmission at clock speeds up to 100MHz. Additionally, it includes a rich array of bus communication interfaces such as DSMC, CAN-FD, PCIe 2.1, SATA 3.0, USB 3.2, SAI, I2C, I3C, and UART. 06 Continuously Updated User Profile Comprehensive resources including carrier board schematics ensure simplified development and streamlined production processes for you. 07 Wide Range of Industry Applications Forlinx Embedded FET3576-C SoM is versatile across industrial, AIoT, edge computing, and smart mobile terminals. With Forlinx's robust technical support services, accelerate your product's time-to-market and seize the lead in your industry. Carrier Board OK3576-C Development Board To minimize your development workload, we can provide starter kits that can be used as complete development platforms for evaluation and application development. OK3576-C Single Board Computer by Forlinx is powered by Rockchip RK3576 processor, featuring 4x ARM [email protected] + 4x [email protected], 2GB/4GB LPDDR4 RAM, and a 6TOPS NPU. It employs 4 100-pin board-to-board connectors to easily access all processor function pins, offering seamless functionality and ease of customization, and supports Linux 6.1.57 system. Featuring open system architecture design, it can provide technical information for your secondary development. OK357
  10. ECG monitor is a kind of medical equipment that is used to monitor and record human ECG in real-time. It can continuously observe the electrical activity of the heart through the display, providing doctors with reliable and valuable indicators of cardiac activity, thus guiding real-time management. ECG monitor has a wide range of applications in the medical field, especially for patients with abnormal ECG activity, such as acute myocardial infarction, various arrhythmias, etc., which plays an important role in auxiliary diagnosis. Application Scenario ECG monitor is widely used in various places of the hospital, such as ICU, CCU, operating room, ward and so on. It is suitable for critically ill patients or patients with certain risks after operation, as well as patients who need to monitor ECG signals continuously for a long time. By using an electrocardiogram monitor, doctors can promptly detect abnormalities in patients' physiological indicators, thereby taking appropriate treatment measures to ensure the patients' safety. Features: 1. Accurate monitoring:The electrocardiogram monitor can real-time monitor the patient's cardiac signals, collect the weak signals of cardiac electrical activity through electrodes attached to the patient's body, and display them on the screen after internal circuit processing. In addition to cardiac signals, an electrocardiogram monitor can also simultaneously monitor other physiological parameters such as respiration, blood pressure, blood oxygen saturation, etc., providing doctors with comprehensive physiological information. 2. Alarm function: The electrocardiogram monitor has an alarm function, which can be set with different alarm thresholds according to the patient's condition and the doctor's requirements. When the monitored parameters exceed the set values, the monitor will emit audio and visual alarms to promptly remind medical staff to take action. 3. Data recording and analysis: The electrocardiogram monitor can automatically record the patient's cardiac data and generate electrocardiograms for analysis. Doctors can analyze the electrocardiogram to understand the patient's cardiac condition, providing a basis for subsequent diagnosis and treatment. 4. Stable operational capability: The electrocardiogram monitor can effectively shield interference factors such as electromyographic signals and electromagnetic signals, ensuring the accuracy and reliability of cardiac data. It can continuously monitor patients' physiological parameters for 24 hours, assisting doctors in promptly detecting changes in the patient's condition. Folinx Solutions As an important equipment in the medical field, ECG monitor plays a vital role in monitoring the physiological parameters of patients continuously, stably and accurately. In order to meet the high performance, high stability, multi-function and other requirements of modern medical ECG monitor, for product development, we recommend the embedded FETMX8MP-C SoM based on NXP i.MX8MPlus processor as the development platform of ECG monitor. Technical Features: High performance: The CPU is a 1.6GHz quad-core 64-bit Cortex-A53 architecture with a Neural Processing Unit (NPU) running up to 2.3TOPS. Network Interface: The SoM natively supports 2 Gigabit network interfaces, which makes data transmission and interaction with external medical information systems (LIS/HIS) efficient and stable. Display and Expansion Interface: It also supports screen interfaces such as LVDS and HDMI, which can meet the display needs in different scenarios, such as dual-screen simultaneous display or heterodyne display, and the highest resolution of HDMI can be reached4K. In addition, communication interfaces support USB 3.0, PCIE Gen 3, SDIO, CAN FD, etc. to connect to various sensors or medical devices. Industrial-grade design and stability: The whole board adopts industrial-grade design and undergoes the stringent 7x24 hours continuous stable operation test and high and low-temperature experiments. This design ensures highly stable operation in various environments, especially in medical environments where continuous operation is required. This is critical for cardiac monitors that require 24/7 monitoring of patient physiological parameters.
  11. ECG monitor is a kind of medical equipment that is used to monitor and record human ECG in real-time. It can continuously observe the electrical activity of the heart through the display, providing doctors with reliable and valuable indicators of cardiac activity, thus guiding real-time management. ECG monitor has a wide range of applications in the medical field, especially for patients with abnormal ECG activity, such as acute myocardial infarction, various arrhythmias, etc., which plays an important role in auxiliary diagnosis. Application Scenario ECG monitor is widely used in various places of the hospital, such as ICU, CCU, operating room, ward and so on. It is suitable for critically ill patients or patients with certain risks after operation, as well as patients who need to monitor ECG signals continuously for a long time. By using an electrocardiogram monitor, doctors can promptly detect abnormalities in patients' physiological indicators, thereby taking appropriate treatment measures to ensure the patients' safety. Features: 1. Accurate monitoring:The electrocardiogram monitor can real-time monitor the patient's cardiac signals, collect the weak signals of cardiac electrical activity through electrodes attached to the patient's body, and display them on the screen after internal circuit processing. In addition to cardiac signals, an electrocardiogram monitor can also simultaneously monitor other physiological parameters such as respiration, blood pressure, blood oxygen saturation, etc., providing doctors with comprehensive physiological information. 2. Alarm function: The electrocardiogram monitor has an alarm function, which can be set with different alarm thresholds according to the patient's condition and the doctor's requirements. When the monitored parameters exceed the set values, the monitor will emit audio and visual alarms to promptly remind medical staff to take action. 3. Data recording and analysis: The electrocardiogram monitor can automatically record the patient's cardiac data and generate electrocardiograms for analysis. Doctors can analyze the electrocardiogram to understand the patient's cardiac condition, providing a basis for subsequent diagnosis and treatment. 4. Stable operational capability: The electrocardiogram monitor can effectively shield interference factors such as electromyographic signals and electromagnetic signals, ensuring the accuracy and reliability of cardiac data. It can continuously monitor patients' physiological parameters for 24 hours, assisting doctors in promptly detecting changes in the patient's condition. Folinx Solutions As an important equipment in the medical field, ECG monitor plays a vital role in monitoring the physiological parameters of patients continuously, stably and accurately. In order to meet the high performance, high stability, multi-function and other requirements of modern medical ECG monitor, for product development, we recommend the embedded FETMX8MP-C SoM based on NXP i.MX8MPlus processor as the development platform of ECG monitor. Technical Features: High performance: The CPU is a 1.6GHz quad-core 64-bit Cortex-A53 architecture with a Neural Processing Unit (NPU) running up to 2.3TOPS. Network Interface: The SoM natively supports 2 Gigabit network interfaces, which makes data transmission and interaction with external medical information systems (LIS/HIS) efficient and stable. Display and Expansion Interface: It also supports screen interfaces such as LVDS and HDMI, which can meet the display needs in different scenarios, such as dual-screen simultaneous display or heterodyne display, and the highest resolution of HDMI can be reached4K. In addition, communication interfaces support USB 3.0, PCIE Gen 3, SDIO, CAN FD, etc. to connect to various sensors or medical devices. Industrial-grade design and stability: The whole board adopts industrial-grade design and undergoes the stringent 7x24 hours continuous stable operation test and high and low-temperature experiments. This design ensures highly stable operation in various environments, especially in medical environments where continuous operation is required. This is critical for cardiac monitors that require 24/7 monitoring of patient physiological parameters.
  12. Introduction: In March of this year, I attended the Embedded World Exhibition, which focuses on embedded systems. During my visit, I explored the Forlinx booth. Forlinx is renowned for developing System on Modules (SoMs) and Evaluation Boards for industrial PCs. I previously acquired an evaluation board from Forlinx last year. This year, I am excited to present the new Forlinx OK3588-C board in this video. Presenting the OK3588-C Development Board (featuring a Rockchip RK3588) Today, we will explore the Forlinx OK3588-C board. Allow me to switch off the camera and transition to the desktop view. Here, I have the hardware manual for the OK3588 board. If you require this hardware manual or the necessary SDKs to develop software for this board, please contact Forlinx, and they will provide you with the required resources. SoM Appearance Diagram: The evaluation board comprises two primary components. Firstly, this is the physical appearance. Here, we have the System on Module (SoM) mounted on a carrier board, which connects all peripherals to the SoM. Let's begin by examining the System on Module. This module includes the Rockchip RK3588 main processor, two DRAM ICs, and eMMC storage for non-volatile data. Various components on the module generate the required voltages for the chip's operation. The Rockchip RK3588 is a robust processor. RK3588 Description: Displayed here is a block diagram of the RK3588. It features a dual-cluster core configuration. One cluster consists of a quad-core Cortex-A76 processor clocked at 2.6 GHz, and the second cluster includes a quad-core Cortex-A55 processor, clocked at either 1.5 or 1.8 GHz. This setup allows for power-saving capabilities by disabling the A76 cores when full performance is not required. Another notable feature is the high-performance Neural Processing Unit (NPU), which is advantageous for tasks related to artificial intelligence and machine learning. In the future, I hope to demonstrate the NPU's capabilities. The chip also includes a multimedia processor supporting various video decoders, even up to 8K resolution, and an embedded Mali-G GPU. For external memory interfaces, it has two eMMC controllers and support for LPDDR4 and LPDDR5. Additionally, it includes standard system peripherals, such as USB OTG 3.1, PCIe interfaces, Gigabit Ethernet, GPIO, SPI, and I²C. Development Board Interface Description: The carrier board includes numerous peripherals. There is a 12V power supply, a power switch, a reset switch, up to five camera connectors, microphone and speaker connectors, USB 2.0 host, and two USB 3.1 OTG ports. These USB ports can function as either hosts or devices. It also features two HDMI ports (one input and one output), a real-time clock with a battery, eDP ports, ADC connectors, an SD card slot, a fan connector, and M.2 slots for Wi-Fi and cellular cards. The board also includes two full-size PCIe connectors, user buttons, CAN interfaces, an RS485 interface, a USB-to-serial adapter, and two Gigabit Ethernet ports. The overall setup is impressive. Operation: Let's power on the board. I have also connected a PCIe card to a free slot. Before proceeding, let's open the serial terminal to monitor the output. The board is booting, and the kernel is starting successfully. Currently, we are running a minimal BusyBox root file system. In a future video, I will demonstrate how to build a custom Linux for this board. For now, this setup is sufficient. We are running kernel version 5.10.66, built for ARM64 architecture. The board has eight processors, consisting of different Cortex-A cores. The available memory is 3.6 GB, with 155 MB currently in use. Background processes and the Mali GPU likely consume some memory. We have eight I²C buses available, with one connected to the display connector for Display Data Channel (DDC) management. The eMMC storage has multiple partitions. The board features seven GPIO chips and eight I²C connectors. Lastly, I have connected a PCIe card, and the system detects it successfully. The card operates at PCIe Gen 1 speed with a link width of x1. Higher-end cards could achieve link speeds up to 8 GT/s and wider link widths. This concludes the initial demonstration of the OK3588 board. In future videos, I will compile software for this board and provide more in-depth coverage of this compelling embedded system platform. I'm excited to showcase the full potential of the Forlinx OK3588-C development board and how it can be leveraged for a wide range of innovative projects. Stay tuned as I delve deeper into the capabilities of this board and explore how it can be leveraged for various applications.
  13. Software version: Linux 4.19 Design Idea: Detect screen touch events to determine whether the screen is being used or not in an auto-break application. If the screen detects input events, it will remain on. If no touch events are received for a period of time, the screen will transition from on to a dimmed state, reminding the user that it is about to enter the screen-off mode. If no touch events occur after dimming, the screen will enter the screen-off mode. When a touch event occurs again, the screen will transition from screen-off mode to the on state. Currently, the approach to implement automatic screen-off is to treat touch events as a fixed path that can be applied to familiar boards. To enhance convenience in application, two additional alternative approaches are provided below: ▊ The first implementation method You can apply the evtest command to get the path to/dev/input/event1 (event1 is the name of the touch event on my board). You can then pass the path to your program as a parameter. For example, you can modify your program to accept command-line arguments to specify the path of the device file to open int argc, char *argv[]; Opens a file with the passed in parameters as the device file path int fd = open(argv[1], O_RDONLY); You can compile and run the program, passing it/dev/input/event1 as a command-line argument, like this: ./your_program /dev/input/event1 ▊ The second implementation method is to fix the screen touch node in the device tree. Look for the screen touch node in the device tree and note its address. On the I2C bus, the address of the touch node is simply 2-0038 So we can use grep to filter out touch nodes based on their addresses. ls -l /sys/class/input | grep "0038" | awk -F ' ' '{print $9}' | grep "event" The following command is used in the application to find the touch event based on the touch address. char *command_output = exec("ls -l /sys/class/input | grep '0038' | awk -F ' ' '{print $9}' | grep 'event'"); Use the sprintf function to splice the path containing the event, and then read the event. Examples of using Sprintf: int main() { char str[100]; int num = 123; float f = 3.14; //Write the formatted data to the string sprintf(str, "%d%.2f", num, f); //print the generated string printf("The output is. %s\n", str); return 0; }
  14. Some customers rely on battery power for their products and have limited battery capacity. If a screen is used in the product, the screen will be one of the main sources of energy consumption. Therefore, turning off the screen in time can effectively extend the battery life and improve the user experience. In addition, the auto-screen-off function not only extends the life of the screen but also effectively prevents the risk of information leakage and privacy exposure. Generally speaking, the automatic screen off function plays an important role in improving the performance of the device, saving energy and protecting privacy. Knowledge points involved: 1. Struct input _ event: a data structure used to represent Linux input event This structure usually contains various information of the input event, such as event type, event code, value, etc. When dealing with input devices such as keyboards and mice, you can use this structure to store and pass information about input events. Specifically, the struct input _ event structure typically contains the following fields: Struct timeval time: The timestamp of the event occurrence. Unsigned short type: The type of event (e.g., key press, release, etc.) Unsigned short code: Code of the event (such as which key was pressed). Int value: The value of the event (key press/release, etc.) By defining such a structure, it is easy to package together the various attributes of an input event for processing and passing in the program. When reading the events of the input device, this structure can be used to store the specific information of each event, which is convenient for subsequent analysis and response to the input events. 2. Functions and differences of read function and select function The read () function and the select () function are both functions used in Linux systems to handle I/O operations, but there are some differences in what they do and how they are used. (1)Read () function: The read () function is used to read data from a file descriptor, such as a file, socket, and so on.It is a blocking system call, that is, when there is no data to read, the program will be blocked until there is data to read or an error. The read () function reads data from the file descriptor into the specified buffer and returns the actual number of bytes read, or -1 if an error occurs. (2)Select () function: The select () function monitors multiple file descriptors to determine whether they are in a readable, writable, or abnormal state. Through the select () function, multiplexing can be achieved, that is, one of multiple file descriptors is selected for I/O operation without blocking and waiting. The select () function blocks the process until at least one of the specified file descriptors is in a readable, writable, or exception state, or the specified timeout has passed. The select () function is usually used to listen to multiple file descriptors at the same time, so that when any file descriptor is ready, the corresponding read and write operations can be performed to improve the efficiency of the program. In summary, the read () function is a blocking operation to read data from a single file descriptor, while the select () function is a function to multiplex the state of multiple file descriptors to help the program manage multiple I/O operations more efficiently. The select () function is typically used in situations where you need to listen to multiple file descriptors at the same time. In the program, events are read from the input device through the read () function. If no event is reported, the read () function blocks the program and does not return until an event occurs or an error occurs. Therefore, if there is no event reported, the program will stay at the read () function and will not perform subsequent printing operations. If an event is reported, the read() function reads the event data and returns the number of bytes of the event. In this case, the program performs a subsequent print operation to print out the event information. This is why messages are printed only when there is an event reported and not when there is no event reported. To print the information even if no event is reported, you can set a timeout before reading the event. If no event is reported within the timeout period, the prompt information will be printed. This can be done using the select() function. In this modified code, we use the select() function to wait for the file descriptor to be ready for a read operation, and if it is not ready within the timeout period, it returns 0, at which point we print "No event reported within 1 second". If ready, read the event and print the appropriate message. This will print a reminder message every 1 second even if no events are reported. 3. Character devices for /dev/disp Switch for controlling display device The method of operation of a string device is disp _ fops: In fact, only two functions, disp _ ioctl () and disp _ mmap (), have concrete implementations.ioctl can refer to: "T507_Display_Module_Use_Documentation.pdf". 4. Sleep Mode / /sys/power/state freeze freeze: In the Freeze sleep state, the system will suspend CPU operation, but memory and devices will remain active to resume working faster. Mem: In the Mem sleep state, the system saves everything to memory and turns off unnecessary devices to save power. The CPU stops running, and the memory and some necessary devices continue to be active. In general, the freeze sleep state is relatively shallow, and the system can recover to the working state more quickly, but the power consumption is relatively high, while the mem sleep state is deeper, and the power consumption is lower, but the recovery time may be slightly longer. According to the actual needs and system requirements, the appropriate sleep state can be selected to balance power consumption and performance.
  15. In modern cities, the medical rescue system is crucial for urban safety. Emergency centers command rescue operations, essential for saving lives. With the advancement of IoT technology, many cutting-edge technologies are gradually integrated into the medical emergency system, enabling ambulances to be networked, digitized, and intelligent. Thus, 5G smart ambulances emerge. 5G-enhanced ambulances look similar to regular ones in appearance. However, by integrating 5G networks into the vehicle, developers instantly endowed it with additional "superpowers". For instance, 5G-enhanced ambulances can achieve synchronized transmission of multiple high-definition live videos, leveraging 5G's high bandwidth, low latency, and reliability. Based on this, it can synchronously return the medical images, patient signs, illness records and other information of emergency patients to the hospital emergency center without damage, which is convenient for the emergency center to grasp the patient's condition in advance and give professional guidance to the rescuers on the bus. Forlinx's 5G Smart Gateway FCU2303 provides reliable support for medical ambulance. Rapid transmission of information Bridge the gap for medical device information transmission. Modern ambulances are equipped with advanced medical equipment such as electrocardiogram monitors, ventilators, and defibrillators to enhance rescue efficiency. Various types of diagnostic and therapeutic equipment can efficiently transmit physiological data to the Hospital Information System (HIS) through the multiple Ethernet ports, serial ports, and DI/DO of the FCU2303 industrial-grade smart gateway. This meets the data collection and transmission requirements of ambulances. Enabling high-definition audio and video consultations Medical imaging equipment such as cameras, microphones, displays, and ultrasound machines are deployed on the ambulance. Through the FCU2303 industrial-grade smart gateway, information is transmitted, providing real-time, lossless transmission of audio-visual images from the ambulance to the hospital emergency center. This setup offers a high-bandwidth, low-latency, and highly connected secure network, meeting the remote video consultation needs of the ambulance. It aims to secure more time for patients by implementing a rapid rescue and treatment mode where patients essentially “Be in the hospital” upon boarding the ambulance. Enabling reliable integration of multiple technologies FCU2303 Smart Gateway, designed based on the NXP LS1046A processor, features a quad-core CPU with a high clock frequency of 1.8GHz. With a fanless design, it ensures stable operation of medical rescue systems for extended periods in environments ranging from -40°C to +85°C; It supports 5G and 4G modules, which can be easily switched with a single DIP switch. It provides users with high bandwidth, low latency, and large connectivity services. It also supports dual-band Wi-Fi, enabling both STA and AP modes; FCU2303 supports expandable device storage with PCIe 3.0 high-speed interface, enabling support for solid-state drives (SSDs) using the NVMe protocol (M.2 interface). This meets the requirements for small size, large capacity, and fast speed; It comes standard with 8 x Gigabit Ethernet ports (flexible configuration of 2/4/6/8 ports, all with independent MAC addresses), 4 RS485 ports, 4 RS485/RS232 multiplexing interfaces, 2 DI (Digital Input), 2 DO (Digital Output), and 1 USB HOST 3.0 port. This ensures the connectivity of various medical devices, enabling full vehicle networking for ambulances; The software integrates a variety of third-party components including Samba, Lighttpd, Docker, IPSEC, OpenSSL, and Python 3 or higher versions. It supports protocols such as TCP/IP, UDP, DHCP, TFTP, FTP, Telnet, SSH, Web, HTTP, IPtables, and provides an open system API for easy user customization and development. In the future, smart ambulances based on 5G technology will undoubtedly provide better full-process services for patients, including pre-diagnosis, during diagnosis, and post-diagnosis. Forlinx Embedded FCU2303 Smart Gateway, which supports the 5G smart ambulance system, fully leverages the leading advantages of 5G technology, including high bandwidth, low latency, and large connectivity. It will undoubtedly effectively and efficiently guarantee the transmission of information for various medical devices. This will assist medical emergency centers in further improving the efficiency and service level of emergency rescue work, enhancing service quality, optimizing service processes and modes, and winning time for rescuing patients’ lives, thereby better-safeguarding health and life.
×
  • Create New...