From 5af97a1f7ff4c5a94c78a82bf15cbb47d69f8f49 Mon Sep 17 00:00:00 2001 From: Meco Man <920369182@qq.com> Date: Sat, 12 Mar 2022 00:56:03 -0500 Subject: [PATCH] move documentation repo to rt-thread repo --- documentation/README.md | 136 + documentation/at/at.md | 895 ++++++ documentation/at/figures/at_framework.jpg | Bin 0 -> 7339 bytes .../at/figures/at_multiple_client.jpg | Bin 0 -> 36370 bytes documentation/basic/basic.md | 754 +++++ .../basic/figures/03Memory_distribution.png | Bin 0 -> 18846 bytes .../basic/figures/03Startup_process.png | Bin 0 -> 53158 bytes .../basic/figures/03kernel_Framework.png | Bin 0 -> 59896 bytes .../basic/figures/03kernel_object.png | Bin 0 -> 15060 bytes .../basic/figures/03kernel_object2.png | Bin 0 -> 16088 bytes .../coding_style_cn.md | 0 .../coding_style_en.md} | 0 .../contribution_guide/contribution_guide.md | 171 ++ .../figures/add_usb_driver.png | Bin 0 -> 9282 bytes .../contribution_guide/figures/branch.png | Bin 0 -> 13427 bytes .../contribution_guide/figures/checkok.png | Bin 0 -> 20334 bytes .../contribution_guide/figures/cla.png | Bin 0 -> 18680 bytes .../figures/cloneformgit.png | Bin 0 -> 57996 bytes .../figures/cloneformgit2.png | Bin 0 -> 82388 bytes .../contribution_guide/figures/git_clone.png | Bin 0 -> 8455 bytes .../figures/pr_description.png | Bin 0 -> 141183 bytes .../figures/pull_request_step2.png | Bin 0 -> 82846 bytes documentation/device/adc/adc.md | 264 ++ documentation/device/adc/figures/adc-p.png | Bin 0 -> 32160 bytes documentation/device/device.md | 486 +++ documentation/device/figures/block-dev.png | Bin 0 -> 14360 bytes documentation/device/figures/io-call.png | Bin 0 -> 17519 bytes documentation/device/figures/io-dev.png | Bin 0 -> 20837 bytes documentation/device/figures/io-fun-call.png | Bin 0 -> 16301 bytes documentation/device/figures/io-parent.png | Bin 0 -> 20021 bytes documentation/device/figures/wtd-uml.png | Bin 0 -> 47264 bytes documentation/device/hwtimer/hwtimer.md | 403 +++ documentation/device/i2c/figures/i2c1.png | Bin 0 -> 9696 bytes documentation/device/i2c/figures/i2c2.png | Bin 0 -> 14946 bytes documentation/device/i2c/figures/i2c3.png | Bin 0 -> 7749 bytes documentation/device/i2c/i2c.md | 298 ++ documentation/device/pin/figures/pin2.png | Bin 0 -> 16419 bytes documentation/device/pin/pin.md | 353 +++ documentation/device/pwm/figures/pwm-f.png | Bin 0 -> 15113 bytes documentation/device/pwm/figures/pwm-l.png | Bin 0 -> 10754 bytes documentation/device/pwm/pwm.md | 265 ++ documentation/device/rtc/rtc.md | 198 ++ documentation/device/sensor/sensor.md | 465 +++ documentation/device/spi/figures/spi1.png | Bin 0 -> 8051 bytes documentation/device/spi/figures/spi2.png | Bin 0 -> 10016 bytes documentation/device/spi/figures/spi5.png | Bin 0 -> 46773 bytes documentation/device/spi/spi.md | 741 +++++ .../device/uart/figures/uart-dma.png | Bin 0 -> 40241 bytes .../device/uart/figures/uart-int.png | Bin 0 -> 40997 bytes documentation/device/uart/figures/uart1.png | Bin 0 -> 3366 bytes documentation/device/uart/uart.md | 646 ++++ documentation/device/watchdog/watchdog.md | 228 ++ .../device/wlan/figures/an0026_1.png | Bin 0 -> 55699 bytes .../device/wlan/figures/an0026_3.png | Bin 0 -> 27638 bytes .../device/wlan/figures/an0026_4.png | Bin 0 -> 33411 bytes .../device/wlan/figures/an0026_5.png | Bin 0 -> 54530 bytes documentation/device/wlan/wlan.md | 443 +++ documentation/dlmodule/README.md | 314 ++ documentation/{ => doxygen}/Doxyfile | 0 documentation/env/env.md | 256 ++ .../figures/Add_Env_To_Right-click_Menu-1.png | Bin 0 -> 25033 bytes .../figures/Add_Env_To_Right-click_Menu-2.png | Bin 0 -> 53763 bytes .../figures/Add_Env_To_Right-click_Menu-3.png | Bin 0 -> 78170 bytes documentation/env/figures/cd_cmd.png | Bin 0 -> 25539 bytes documentation/env/figures/console.png | Bin 0 -> 18635 bytes documentation/env/figures/hotkey.png | Bin 0 -> 85197 bytes .../env/figures/menuconfig_packages_list.png | Bin 0 -> 28078 bytes documentation/env/figures/menuconfig_s.png | Bin 0 -> 22405 bytes .../env/figures/menuconfig_s_auto_prj.png | Bin 0 -> 21306 bytes .../env/figures/menuconfig_s_auto_update.png | Bin 0 -> 31898 bytes documentation/env/figures/q1.png | Bin 0 -> 124707 bytes documentation/env/figures/scons_done.png | Bin 0 -> 20012 bytes documentation/env/figures/use_scons.png | Bin 0 -> 27862 bytes .../figures/02Software_framework_diagram.png | Bin 0 -> 28408 bytes documentation/filesystem/README.md | 1027 +++++++ .../filesystem/figures/elm-fat-mkfs.png | Bin 0 -> 23054 bytes .../filesystem/figures/fs-dir-mg.png | Bin 0 -> 11026 bytes documentation/filesystem/figures/fs-dir.png | Bin 0 -> 22278 bytes documentation/filesystem/figures/fs-layer.png | Bin 0 -> 18662 bytes documentation/filesystem/figures/fs-mg.png | Bin 0 -> 9881 bytes .../filesystem/figures/fs-reg-block.png | Bin 0 -> 21169 bytes documentation/filesystem/figures/fs-reg.png | Bin 0 -> 13283 bytes documentation/finsh/figures/finsh-hd.png | Bin 0 -> 91748 bytes documentation/finsh/figures/finsh-mdk.png | Bin 0 -> 45606 bytes documentation/finsh/figures/finsh-run.png | Bin 0 -> 17630 bytes documentation/finsh/finsh.md | 562 ++++ documentation/interrupt/figures/09fun1.png | Bin 0 -> 16099 bytes documentation/interrupt/figures/09fun2.png | Bin 0 -> 22637 bytes .../interrupt/figures/09interrupt_handle.png | Bin 0 -> 24501 bytes .../interrupt/figures/09interrupt_ops.png | Bin 0 -> 31084 bytes .../interrupt/figures/09interrupt_reque.png | Bin 0 -> 5185 bytes .../interrupt/figures/09interrupt_table.png | Bin 0 -> 39222 bytes .../interrupt/figures/09interrupt_work.png | Bin 0 -> 9442 bytes .../figures/09interrupt_work_process.png | Bin 0 -> 19595 bytes .../figures/09interrupt_work_sta.png | Bin 0 -> 20101 bytes .../interrupt/figures/09relation.png | Bin 0 -> 13082 bytes .../interrupt/figures/09ths_switch.png | Bin 0 -> 6319 bytes documentation/interrupt/interrupt.md | 568 ++++ .../figures/02Software_framework_diagram.png | Bin 0 -> 28408 bytes documentation/introduction/introduction.md | 37 + .../kernel-porting/figures/10pendsv.png | Bin 0 -> 22581 bytes .../kernel-porting/figures/10stack.png | Bin 0 -> 8122 bytes .../kernel-porting/figures/10switch.png | Bin 0 -> 15631 bytes .../kernel-porting/figures/10switch2.png | Bin 0 -> 16096 bytes .../kernel-porting/figures/10ths_env1.png | Bin 0 -> 12328 bytes .../kernel-porting/figures/10ths_env2.png | Bin 0 -> 15940 bytes .../kernel-porting/kernel-porting.md | 383 +++ .../memory/figures/08Memory_distribution.png | Bin 0 -> 12667 bytes documentation/memory/figures/08heap_ops.png | Bin 0 -> 10095 bytes documentation/memory/figures/08memheap.png | Bin 0 -> 13072 bytes documentation/memory/figures/08mempool.png | Bin 0 -> 18596 bytes .../memory/figures/08mempool_ops.png | Bin 0 -> 19397 bytes .../memory/figures/08mempool_work.png | Bin 0 -> 20162 bytes documentation/memory/figures/08slab.png | Bin 0 -> 11506 bytes documentation/memory/figures/08smem_work.png | Bin 0 -> 5793 bytes documentation/memory/figures/08smem_work2.png | Bin 0 -> 5054 bytes documentation/memory/figures/08smem_work3.png | Bin 0 -> 5330 bytes documentation/memory/memory.md | 666 +++++ documentation/network/figures/net-hello.png | Bin 0 -> 44524 bytes documentation/network/figures/net-layer.png | Bin 0 -> 12927 bytes documentation/network/figures/net-osi.png | Bin 0 -> 16082 bytes documentation/network/figures/net-recv.png | Bin 0 -> 21245 bytes documentation/network/figures/net-send.png | Bin 0 -> 14327 bytes documentation/network/figures/net-tcp-s.png | Bin 0 -> 43570 bytes documentation/network/figures/net-tcp.png | Bin 0 -> 17782 bytes .../network/figures/net-udp-client.png | Bin 0 -> 49302 bytes .../network/figures/net-udp-server.png | Bin 0 -> 40904 bytes documentation/network/figures/net-udp.png | Bin 0 -> 12961 bytes documentation/network/network.md | 779 +++++ documentation/pm/figures/pm_architecture.png | Bin 0 -> 15831 bytes documentation/pm/figures/pm_description.png | Bin 0 -> 14859 bytes documentation/pm/figures/pm_sequence.png | Bin 0 -> 19281 bytes documentation/pm/figures/pm_system.png | Bin 0 -> 23448 bytes documentation/pm/pm.md | 430 +++ documentation/posix/README.md | 2604 +++++++++++++++++ documentation/quick-start/figures/10.png | Bin 0 -> 80691 bytes documentation/quick-start/figures/11.png | Bin 0 -> 77551 bytes documentation/quick-start/figures/14.png | Bin 0 -> 91059 bytes documentation/quick-start/figures/5.png | Bin 0 -> 55825 bytes documentation/quick-start/figures/6.png | Bin 0 -> 117716 bytes documentation/quick-start/figures/7.png | Bin 0 -> 37616 bytes documentation/quick-start/figures/8.png | Bin 0 -> 178363 bytes documentation/quick-start/figures/9.png | Bin 0 -> 64384 bytes documentation/quick-start/figures/compile.jpg | Bin 0 -> 1935 bytes documentation/quick-start/figures/debug.jpg | Bin 0 -> 2132 bytes .../keil-installation/figures/1.png | Bin 0 -> 20179 bytes .../keil-installation/figures/12.png | Bin 0 -> 18689 bytes .../keil-installation/figures/13.png | Bin 0 -> 21906 bytes .../keil-installation/figures/2.png | Bin 0 -> 33540 bytes .../keil-installation/figures/3.png | Bin 0 -> 20549 bytes .../keil-installation/figures/4.png | Bin 0 -> 21531 bytes .../keil-installation/keil-installation.md | 36 + documentation/quick-start/quick-start.md | 150 + .../quick_start_qemu/figures/echo-cat.png | Bin 0 -> 31330 bytes .../quick_start_qemu/figures/env.png | Bin 0 -> 13873 bytes .../quick_start_qemu/figures/env_menu.png | Bin 0 -> 46457 bytes .../figures/env_menu_ubuntu.png | Bin 0 -> 201350 bytes .../quick_start_qemu/figures/finsh-cmd.png | Bin 0 -> 39677 bytes .../quick_start_qemu/figures/finsh-thread.png | Bin 0 -> 48886 bytes .../quick_start_qemu/figures/menuconfig.png | Bin 0 -> 13906 bytes .../figures/menuconfig_menu.png | Bin 0 -> 33836 bytes .../quick_start_qemu/figures/mkfs-sd0.png | Bin 0 -> 20204 bytes .../figures/python3-version.png | Bin 0 -> 24533 bytes .../quick_start_qemu/figures/qemu.bat.png | Bin 0 -> 37348 bytes .../quick_start_qemu/figures/qemu.png | Bin 0 -> 10742 bytes .../quick_start_qemu/figures/qemubsp.png | Bin 0 -> 15790 bytes .../quick_start_qemu/figures/scons.png | Bin 0 -> 20654 bytes .../figures/ubuntu-env-menu.png | Bin 0 -> 130855 bytes .../figures/ubuntu-filesys.png | Bin 0 -> 56715 bytes .../figures/ubuntu-menuconfig.png | Bin 0 -> 7020 bytes .../figures/ubuntu-mkfs-sd0.png | Bin 0 -> 16276 bytes .../figures/ubuntu-msh-help.png | Bin 0 -> 79055 bytes .../figures/ubuntu-pkg-menuconfig.png | Bin 0 -> 18600 bytes .../figures/ubuntu-pkg-set.png | Bin 0 -> 11815 bytes .../figures/ubuntu-pkgs-add-to-menu.png | Bin 0 -> 57941 bytes .../figures/ubuntu-qemu-bsp.png | Bin 0 -> 125671 bytes .../figures/ubuntu-qume-sh.png | Bin 0 -> 91717 bytes .../figures/ubuntu-rtconfig-py.png | Bin 0 -> 125799 bytes .../quick_start_qemu/figures/ubuntu-save.png | Bin 0 -> 11071 bytes .../quick_start_qemu/figures/ubuntu-scons.png | Bin 0 -> 88948 bytes .../figures/ubuntu-select-pkg.png | Bin 0 -> 74501 bytes .../figures/ubuntu-thread-timer.png | Bin 0 -> 86955 bytes .../figures/ubuntu-update-pkg.png | Bin 0 -> 27129 bytes .../figures/win-menuconfig.png | Bin 0 -> 4212 bytes .../quick_start_qemu/quick_start_qemu.md | 146 + .../quick_start_qemu_linux.md | 203 ++ .../quick-start/rtthread_simulator_v0.1.0.7z | Bin 0 -> 725446 bytes .../quick-start/rtthread_simulator_v0.1.0.zip | Bin 0 -> 2390209 bytes documentation/roadmap-1.2.0.md | 45 - documentation/roadmap-2.1.0.md | 50 - documentation/sal/figures/sal_frame.jpg | Bin 0 -> 40676 bytes documentation/sal/sal.md | 826 ++++++ documentation/scons/figures/hello-menu.png | Bin 0 -> 26887 bytes .../scons/figures/hello-rtconfig.png | Bin 0 -> 35579 bytes documentation/scons/figures/hello-value.png | Bin 0 -> 18391 bytes documentation/scons/figures/hello.png | Bin 0 -> 12137 bytes documentation/scons/figures/kconfig.png | Bin 0 -> 26501 bytes documentation/scons/figures/scons.png | Bin 0 -> 19885 bytes documentation/scons/scons.md | 596 ++++ .../thread-comm/figures/07mb_ops.png | Bin 0 -> 15888 bytes .../thread-comm/figures/07mb_work.png | Bin 0 -> 19351 bytes .../thread-comm/figures/07msg_ops.png | Bin 0 -> 17167 bytes .../thread-comm/figures/07msg_syn.png | Bin 0 -> 8484 bytes .../thread-comm/figures/07msg_work.png | Bin 0 -> 20149 bytes .../thread-comm/figures/07signal_ops.png | Bin 0 -> 14158 bytes .../thread-comm/figures/07signal_work.png | Bin 0 -> 12088 bytes documentation/thread-comm/thread-comm.md | 1042 +++++++ .../thread-sync/figures/06event_ops.png | Bin 0 -> 15630 bytes .../thread-sync/figures/06event_use.png | Bin 0 -> 6474 bytes .../thread-sync/figures/06event_work.png | Bin 0 -> 8782 bytes .../figures/06inter_ths_commu1.png | Bin 0 -> 12388 bytes .../figures/06inter_ths_commu2.png | Bin 0 -> 15412 bytes .../thread-sync/figures/06mutex_ops.png | Bin 0 -> 16522 bytes .../thread-sync/figures/06mutex_work.png | Bin 0 -> 11006 bytes .../figures/06priority_inherit.png | Bin 0 -> 15110 bytes .../figures/06priority_inversion.png | Bin 0 -> 12638 bytes .../thread-sync/figures/06sem_lock.png | Bin 0 -> 13842 bytes .../thread-sync/figures/06sem_ops.png | Bin 0 -> 17112 bytes .../thread-sync/figures/06sem_work.png | Bin 0 -> 10970 bytes documentation/thread-sync/thread-sync.md | 1333 +++++++++ .../thread/figures/04Object_container.png | Bin 0 -> 12721 bytes .../thread/figures/04Task_switching.png | Bin 0 -> 5672 bytes .../thread/figures/04main_thread.png | Bin 0 -> 6586 bytes documentation/thread/figures/04thread_ops.png | Bin 0 -> 16006 bytes documentation/thread/figures/04thread_sta.png | Bin 0 -> 36119 bytes .../thread/figures/04thread_stack.png | Bin 0 -> 10039 bytes .../thread/figures/04time_slience.png | Bin 0 -> 7550 bytes documentation/thread/thread.md | 773 +++++ documentation/timer/figures/05timer_env.png | Bin 0 -> 15332 bytes .../timer/figures/05timer_linked_list.png | Bin 0 -> 7921 bytes .../timer/figures/05timer_linked_list2.png | Bin 0 -> 10094 bytes documentation/timer/figures/05timer_ops.png | Bin 0 -> 16251 bytes .../timer/figures/05timer_skip_list.png | Bin 0 -> 4220 bytes .../timer/figures/05timer_skip_list2.png | Bin 0 -> 9348 bytes .../timer/figures/05timer_skip_list3.png | Bin 0 -> 10845 bytes documentation/timer/timer.md | 525 ++++ .../ulog/figures/ulog_async_vs_sync.png | Bin 0 -> 27242 bytes documentation/ulog/figures/ulog_example.png | Bin 0 -> 64169 bytes .../ulog/figures/ulog_example_all_format.png | Bin 0 -> 66053 bytes .../ulog/figures/ulog_example_async.png | Bin 0 -> 62413 bytes .../ulog/figures/ulog_example_filter20.png | Bin 0 -> 89831 bytes .../ulog/figures/ulog_example_filter30.png | Bin 0 -> 87573 bytes .../ulog/figures/ulog_example_filter40.png | Bin 0 -> 85829 bytes .../ulog/figures/ulog_example_hexdump.png | Bin 0 -> 73641 bytes .../ulog/figures/ulog_example_syslog.png | Bin 0 -> 83596 bytes documentation/ulog/figures/ulog_framework.png | Bin 0 -> 15082 bytes .../ulog/figures/ulog_framework_backend.png | Bin 0 -> 46447 bytes .../ulog/figures/ulog_menuconfig_async.png | Bin 0 -> 45191 bytes .../ulog/figures/ulog_menuconfig_format.png | Bin 0 -> 35114 bytes .../ulog/figures/ulog_syslog_format.png | Bin 0 -> 9234 bytes documentation/ulog/ulog.md | 800 +++++ .../utest/figures/UtestAppStruct-1.png | Bin 0 -> 8311 bytes .../utest/figures/UtestRunLogShow.png | Bin 0 -> 470209 bytes .../utest/figures/testcase-runflowchart.jpg | Bin 0 -> 26094 bytes documentation/utest/utest.md | 274 ++ 255 files changed, 21076 insertions(+), 95 deletions(-) create mode 100644 documentation/README.md create mode 100644 documentation/at/at.md create mode 100644 documentation/at/figures/at_framework.jpg create mode 100644 documentation/at/figures/at_multiple_client.jpg create mode 100644 documentation/basic/basic.md create mode 100644 documentation/basic/figures/03Memory_distribution.png create mode 100644 documentation/basic/figures/03Startup_process.png create mode 100644 documentation/basic/figures/03kernel_Framework.png create mode 100644 documentation/basic/figures/03kernel_object.png create mode 100644 documentation/basic/figures/03kernel_object2.png rename documentation/{ => contribution_guide}/coding_style_cn.md (100%) rename documentation/{coding_style_en.txt => contribution_guide/coding_style_en.md} (100%) create mode 100644 documentation/contribution_guide/contribution_guide.md create mode 100644 documentation/contribution_guide/figures/add_usb_driver.png create mode 100644 documentation/contribution_guide/figures/branch.png create mode 100644 documentation/contribution_guide/figures/checkok.png create mode 100644 documentation/contribution_guide/figures/cla.png create mode 100644 documentation/contribution_guide/figures/cloneformgit.png create mode 100644 documentation/contribution_guide/figures/cloneformgit2.png create mode 100644 documentation/contribution_guide/figures/git_clone.png create mode 100644 documentation/contribution_guide/figures/pr_description.png create mode 100644 documentation/contribution_guide/figures/pull_request_step2.png create mode 100644 documentation/device/adc/adc.md create mode 100644 documentation/device/adc/figures/adc-p.png create mode 100644 documentation/device/device.md create mode 100644 documentation/device/figures/block-dev.png create mode 100644 documentation/device/figures/io-call.png create mode 100644 documentation/device/figures/io-dev.png create mode 100644 documentation/device/figures/io-fun-call.png create mode 100644 documentation/device/figures/io-parent.png create mode 100644 documentation/device/figures/wtd-uml.png create mode 100644 documentation/device/hwtimer/hwtimer.md create mode 100644 documentation/device/i2c/figures/i2c1.png create mode 100644 documentation/device/i2c/figures/i2c2.png create mode 100644 documentation/device/i2c/figures/i2c3.png create mode 100644 documentation/device/i2c/i2c.md create mode 100644 documentation/device/pin/figures/pin2.png create mode 100644 documentation/device/pin/pin.md create mode 100644 documentation/device/pwm/figures/pwm-f.png create mode 100644 documentation/device/pwm/figures/pwm-l.png create mode 100644 documentation/device/pwm/pwm.md create mode 100644 documentation/device/rtc/rtc.md create mode 100644 documentation/device/sensor/sensor.md create mode 100644 documentation/device/spi/figures/spi1.png create mode 100644 documentation/device/spi/figures/spi2.png create mode 100644 documentation/device/spi/figures/spi5.png create mode 100644 documentation/device/spi/spi.md create mode 100644 documentation/device/uart/figures/uart-dma.png create mode 100644 documentation/device/uart/figures/uart-int.png create mode 100644 documentation/device/uart/figures/uart1.png create mode 100644 documentation/device/uart/uart.md create mode 100644 documentation/device/watchdog/watchdog.md create mode 100644 documentation/device/wlan/figures/an0026_1.png create mode 100644 documentation/device/wlan/figures/an0026_3.png create mode 100644 documentation/device/wlan/figures/an0026_4.png create mode 100644 documentation/device/wlan/figures/an0026_5.png create mode 100644 documentation/device/wlan/wlan.md create mode 100644 documentation/dlmodule/README.md rename documentation/{ => doxygen}/Doxyfile (100%) create mode 100644 documentation/env/env.md create mode 100644 documentation/env/figures/Add_Env_To_Right-click_Menu-1.png create mode 100644 documentation/env/figures/Add_Env_To_Right-click_Menu-2.png create mode 100644 documentation/env/figures/Add_Env_To_Right-click_Menu-3.png create mode 100644 documentation/env/figures/cd_cmd.png create mode 100644 documentation/env/figures/console.png create mode 100644 documentation/env/figures/hotkey.png create mode 100644 documentation/env/figures/menuconfig_packages_list.png create mode 100644 documentation/env/figures/menuconfig_s.png create mode 100644 documentation/env/figures/menuconfig_s_auto_prj.png create mode 100644 documentation/env/figures/menuconfig_s_auto_update.png create mode 100644 documentation/env/figures/q1.png create mode 100644 documentation/env/figures/scons_done.png create mode 100644 documentation/env/figures/use_scons.png create mode 100644 documentation/figures/02Software_framework_diagram.png create mode 100644 documentation/filesystem/README.md create mode 100644 documentation/filesystem/figures/elm-fat-mkfs.png create mode 100644 documentation/filesystem/figures/fs-dir-mg.png create mode 100644 documentation/filesystem/figures/fs-dir.png create mode 100644 documentation/filesystem/figures/fs-layer.png create mode 100644 documentation/filesystem/figures/fs-mg.png create mode 100644 documentation/filesystem/figures/fs-reg-block.png create mode 100644 documentation/filesystem/figures/fs-reg.png create mode 100644 documentation/finsh/figures/finsh-hd.png create mode 100644 documentation/finsh/figures/finsh-mdk.png create mode 100644 documentation/finsh/figures/finsh-run.png create mode 100644 documentation/finsh/finsh.md create mode 100644 documentation/interrupt/figures/09fun1.png create mode 100644 documentation/interrupt/figures/09fun2.png create mode 100644 documentation/interrupt/figures/09interrupt_handle.png create mode 100644 documentation/interrupt/figures/09interrupt_ops.png create mode 100644 documentation/interrupt/figures/09interrupt_reque.png create mode 100644 documentation/interrupt/figures/09interrupt_table.png create mode 100644 documentation/interrupt/figures/09interrupt_work.png create mode 100644 documentation/interrupt/figures/09interrupt_work_process.png create mode 100644 documentation/interrupt/figures/09interrupt_work_sta.png create mode 100644 documentation/interrupt/figures/09relation.png create mode 100644 documentation/interrupt/figures/09ths_switch.png create mode 100644 documentation/interrupt/interrupt.md create mode 100644 documentation/introduction/figures/02Software_framework_diagram.png create mode 100644 documentation/introduction/introduction.md create mode 100644 documentation/kernel-porting/figures/10pendsv.png create mode 100644 documentation/kernel-porting/figures/10stack.png create mode 100644 documentation/kernel-porting/figures/10switch.png create mode 100644 documentation/kernel-porting/figures/10switch2.png create mode 100644 documentation/kernel-porting/figures/10ths_env1.png create mode 100644 documentation/kernel-porting/figures/10ths_env2.png create mode 100644 documentation/kernel-porting/kernel-porting.md create mode 100644 documentation/memory/figures/08Memory_distribution.png create mode 100644 documentation/memory/figures/08heap_ops.png create mode 100644 documentation/memory/figures/08memheap.png create mode 100644 documentation/memory/figures/08mempool.png create mode 100644 documentation/memory/figures/08mempool_ops.png create mode 100644 documentation/memory/figures/08mempool_work.png create mode 100644 documentation/memory/figures/08slab.png create mode 100644 documentation/memory/figures/08smem_work.png create mode 100644 documentation/memory/figures/08smem_work2.png create mode 100644 documentation/memory/figures/08smem_work3.png create mode 100644 documentation/memory/memory.md create mode 100644 documentation/network/figures/net-hello.png create mode 100644 documentation/network/figures/net-layer.png create mode 100644 documentation/network/figures/net-osi.png create mode 100644 documentation/network/figures/net-recv.png create mode 100644 documentation/network/figures/net-send.png create mode 100644 documentation/network/figures/net-tcp-s.png create mode 100644 documentation/network/figures/net-tcp.png create mode 100644 documentation/network/figures/net-udp-client.png create mode 100644 documentation/network/figures/net-udp-server.png create mode 100644 documentation/network/figures/net-udp.png create mode 100644 documentation/network/network.md create mode 100644 documentation/pm/figures/pm_architecture.png create mode 100644 documentation/pm/figures/pm_description.png create mode 100644 documentation/pm/figures/pm_sequence.png create mode 100644 documentation/pm/figures/pm_system.png create mode 100644 documentation/pm/pm.md create mode 100644 documentation/posix/README.md create mode 100644 documentation/quick-start/figures/10.png create mode 100644 documentation/quick-start/figures/11.png create mode 100644 documentation/quick-start/figures/14.png create mode 100644 documentation/quick-start/figures/5.png create mode 100644 documentation/quick-start/figures/6.png create mode 100644 documentation/quick-start/figures/7.png create mode 100644 documentation/quick-start/figures/8.png create mode 100644 documentation/quick-start/figures/9.png create mode 100644 documentation/quick-start/figures/compile.jpg create mode 100644 documentation/quick-start/figures/debug.jpg create mode 100644 documentation/quick-start/keil-installation/figures/1.png create mode 100644 documentation/quick-start/keil-installation/figures/12.png create mode 100644 documentation/quick-start/keil-installation/figures/13.png create mode 100644 documentation/quick-start/keil-installation/figures/2.png create mode 100644 documentation/quick-start/keil-installation/figures/3.png create mode 100644 documentation/quick-start/keil-installation/figures/4.png create mode 100644 documentation/quick-start/keil-installation/keil-installation.md create mode 100644 documentation/quick-start/quick-start.md create mode 100644 documentation/quick-start/quick_start_qemu/figures/echo-cat.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/env.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/env_menu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/env_menu_ubuntu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/finsh-cmd.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/finsh-thread.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/menuconfig.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/menuconfig_menu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/mkfs-sd0.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/python3-version.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/qemu.bat.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/qemu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/qemubsp.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/scons.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-env-menu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-filesys.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-menuconfig.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-mkfs-sd0.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-msh-help.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-pkg-menuconfig.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-pkg-set.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-pkgs-add-to-menu.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-qemu-bsp.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-qume-sh.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-rtconfig-py.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-save.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-scons.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-select-pkg.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-thread-timer.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/ubuntu-update-pkg.png create mode 100644 documentation/quick-start/quick_start_qemu/figures/win-menuconfig.png create mode 100644 documentation/quick-start/quick_start_qemu/quick_start_qemu.md create mode 100644 documentation/quick-start/quick_start_qemu/quick_start_qemu_linux.md create mode 100644 documentation/quick-start/rtthread_simulator_v0.1.0.7z create mode 100644 documentation/quick-start/rtthread_simulator_v0.1.0.zip delete mode 100644 documentation/roadmap-1.2.0.md delete mode 100644 documentation/roadmap-2.1.0.md create mode 100644 documentation/sal/figures/sal_frame.jpg create mode 100644 documentation/sal/sal.md create mode 100644 documentation/scons/figures/hello-menu.png create mode 100644 documentation/scons/figures/hello-rtconfig.png create mode 100644 documentation/scons/figures/hello-value.png create mode 100644 documentation/scons/figures/hello.png create mode 100644 documentation/scons/figures/kconfig.png create mode 100644 documentation/scons/figures/scons.png create mode 100644 documentation/scons/scons.md create mode 100644 documentation/thread-comm/figures/07mb_ops.png create mode 100644 documentation/thread-comm/figures/07mb_work.png create mode 100644 documentation/thread-comm/figures/07msg_ops.png create mode 100644 documentation/thread-comm/figures/07msg_syn.png create mode 100644 documentation/thread-comm/figures/07msg_work.png create mode 100644 documentation/thread-comm/figures/07signal_ops.png create mode 100644 documentation/thread-comm/figures/07signal_work.png create mode 100644 documentation/thread-comm/thread-comm.md create mode 100644 documentation/thread-sync/figures/06event_ops.png create mode 100644 documentation/thread-sync/figures/06event_use.png create mode 100644 documentation/thread-sync/figures/06event_work.png create mode 100644 documentation/thread-sync/figures/06inter_ths_commu1.png create mode 100644 documentation/thread-sync/figures/06inter_ths_commu2.png create mode 100644 documentation/thread-sync/figures/06mutex_ops.png create mode 100644 documentation/thread-sync/figures/06mutex_work.png create mode 100644 documentation/thread-sync/figures/06priority_inherit.png create mode 100644 documentation/thread-sync/figures/06priority_inversion.png create mode 100644 documentation/thread-sync/figures/06sem_lock.png create mode 100644 documentation/thread-sync/figures/06sem_ops.png create mode 100644 documentation/thread-sync/figures/06sem_work.png create mode 100644 documentation/thread-sync/thread-sync.md create mode 100644 documentation/thread/figures/04Object_container.png create mode 100644 documentation/thread/figures/04Task_switching.png create mode 100644 documentation/thread/figures/04main_thread.png create mode 100644 documentation/thread/figures/04thread_ops.png create mode 100644 documentation/thread/figures/04thread_sta.png create mode 100644 documentation/thread/figures/04thread_stack.png create mode 100644 documentation/thread/figures/04time_slience.png create mode 100644 documentation/thread/thread.md create mode 100644 documentation/timer/figures/05timer_env.png create mode 100644 documentation/timer/figures/05timer_linked_list.png create mode 100644 documentation/timer/figures/05timer_linked_list2.png create mode 100644 documentation/timer/figures/05timer_ops.png create mode 100644 documentation/timer/figures/05timer_skip_list.png create mode 100644 documentation/timer/figures/05timer_skip_list2.png create mode 100644 documentation/timer/figures/05timer_skip_list3.png create mode 100644 documentation/timer/timer.md create mode 100644 documentation/ulog/figures/ulog_async_vs_sync.png create mode 100644 documentation/ulog/figures/ulog_example.png create mode 100644 documentation/ulog/figures/ulog_example_all_format.png create mode 100644 documentation/ulog/figures/ulog_example_async.png create mode 100644 documentation/ulog/figures/ulog_example_filter20.png create mode 100644 documentation/ulog/figures/ulog_example_filter30.png create mode 100644 documentation/ulog/figures/ulog_example_filter40.png create mode 100644 documentation/ulog/figures/ulog_example_hexdump.png create mode 100644 documentation/ulog/figures/ulog_example_syslog.png create mode 100644 documentation/ulog/figures/ulog_framework.png create mode 100644 documentation/ulog/figures/ulog_framework_backend.png create mode 100644 documentation/ulog/figures/ulog_menuconfig_async.png create mode 100644 documentation/ulog/figures/ulog_menuconfig_format.png create mode 100644 documentation/ulog/figures/ulog_syslog_format.png create mode 100644 documentation/ulog/ulog.md create mode 100644 documentation/utest/figures/UtestAppStruct-1.png create mode 100644 documentation/utest/figures/UtestRunLogShow.png create mode 100644 documentation/utest/figures/testcase-runflowchart.jpg create mode 100644 documentation/utest/utest.md diff --git a/documentation/README.md b/documentation/README.md new file mode 100644 index 0000000000..6166cb3eab --- /dev/null +++ b/documentation/README.md @@ -0,0 +1,136 @@ +# RT-Thread + +RT-Thread (Real-Time Thread) is an open source embedded real-time operating system and released under Apache License v2.0. It has a strong scalability: from a nano kernel running on a tiny MCU, for example ARM Cortex-M0, or Cortex-M3/4/7, to a rich feature system running on MIPS32, ARM Cortex-A, even the emerging open source RISC-V architecture is supported. RT-Thread can run either on single-core systems or on symmetric multi-core processors(SMP) systems. + +## Introduction + +RT-Thread has not noly a real-time kernel, but also rich components. Its architecture is as follows: + +![RT-Thread system framework](figures/02Software_framework_diagram.png) + +- **Kernel**: It includes preemptive multi-task real-time scheduler, and infrastructure such as semaphore, mutex, mailbox, message queue, signal, event, memory management, timer management, interrupt management, etc. It also includes libcpu/BSP (file related to chip transplantation/board support package). +- **components**: It is a software unit on the RT-Thread kernel layer, such as command line (FinSH), device driver framework (Device Drivers), network framework, virtual file system (FAT, YAFFS, UFFS, ROM/RAM file system, etc.), TCP/IP network protocol stack (lwIP), libc/POSIX standard layer and so on. Generally, a software component is placed in a folder in the RT-Thread/components directory, and each software component is described by a *SConscript* file and added to the RT-Thread construction system. When a software component is opened in the system configuration, it will be compiled and linked to the final RT-Thread firmware. +- **Packages**: It is a middleware running on RT-Thread IoT operating system platform and facing different application fields. Packages consist of description information, source code or library files. These packages can be provided by RT-Thread, third-party developers and enterprises, and the license agreement of the packages is provided by the author of the packages. These software packages have strong reusability and high modularity, which greatly facilitates application developers to build their desired application systems in the shortest time. For more package information, visit the [RT-Thread package repository](https://github.com/RT-Thread-packages). + +## Licence + +RT-Thread is an open source software and has been licensed under Apache License Version 2.0 since v3.1.1. License information and copyright information can generally be seen at the beginning of the code: + +``` +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ +``` + +To avoid possible future license conflicts, developers need to sign a Contributor License Agreement (CLA) when submitting PR to RT-Thread. + +> Note: Because the BSP also contains the code provided by the chip manufacturer, this part of the code follows the license provided by the chip manufacturer, such as STM32 HAL, NXP, Atmel, etc. Relevant codes are usually only used in the chips of the corresponding manufacturers. + +## Supported Architectures + +RT-Thread RTOS can support many architectures,and has covered the major architectures in current applications. Architecture and chip manufacturer involved: + +- **ARM Cortex-M0/M0+**:manufacturers like ST +- **ARM Cortex-M3**:manufacturers like ST、Winner Micro、MindMotion, ect. +- **ARM Cortex-M4**:manufacturers like ST、Nuvton、NXP、GigaDevice、Realtek、Ambiq Micro, ect. +- **ARM Cortex-M7**:manufacturers like ST、NXP +- **ARM Cortex-M23**:manufacturers like GigaDevice +- **ARM Cortex-R4** +- **ARM Cortex-A8/A9**:manufacturers like NXP +- **ARM7**:manufacturers like Samsung +- **ARM9**:manufacturers like Allwinner、Xilinx 、GOKE +- **ARM11**:manufacturers like Fullhan +- **MIPS32**:manufacturers like loongson、Ingenic +- **RISC-V**:manufacturers like Hifive、Kendryte +- **ARC**:manufacturers like SYNOPSYS +- **DSP**:manufacturers like TI +- **C-Sky** +- **x86** + +## Supported IDE and Compiler + +The main IDE/compilers supported by RT-Thread are: + +- MDK KEIL +- IAR +- GCC + +Use Python-based [scons](http://www.scons.org) for command-line builds. + +# Source Code and Tools + +**Get the source code**: The source code of RT-Thread is hosted on Github, and click on the link to get the source code. + +- [Download RT-Thread source code](https://github.com/RT-Thread/rt-thread) + +**Get the Env Tool**: To better help developers, the RT-Thread team also provides Env tools (or Env scripts for Linux/MacOS). On Windows, Env tool is a development assistant tool launched by RT-Thread. It provides compiling and building environment, graphical system configuration and software package management functions for project projects based on RT-Thread operating system. Its built-in menuconfig provides a simple and easy-to-use configuration tailoring tool, which can tailor the kernel, components and software packages freely, so that the system can be built in the way of building blocks. + +- [Download Env Tool]() +- [User manual of Env](env/env.md) + +# Getting Started + +RT-Thread BSP can be compiled directly and downloaded to the corresponding development board for use. In addition, RT-Thread also provides qemu-vexpress-a9 BSP, which can be used without hardware platform. See the getting started guide below for details. + +- [Getting Started of QEMU (Windows)](quick-start/quick_start_qemu/quick_start_qemu.md) +- [Getting Started of QEMU (Ubuntu)](quick-start/quick_start_qemu/quick_start_qemu_linux.md) + +# Help + +Any questions can be asked in the [issue section of rtthread-manual-doc](https://github.com/RT-Thread/rtthread-manual-doc/issues). By creating a new issue to describe your questions, community members will answer them. + +# Contribution + +If you are interested in RT-Thread and want to join in the development of RT-Thread and become a code contributor,please refer to the [Code Contribution Guide](documentation/contribution_guide/contribution_guide.md). + +# Manual Catalogue + +- [RT-Thread Introduction](introduction/introduction.md) +- [Start Guide: Simulate STM32F103 on KEIL simulator](quick-start/quick-start.md) + +**Kernel** + +- [Kernel Basics](basic/basic.md) +- [Thread Management](thread/thread.md) +- [Clock&Timer Management](timer/timer.md) +- [Inter-thread Synchronization](thread-sync/thread-sync.md) +- [Inter-thread Communication](thread-comm/thread-comm.md) +- [Memory Management](memory/memory.md) +- [Interrupt Management](interrupt/interrupt.md) +- [Kernel Porting](kernel-porting/kernel-porting.md) + +**Tool** + +- [User Manual of Env](env/env.md) +- [SCons](scons/scons.md) + +**Device** + +- [I/O Device Framework](device/device.md) +- [PIN Device](device/pin/pin.md) +- [UART Device](device/uart/uart.md) +- [ADC Device](device/adc/adc.md) +- [I2C Bus Device](device/i2c/i2c.md) +- [SPI Device](device/spi/spi.md) +- [PWM Device](device/pwm/pwm.md) +- [RTC Device](device/rtc/rtc.md) +- [HWTIMER Device](device/hwtimer/hwtimer.md) +- [WATCHDOG Device](device/watchdog/watchdog.md) +- [WLAN Device](device/wlan/wlan.md) +- [Sensor Device](device/sensor/sensor.md) + +**Components** + +- [FinSH Console](finsh/finsh.md) +- [Virtual File System](filesystem/README.md) +- [utest Framework](utest/utest.md) +- [Dynamic Module: dlmodule](dlmodule/README.md) +- [Socket Abstraction Layer: SAL](sal/sal.md) +- [AT Commands](at/at.md) +- [POSIX Interface](posix/README.md) +- [Ulog Log](ulog/ulog.md) +- [Power Management: PM](pm/pm.md) +- [Network Framework](network/network.md) + diff --git a/documentation/at/at.md b/documentation/at/at.md new file mode 100644 index 0000000000..7997084f3f --- /dev/null +++ b/documentation/at/at.md @@ -0,0 +1,895 @@ +# AT Commands # + +## Introduction to AT Commands + +AT Commands was originally a control protocol invented by Hayes, which invented MODEM, to control MODEM. Later, with the upgrade of network bandwidth, the dial-up MODEM with very low speed basically exited the general market, but the AT command was retained. At that time, the major mobile phone manufacturers jointly developed a set of AT commands for GSM to control the GSM module of the mobile phone. The AT command evolved on this basis and added the GSM 07.05 standard and the later GSM 07.07 standard to achieve a more robust standardization. + +In the subsequent GPRS control, 3G module, etc., all use AT commands to control, AT commands gradually become the actual standard in product development. Nowadays, AT commands are also widely used in embedded development. AT commands are the protocol interfaces of the main chip and communication module. The hardware interface is usually the serial port, so the main control device can complete various operations through simple commands and hardware design. + +**The AT commands is a way of applying device connections and data communication between the AT Server and the AT Client.** The basic structure is shown below: + +![AT Command Set](figures/at_framework.jpg) + +1. The AT command consists of three parts: prefix, body, and terminator. The prefix consists of the character AT; the body consists of commands, parameters, and possibly used data; the terminator typically is `` (`"\r\n"`). + +2. The implementation of the AT function requires the AT Server and the AT Client to work together. + +3. The AT server is mainly used to receive commands sent by the AT client, determine the received commands and parameter formats, and deliver corresponding response data or actively send data. + +4. The AT client is mainly used to send commands, wait for the AT Server to respond, and parse the AT Server response data or the actively sent data to obtain related information. + +5. A variety of data communication methods (UART, SPI, etc.) are supported between AT Server and AT Client. Currently, the most commonly used serial port UART communication method. + +6. The data that the AT Server sends to the AT Client is divided into two types: response data and URC data. + +- Response Data: The AT Server response status and information received by the AT Client after sending the command. + +- URC Data: The data that the AT Server actively sends to the AT client generally appears in some special cases, such as disconnected WIFI connection, TCP receiving data, etc. These situations often require the user to perform corresponding operations. + +With the popularization of AT commands, more and more embedded products use AT commands. The AT commands are used as the protocol interfaces of the main chip and the communication module. The hardware interface is generally a serial port, so that the master device can performs a variety of operations using simple commands and hardware design. + +Although the AT command has standardization to a certain degree, the AT commands supported by different chips are not completely unified, which directly increases the complexity to use. There is no uniform way to handle the sending and receiving of AT commands and the parsing of data. Moreover, when the AT device is used to connect to the network, the simple device connection and data transceiving functions can only be completed by commands, and it is difficult to adapt the upper layer network application interface, which is not conducive to the development of the product device. + +In order to facilitate the user to use AT commands to easily adapt to different AT modules, RT-Thread provides AT components for AT device connectivity and data communication. The implementation of the AT component consists of both client and server. + +## Introduction to AT Components + +The AT component is based on the implementation of the `AT Server` and `AT Client` of the RT-Thread system. The component completes the AT command transmission, command format and parameter judgment, command response, response data reception, response data parsing, URC data processing, etc.. Command data interaction process. + +Through the AT component, the device can use the serial port to connect to other devices to send and receive parsed data. It can be used as an AT Server to allow other devices or even the computer to connect to complete the response of sending data. It can also start the CLI mode in the local shell to enable the device to support AT Server and AT Client at the same time. Server and AT Client features, this mode is mostly used for device development and debugging. + +**AT component resource usage:** + +- AT Client: 4.6K ROM and 2.0K RAM; + +- AT Server: 4.0K ROM and 2.5K RAM; + +- AT CLI: 1.5K ROM and almost no RAM is used. + +Overall, the AT component resources are extremely small, making them ideal for use in embedded devices with limited resources. The AT component code is primarily located in `rt-thread/components/net/at/`. The main functions includes : + +**Main Functions of AT Server:** + +- Basic commands: Implement a variety of common basic commands (ATE, ATZ, etc.); +- Command compatibility: The command supports ignoring case and improving command compatibility; +- Command detection: The command supports custom parameter expressions and implements self-detection of received command parameters. +- Command registration: Provides a simple way to add user-defined commands, similar to the way the `finsh/msh` command is added; +- Debug mode: Provides AT Server CLI command line interaction mode, mainly used for device debugging. + +**Main Functions of AT Client:** + +- URC data processing: The complete URC data processing method; +- Data analysis: Supports the analysis of custom response data, and facilitates the acquisition of relevant information in the response data; +- Debug mode: Provides AT Client CLI command line interaction mode, mainly used for device debugging. +- AT Socket: As an extension of AT Client function, it uses AT command to send and receive as the basis, implements the standard BSD Socket API, completes the data sending and receiving function, and enables users to complete device networking and data communication through AT commands. +- Multi-client support: The AT component currently supports multiple clients running simultaneously. + +## AT Server ## + +### AT Server Configuration ### + +When we use the AT Server feature in the AT component, we need to define the following configuration in rtconfig.h: + +| **Macro Definition** | **Description** | +| ---- | ---- | +|RT_USING_AT| Enable AT component | +|AT_USING_SERVER |Enable AT Server function| +|AT_SERVER_DEVICE |Define the serial communication device name used by AT Server on the device to ensure that it is not used and the device name is unique, such as `uart3` device.| +|AT_SERVER_RECV_BUFF_LEN|The maximum length of data received by the AT Server device| +|AT_CMD_END_MARK_CRLF|Determine the line terminator of the received command | +|AT_USING_CLI | Enable server-command-line interaction mode | +|AT_DEBUG|Enable AT component DEBUG mode to display more debug log information | +|AT_PRINT_RAW_CMD | Enable real-time display AT command communication data mode for easy debugging | + +For different AT devices, there are several formats of the line terminator of the sending commands: `"\r\n"`、`"\r"`、`"\n"`, the user needs to select the corresponding line terminator according to the device type connected to the AT Server. And then determine the end of the send command line, defined as follows: + +| **Macro Definition** | **Terminator** | +| ---- | ---- | +| AT_CMD_END_MARK_CRLF | `"\r\n"` | +| AT_CMD_END_MARK_CR | `"\r"` | +| AT_CMD_END_MARK_LF | `"\n"` | + +The above configuration options can be added by Env tool. The specific path in Env is as follows: + +```c +RT-Thread Components ---> + Network ---> + AT commands ---> + [*] Enable AT commands + [*] Enable debug log output + [*] Enable AT commands server + (uart3) Server device name + (256) The maximum length of server data accepted + The commands new line sign (\r\n) ---> + [ ] Enable AT commands client + [*] Enable command-line interface for AT commands + [ ] Enable print RAW format AT command communication data +``` + +After the add configuration is complete, you can use the command line to rebuild the project, or use `scons` to compile. + +### AT Server Initialization ### + +After enabling the AT Server in Env, you need to initialize it at startup aims to enable the AT Server function. If the component has been initialized automatically, no additional initialization is required. Otherwise, you need to call the following function in the initialization task. : + +```c +int at_server_init(void); +``` +The AT Server initialization function, which belongs to the application layer function, needs to be called before using the AT Server function or using the AT Server CLI function. `at_server_init()` function completes initialization of resources stored by AT commands ,such as data segment initialization, AT Server device initialization, and semaphore usage by the AT Server, and creates an at_server thread for parsing the receipt data in the AT Server. + +After the AT Server is successfully initialized, the device can be used as an AT server to connect to the AT client's serial device for data communication, or use a serial port conversion tool to connect to the PC, so that the PC-side serial debugging assistant can communicate with the AT client as data communication. + +### Add custom AT commands ### + +At present, the format of the AT command set used by AT devices of different manufacturers does not have a completely uniform standard, so the AT Server in the AT component only supports some basic general AT commands, such as ATE, AT+RST, etc. These commands can only be used to meet the basic operation of the device. If users want to use more functions, they need to implement custom AT Server commands for different AT devices.AT component provides AT command addition method similar to finsh/msh command addition method, which is convenient for users to implement the required commands. + +The basic commands currently supported by AT Server are as follows: + +- AT: AT test command; +- ATZ: The device is restored to factory settings; +- AT+RST: Reboot device ; +- ATE: ATE1 turns on echo, ATE0 turns off echo; +- AT&L: List all commands; +- AT+UART: Set the serial port information. + +AT commands can implement different functions depending on the format of the incoming parameters. For each AT command, there are up to four functions, as described below: + +- Test Function: `AT+=?` , used to query the command's parameter, format and value range; +- Query Function: `AT+?`, used to return the current value of the command parameter; +- Setting Function: `AT+=...` , used for user-defined parameter values; +- Execution Function: `AT+`, used to perform related operations. + +The four functions of each command do not need to be fully implemented. When you add the AT Server command, you can implement one or several of the above functions according to your needs. Unimplemented functions can be represented by `NULL` . And then through custom commands, the add function is added to the list of basic commands. The addition method is similar to the way the `finsh/msh` command is added. The function for adding commands is as follows: + +```c +AT_CMD_EXPORT(_name_, _args_expr_, _test_, _query_, _setup_, _exec_); +``` + +|**Parameter** |**Description** | +| ---------- | ------------------------------- | +| `_name_ ` | AT command name | +| `_args_expr_` | AT command parameter expression; (NULL means no parameter, `<>` means mandatory parameter and `[]` means optional parameter) | +| `_test_` | AT test function name; (NULL means no parameter) | +| `_query_` | AT query function name; (ibid.) | +| `_setup_` | AT setup function name; (ibid.) | +| `_exec_` | AT performs the function name; (ibid.) | + +The AT command registration example is as follows. The `AT+TEST` command has two parameters. The first parameter is a mandatory parameter, and the second parameter is an optional parameter. The command implements the query function and the execution function: + +```c +static at_result_t at_test_exec(void) +{ + at_server_printfln("AT test commands execute!"); + + return 0; +} +static at_result_t at_test_query(void) +{ + at_server_printfln("AT+TEST=1,2"); + + return 0; +} + +AT_CMD_EXPORT("AT+TEST", =[,], NULL, at_test_query, NULL, at_test_exec); +``` + +### AT Server APIs + +#### Send Data to the Client (no newline) + +```c +void at_server_printf(const char *format, ...); +``` + +This function is used by the AT Server to send fixed-format data to the corresponding AT Client serial device through the serial device. The data ends without a line break. Used to customize the function functions of AT commands in AT Server. + +| **Parameter** | **D**escription | +|------|-------------------------| +| format | Customize the expression of the input data | +| ... | Input data list, variable parameters | + +#### Send Data to the Client (newline) + +```c +void at_server_printfln(const char *format, ...); +``` + +This function is used by the AT Server to send fixed-format data to the corresponding AT Client serial device through the serial device, with a newline at the end of the data. Used to customize the function functions of AT commands in AT Server. + +| **Parameter** | **Description** | +|------|-------------------------| +| format | Customize the expression of the input data | +| ... | Input data list, variable parameters | + +#### Send Command Execution Results to the Client + +```c +void at_server_print_result(at_result_t result); +``` + +This function is used by the AT Server to send command execution results to the corresponding AT Client serial device through the serial device. The AT component provides a variety of fixed command execution result types. When you customize a command, you can use the function to return the result directly; + +| **Parameter** | **Description** | +|------|-----------------| +| result | Command execution result type | + +The command execution result type in the AT component is given in the enumerated type, as shown in the following table: + +| Types of Command Execution Result | Description | +|------------------------|------------------| +| AT_RESULT_OK | Command Execution Succeeded | +| AT_RESULT_FAILE | Command Execution Failed | +| AT_RESULT_NULL | Command No Result | +| AT_RESULT_CMD_ERR | Command Input Error | +| AT_RESULT_CHECK_FAILE | Parameter Expression Matching Error | +| AT_RESULT_PARSE_FAILE | Parameter Parsing Error | + +See the following code to learn how to use the `at_server_print_result` function: + +```c +static at_result_t at_test_setup(const char *args) +{ + if(!args) + { + /* If the parameter error after incoming orders, returns expression match error results */ + at_server_print_result(AT_RESULT_CHECK_FAILE); + } + + /* Return to successful execution under normal conditions */ + at_server_print_result(AT_RESULT_OK); + return 0; +} +static at_result_t at_test_exec(void) +{ + // execute some functions of the AT command. + + /* This command does not need to return results */ + at_server_print_result(AT_RESULT_NULL); + return 0; +} +AT_CMD_EXPORT("AT+TEST", =,, NULL, NULL, at_test_setup, at_test_exec); +``` + +#### Parsing Input Command Parameters + +```c +int at_req_parse_args(const char *req_args, const char *req_expr, ...); +``` + +Parsing input command parameters Among the four function functions of an AT command, only the setting function has an input parameter, and the input parameter is to remove the rest of the AT command, for example, a command input is `"AT+TEST=1,2,3,4"`, Then set the input parameter of the function to the parameter string `"=1,2,3,4"` . + +The command parsing function is mainly used in the AT function setting function, which is used to parse the incoming string parameter and obtain corresponding multiple input parameters for performing the following operations. The standard `sscanf` parsing grammar used in parsing grammar here will also be described in detail later in the AT Client parameter parsing function. + +| **Parameter** | **Description** | +|---------|-----------------------------------------------| +| req_args | The incoming parameter string of the request command | +| req_expr | Custom parameter parsing expression for parsing the above incoming parameter data | +| ... | Output parsing parameter list, which is a variable parameter | +| **Return** | -- | +| >0 | Successful, returns the number of variable parameters matching the parameter expression | +| =0 | Failed, no parameters matching the parameter expression | +| -1 | Failed, parameter parsing error | + +See the following code to learn how to use the at_server_print_result function: + +```c +static at_result_t at_test_setup(const char *args) +{ + int value1,value2; + + /* The input standard format of args should be "=1, 2", "=%d, %d" is a custom parameter parsing expression, and the result is parsed and stored in the value1 and value2 variables. */ + if (at_req_parse_args(args, "=%d,%d", &value1, &value2) > 0) + { + /* Data analysis succeeds, echoing data to AT Server serial device */ + at_server_printfln("value1 : %d, value2 : %d", value1, value2); + + /* The data is parsed successfully. The number of parsing parameters is greater than zero. The execution is successful. */ + at_server_print_result(AT_RESULT_OK); + } + else + { + /* Data parsing failed, the number of parsing parameters is not greater than zero, and the parsing failure result type is returned. */ + at_server_print_result(AT_RESULT_PARSE_FAILE); + } + return 0; +} +/* Add the "AT+TEST" command to the AT command list. The command parameters are formatted as two mandatory parameters and . */ +AT_CMD_EXPORT("AT+TEST", =,, NULL, NULL, at_test_setup, NULL); +``` + +#### Portation-related interfaces + +AT Server supports a variety of basic commands (ATE, ATZ, etc.) by default. The function implementation of some commands is related to hardware or platform and requires user-defined implementation. The AT component source code `src/at_server.c` file gives the weak function definition of the migration file. The user can create a new migration file in the project to implement the following function to complete the migration interface, or modify the weak function to complete the migration interface directly in the file. + +1. Device restart function: `void at_port_reset(void);`. This function completes the device soft restart function and is used to implement the basic command AT+RST in AT Server. + +2. The device restores the factory settings function: `void at_port_factory_reset(void);`. This function completes the device factory reset function and is used to implement the basic command ATZ in AT Server. + +3. Add a command table in the link script (add only in gcc, no need to add in keil and iar) + +If you use the gcc toolchain in your project, you need to add the *section* corresponding to the AT server command table in the link script. Refer to the following link script: + +```c +/* Constant data goes into FLASH */ +.rodata : +{ + ... + + /* section information for RT-thread AT package */ + . = ALIGN(4); + __rtatcmdtab_start = .; + KEEP(*(RtAtCmdTab)) + __rtatcmdtab_end = .; + . = ALIGN(4); +} > CODE +``` + +## AT Client + +### AT Client Configuration + +When we use the AT Client feature in the AT component, we need to define the following configuration in rtconfig.h: + +```c +#define RT_USING_AT +#define AT_USING_CLIENT +#define AT_CLIENT_NUM_MAX 1 +#define AT_USING_SOCKET +#define AT_USING_CLI +#define AT_PRINT_RAW_CMD +``` + +- `RT_USING_AT`: Used to enable or disable the AT component; + +- `AT_USING_CLIENT`: Used to enable the AT Client function; + +- `AT_CLIENT_NUM_MAX`: Maximum number of AT clients supported at the same time. + +- `AT_USING_SOCKET`: Used by the AT client to support the standard BSD Socket API and enable the AT Socket function. + +- `AT_USING_CLI`: Used to enable or disable the client command line interaction mode. + +- `AT_PRINT_RAW_CMD`: Used to enable the real-time display mode of AT command communication data for easy debugging. + +The above configuration options can be added directly to the `rtconfig.h` file or added by the Env. The specific path in Env is as follows: + +```c +RT-Thread Components ---> + Network ---> + AT commands ---> + [*] Enable AT commands + [ ] Enable debug log output + [ ] Enable AT commands server + [*] Enable AT commands client + (1) The maximum number of supported clients + [*] Enable BSD Socket API support by AT commnads + [*] Enable command-line interface for AT commands + [ ] Enable print RAW format AT command communication data +``` + +After the configuration is complete, you can use the command line to rebuild the project, or use `scons` to compile. + +### AT Client Initialization ### + +After configuring the AT Client, you need to initialize it at startup aims to enable the AT client function. If the component has been initialized automatically, no additional initialization is required. Otherwise, you need to call the following function in the initialization task: + +```c +int at_client_init(const char *dev_name, rt_size_t recv_bufsz); +``` + +The AT Client initialization function, which belongs to the application layer function, needs to be called before using the AT Client function or using the AT Client CLI function. The `at_client_init()` function completes the initialization of the AT Client device, the initialization of the AT Client porting function, the semaphore and mutex used by the AT Client, and other resources, and creates the `at_client` thread for parsing the data received in the AT Client and for processing the URC data. + +### AT Client data receiving and sending ### + +The main function of the AT Client is to send AT commands, receive data, and parse data. The following is an introduction to the processes and APIs related to AT Client data reception and transmission. + +Related structure definition: + +```c +struct at_response +{ + /* response buffer */ + char *buf; + /* the maximum response buffer size */ + rt_size_t buf_size; + /* the number of setting response lines + * == 0: the response data will auto return when received 'OK' or 'ERROR' + * != 0: the response data will return when received setting lines number data */ + rt_size_t line_num; + /* the count of received response lines */ + rt_size_t line_counts; + /* the maximum response time */ + rt_int32_t timeout; +}; +typedef struct at_response *at_response_t; +``` + +In the AT component, this structure is used to define a control block for AT command response data, which is used to store or limit the data format of the AT command response data. + +- `buf` is used to store the received response data. Note that the data stored in the buf is not the original response data, but the data of the original response data removal terminator (`"\r\n"`). Each row of data in the buf is split by '\0' to make it easy to get data by row. +- `buf_size` is a user-defined length of the received data that is most supported by this response. The length of the return value is defined by the user according to his own command. +- `line_num` is the number of rows that the user-defined response data needs to receive. **If there is no response line limit requirement, it can be set to 0.** +- `line_counts` is used to record the total number of rows of this response data. +- `timeout` is the user-defined maximum response time for this response data. + +`buf_size`、`line_num`、`timeout` parameters in the structure are restricted conditions, which are set when the structure is created, and other parameters are used to store data parameters for later data analysis. + +Introduction to related API interfaces: + +#### Create a Response Structure + +```c +at_response_t at_create_resp(rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout); +``` + +| **Parameter** | **Description** | +|---------|-----------------------------------------| +| buf_size | Maximum length of received data supported by this response | +| line_num | This response requires the number of rows of data to be returned. The number of rows is divided by a standard terminator (such as "\r\n"). If it is 0, it will end the response reception after receiving the "OK" or "ERROR" data; if it is greater than 0, it will return successfully after receiving the data of the current set line number. | +| timeout | The maximum response time of the response data, receiving data timeout will return an error | +| **Return** | -- | +| != NULL | Successful, return a pointer to the response structure | +| = NULL | Failed, insufficient memory | + +This function is used to create a custom response data receiving structure for later receiving and parsing the send command response data. + +#### Delete a Response Structure + +```c +void at_delete_resp(at_response_t resp); +``` + +| **Parameter** | **Description** | +|----|-------------------------| +| resp | The response structure pointer to be deleted | + +This function is used to delete the created response structure object, which is generally paired with the **at_create_resp** creation function. + +#### Set the Parameters of Response Structure + +```c +at_response_t at_resp_set_info(at_response_t resp, rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout); +``` + +| **Parameter** | **Description** | +|---------|----------------------------------| +| resp | Response structure pointer that has been created | +| buf_size | Maximum length of received data supported by this response | +| line_num | This response requires the number of rows of data to be returned. The number of lines is divided by the standard terminator. If it is 0, the response is received after receiving the "OK" or "ERROR" data. If it is greater than 0, the data is successfully returned after receiving the data of the currently set line number. | +| timeout | The maximum response time of the response data, receiving data timeout will return an error. | +| **Return** | -- | +| != NULL | Successful, return a pointer to the response structure | +| = NULL | Failed, insufficient memory | + +This function is used to set the response structure information that has been created. It mainly sets the restriction information on the response data. It is generally used after creating the structure and before sending the AT command. This function is mainly used to send commands when the device is initialized, which can reduce the number of times the response structure is created and reduce the code resource occupation. + +#### Send a Command and Receive a Response + +```c +rt_err_t at_exec_cmd(at_response_t resp, const char *cmd_expr, ...); +``` + +| **Parameter** | **Description** | +|---------|-----------------------------| +| resp | Response structure body pointer created | +| cmd_expr | Customize the expression of the input command | +| ... | Enter the command data list, a variable parameter | +| **Return** | -- | +| >=0 | Successful | +| -1 | Failed | +| -2 | Failed, receive response timed out | + +This function is used by the AT Client to send commands to the AT Server and wait for a response. `resp` is a pointer to the response structure that has been created. The AT command uses the variable argument input of the match expression. **You do not need to add a command terminator at the end of the input command.** + +Refer to the following code to learn how to use the above AT commands to send and receive related functions: + +```c +/* + * Program listing: AT Client sends commands and receives response routines + */ + +#include +#include /* AT component header file */ + +int at_client_send(int argc, char**argv) +{ + at_response_t resp = RT_NULL; + + if (argc != 2) + { + LOG_E("at_cli_send [command] - AT client send commands to AT server."); + return -RT_ERROR; + } + + /* Create a response structure, set the maximum support response data length to 512 bytes, the number of response data lines is unlimited, and the timeout period is 5 seconds. */ + resp = at_create_resp(512, 0, rt_tick_from_millisecond(5000)); + if (!resp) + { + LOG_E("No memory for response structure!"); + return -RT_ENOMEM; + } + + /* Send AT commands and receive AT Server response data, data and information stored in the resp structure */ + if (at_exec_cmd(resp, argv[1]) != RT_EOK) + { + LOG_E("AT client send commands failed, response error or timeout !"); + return -ET_ERROR; + } + + /* Command sent successful */ + LOG_D("AT Client send commands to AT Server success!"); + + /* Delete response structure */ + at_delete_resp(resp); + + return RT_EOK; +} +#ifdef FINSH_USING_MSH +#include +/* Output at_Client_send to msh */ +MSH_CMD_EXPORT(at_Client_send, AT Client send commands to AT Server and get response data); +#endif +``` + +The implementation principle of sending and receiving data is relatively simple. It mainly reads and writes the serial port device bound by the AT client, and sets the relevant number of rows and timeout to limit the response data. It is worth noting that the `res` response needs to be created first. The structure passed `in_exec_cmd` function for data reception. When the `at_exec_cmd` function's parameter `resp` is NULL, it means that the data sent this time **does not consider processing the response data and directly returns the result**. + +### AT Client Data Parsing Method ### + +After the data is normally acquired, the response data needs to be parsed, which is one of the important functions of the AT Client. Parsing of data in the AT Client provides a parsed form of a custom parsing expression whose parsing syntax uses the standard `sscanf` parsing syntax. Developers can use the custom data parsing expression to respond to useful information in the data, provided that the developer needs to review the relevant manual in advance to understand the basic format of the AT Server device response data that the AT Client connects to. The following is a simple AT Client data parsing method through several functions and routines. + +#### Get Response Data for the Specified Line Number + +```c +const char *at_resp_get_line(at_response_t resp, rt_size_t resp_line); +``` + +| **Parameter** | **Description** | +|----------|-----------------------------| +| resp |Response structure pointer | +| resp_line | Required line number for obtaining data | +| **Return** | -- | +| != NULL | Successful, return a pointer to the corresponding line number data | +| = NULL | Failed, input line number error | + +This function is used to get a row of data with the specified line number in the AT Server response data. The line number is judged by the standard data terminator. The above send and receive functions `at_exec_cmd` have recorded and processed the data and line numbers of the response data in the `resp` response structure, where the data information of the corresponding line number can be directly obtained. + +#### Get Response Data by the Specified Keyword + +```c +const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword); +``` + +| **Parameter** | **Description** | +|-------|-----------------------------| +| resp |Response structure pointer | +| keyword | Keyword information | +| **Return** | -- | +| != NULL | Successful, return a pointer to the corresponding line number data | +| = NULL | Failed, no keyword information found | + +This function is used to get a corresponding row of data by keyword in the AT Server response data. + +#### Parse Response Data for the Specified Line Number + +```c +int at_resp_parse_line_args(at_response_t resp, rt_size_t resp_line, const char *resp_expr, ...); +``` + +| **Parameter** | **Description** | +|----------|---------------------------------| +| resp |Response structure pointer | +| resp_line | Parsed data line number required, **from the start line number count 1** | +| resp_expr | Custom parameter parsing expression | +| ... | Parsing the parameter list as a variable parameter | +| **Return** | -- | +| >0 | Successful, return the number of parameters successfully parsed | +| =0 | Failed, no parameters matching the parsing expression | +| -1 | Failed, parameter parsing error | + +This function is used to get a row of data with the specified line number in the AT Server response data, and parse the parameters in the row data. + +#### Parse Response Data for a Row with Specified Keyword + +```c +int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...); +``` + +| **Parameter** | **Description** | +|----------|---------------------------------| +| resp |Response structure pointer | +| keyword | Keyword information | +| resp_expr | Custom parameter parsing expression | +| ... | Parsing the parameter list as a variable parameter | +| **Return** | -- | +| >0 | Successful, return the number of parameters successfully parsed | +| =0 | Failed, no parameters matching the parsing expression | +| -1 | Failed, parameter parsing error | + +This function is used to get a row of data containing a keyword in the AT Server response data and parse the parameters in the row data. + +The data parsing syntax uses the standard `sscanf` syntax, the content of the syntax is more, developers can search their parsing syntax, here two procedures are used to introduce the simple use method. + +#### Serial Port Configuration Information Analysis Example + +The data sent by the client: + +```c +AT+UART? +``` + +The response data obtained by the client: + +```c +UART=115200,8,1,0,0\r\n +OK\r\n +``` + +The pseudo code is parsed as follows: + +```c +/* Create a server response structure, the maximum length of user-defined receive data is 64 */ +resp = at_create_resp(64, 0, rt_tick_from_millisecond(5000)); + +/* Send data to the server and receive response data in the resp structure */ +at_exec_cmd(resp, "AT+UART?"); + +/* Analyze the serial port configuration information, 1 means parsing the first line of response data, '%*[^=]' means ignoring the data before the equal sign */ +at_resp_parse_line_args(resp, 1,"%*[^=]=%d,%d,%d,%d,%d", &baudrate, &databits, &stopbits, &parity, &control); +printf("baudrate=%d, databits=%d, stopbits=%d, parity=%d, control=%d\n", + baudrate, databits, stopbits, parity, control); + +/* Delete server response structure */ +at_delete_resp(resp); +``` + +#### IP and MAC Address Resolution Example #### + +The data sent by the client: + +```c +AT+IPMAC? +``` + +The response data obtained by the server: + +```c +IP=192.168.1.10\r\n +MAC=12:34:56:78:9a:bc\r\n +OK\r\n +``` + +The pseudo code is parsed as follows: + +```c +/* Create a server response structure, the maximum length of user-defined receive data is 128 */ +resp = at_create_resp(128, 0, rt_tick_from_millisecond(5000)); + +at_exec_cmd(resp, "AT+IPMAC?"); + +/* Customize the parsing expression to parse the information in the current line number data */ +at_resp_parse_line_args(resp, 1,"IP=%s", ip); +at_resp_parse_line_args(resp, 2,"MAC=%s", mac); +printf("IP=%s, MAC=%s\n", ip, mac); + +at_delete_resp(resp); +``` + +The key to parsing data is to correctly define the expression. Because the response data of the different device manufacturers is not unique to the response data of the AT device, only the form of the custom parsing expression can be obtained to obtain the required information. The design of the `at_resp_parse_line_args` parsing parameter function is based on the `sscanf` data parsing method. Before using, the developer needs to understand the basic parsing syntax and then design the appropriate parsing syntax in combination with the response data. If the developer does not need to parse the specific parameters, you can use the `at_resp_get_line` function to get the specific data of a row. + +### AT Client URC Data Processing ### + +The processing of URC data is another important feature of AT Client. URC data is the data that is actively sent by the server. It cannot be received by the above data sending and receiving functions. The URC data format and function are different for different devices. Therefore, the URC data processing mode needs to be customized. The AT component provides a list management method for the processing of URC data. Users can customize the addition of URC data and its execution functions to the management list, so the processing of URC data is also the main porting work of AT Client. + +Related structure: + +```c +struct at_urc +{ + const char *cmd_prefix; // URC data prefix + const char *cmd_suffix; // URC data suffix + void (*func)(const char *data, rt_size_t size); // URC data execution function +}; +typedef struct at_urc *at_urc_t; +``` + +Each URC data has a structure control block that defines and determines the prefix and suffix of the URC data, as well as the execution function of the URC data. A piece of data can be defined as URC data only if it matches the prefix and suffix of the URC exactly. The URC data execution function is executed immediately after the matching URC data is obtained. So developers adding a URC data requires a custom matching prefix, suffix, and execution function. + + +#### URC Data List Initialization + +```c +void at_set_urc_table(const struct at_urc *table, rt_size_t size); +``` + +| **Parameter** | **Description** | +|-----|-----------------------| +| table | URC data structure array pointer | +| size | Number of URC data | + +This function is used to initialize the developer-defined URC data list, mainly used in the AT Client porting function. + +The example of AT Client migration is given below. This example mainly shows the specific processing of URC data in the `at_client_port_init()` porting function. The developer can directly apply it to his own porting file, or customize the implementation function to complete the AT Client porting. + +```c +static void urc_conn_func(const char *data, rt_size_t size) +{ + /* WIFI connection success information */ + LOG_D("AT Server device WIFI connect success!"); +} + +static void urc_recv_func(const char *data, rt_size_t size) +{ + /* Received data from the server */ + LOG_D("AT Client receive AT Server data!"); +} + +static void urc_func(const char *data, rt_size_t size) +{ + /* Device startup information */ + LOG_D("AT Server device startup!"); +} + +static struct at_urc urc_table[] = { + {"WIFI CONNECTED", "\r\n", urc_conn_func}, + {"+RECV", ":", urc_recv_func}, + {"RDY", "\r\n", urc_func}, +}; + +int at_client_port_init(void) +{ + /* Add multiple URC data to the URC list and execute the URC function when receiving data that matches both the URC prefix and the suffix */ + at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0])); + return RT_EOK; +} +``` + +### AT Client Other APIs Introduction + +#### Send Specified Length Data + +```c +rt_size_t at_client_send(const char *buf, rt_size_t size); +``` + +| **Parameter** | **Description** | +|----|-----------------------------| +| buf | Pointer to send data | +| size | Length of data sent | +| **Return** | -- | +| >0 | Successful, return the length of the data sent | +| <=0 | Failed | + +This function is used to send the specified length data to the AT Server device through the AT Client device, which is mostly used for the AT Socket function. + +#### Receive Specified Length Data + +```c +rt_size_t at_client_recv(char *buf, rt_size_t size,rt_int32_t timeout); +``` + +| **Parameter** | **Description** | +|----|-----------------------------| +| buf | Pointer to receive data | +| size | Maximum length for receiving data | +| timeout | Receive data timeout (tick) | +| **Return** | -- | +| >0 | Successful, return the length of the data received successfully | +| <=0 | Failed, receiving data error or timeout | + +This function is used to receive data of a specified length through the AT Client device, and is mostly used for the AT Socket function. This function can only be used in URC callback handlers. + +#### Set the line terminator for receiving data #### + +```c +void at_set_end_sign(char ch); +``` + +| Parameter | 描述 | +| ----- | ----- | +|ch | Line terminator | +| **Return** | **描述** | +|- | - | + +This function is used to set the line terminator, which is used to judge the end of a row of data received by the client, and is mostly used for the AT Socket function. + +#### Waiting for module initialization to complete #### + +```c +int at_client_wait_connect(rt_uint32_t timeout); +``` + +| Parameter | Description | +| ----- | ----- | +|timeout | Waiting timeout | +| **Return** | **Description** | +|0 | Successful | +|<0 | Failed, no data returned during the timeout period | + +This function is used to cyclically send AT commands when the AT module starts, until the module responds to the data, indicating that the module is successfully started. + +### AT Client Multi-Client Support ### + +In general, the device as the AT Client only connects to one AT module (the AT module acts as the AT Server) and can directly use the above functions of data transmission and reception and command parsing. In a few cases, the device needs to connect multiple AT modules as the AT Client. In this case, the multi-client support function of the device is required. + +The AT component provides support for multi-client connections and provides two different sets of function interfaces: **Single-Client Mode Functions** and **Multi-Client Mode Functions**. + +- Single-Client Mode Function: This type of function interface is mainly used when the device is connected to only one AT module, or when the device is connected to multiple AT modules, it is used in the **first AT client**. + +- Multi-Client Mode Function: This type of function interface mainly uses devices to connect multiple AT modules. + +The advantages and disadvantages of the two different mode functions and in different application scenarios are as follows: + +![at client modes comparison](figures/at_multiple_client.jpg) + +The single client mode function definition is mainly different from the single connection mode function. The definition of the incoming client object is different. The single client mode function uses the first initialized AT client object by default, and the multi-client mode function can Pass in the user-defined custom client object. The function to get the client object is as follows: + +```c +at_client_t at_client_get(const char *dev_name); +``` + +This function obtains the AT client object created by the device through the incoming device name, which is used to distinguish different clients when connecting multiple clients. + +The single client mode and multi-client mode function interface definitions differ from the following functions:: + +| Single-Client Mode Functions | Multi-Client Mode Functions | +| ----------------------------| ---------------------------------------| +| at_exec_cmd(...) | at_obj_exec_cmd(client, ...) | +| at_set_end_sign(...) | at_obj_set_end_sign(client, ...) | +| at_set_urc_table(...) | at_obj_set_urc_table(client, ...) | +| at_client_wait_connect(...) | at_client_obj_wait_connect(client, ...) | +| at_client_send(...) | at_client_obj_send(client, ...) | +| at_client_recv(...) | at_client_obj_recv(client, ...) | + +The two modes of client data transmission and parsing are basically the same, and the function usage process is different, as shown below: + +```c +/* Single client mode function usage */ + +at_response_t resp = RT_NULL; + +at_client_init("uart2", 512); + +resp = at_create_resp(256, 0, 5000); + +/* Send commands using a single client mode function */ +at_exec_cmd(resp, "AT+CIFSR"); + +at_delete_resp(resp); +``` + +```c +/* Multi-client mode functions usage */ + +at_response_t resp = RT_NULL; +at_client_t client = RT_NULL; + +/* Initialize two AT clients */ +at_client_init("uart2", 512); +at_client_init("uart3", 512); + +/* Get the corresponding AT client object by name */ +client = at_client_get("uart3"); + +resp = at_create_resp(256, 0, 5000); + +/* Send commands using multi-client mode functions */ +at_obj_exec_cmd(client, resp, "AT+CIFSR"); + +at_delete_resp(resp); +``` + +The process differences used by other functions are similar to the above `at_obj_exec_cmd()` function. The main function is to obtain the client object through the `at_client_get() ` function, and then determine which client is the client through the incoming object to achieve multi-client support. + +## FAQs + +### Q: What should I do if the log on the shell shows an error when enabling the AT command to send and receive data real-time printing function. ? + +**A:** Increase the baudrate of the serial port device corresponding to the shell to 921600, improve the serial port printing speed, and prevent the printing error when the data is too large. + +### Q: When the AT Socket function is started, the compile prompt "The AT socket device is not selected, please select it through the env menuconfig". + +**A:** After the AT Socket function is enabled, the corresponding device model is enabled in the at device package by default. Enter the at device package, configure the device as an ESP8266 device, configure WIFI information, re-generate the project, compile and download. + +### Q: AT Socket function data reception timeout or data reception is not complete. + +**A:** The error may be that the receive data buffer in the serial device used by the AT is too small (RT_SERIAL_RB_BUFSZ default is 64 bytes), and the data is overwritten after the data is not received in time. The buffer size of the serial port receiving data (such as 256 bytes) is appropriately increased. diff --git a/documentation/at/figures/at_framework.jpg b/documentation/at/figures/at_framework.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6bc88adc3ca68cd8325d35bf9a92031601f5a873 GIT binary patch literal 7339 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 JDrL+={}-v;_=o@i literal 0 HcmV?d00001 diff --git a/documentation/at/figures/at_multiple_client.jpg b/documentation/at/figures/at_multiple_client.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e800d69779f46fa16670c1758a4f0d777c8910a2 GIT binary patch literal 36370 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 O00K`}KbLh*2~7YvPoYcz literal 0 HcmV?d00001 diff --git a/documentation/basic/basic.md b/documentation/basic/basic.md new file mode 100644 index 0000000000..0b6315f1a8 --- /dev/null +++ b/documentation/basic/basic.md @@ -0,0 +1,754 @@ +# Kernel Basics + +This chapter gives a brief introduction to the software architecture of the RT-Thread kernel, beginning with its composition and implementation. While also introducing RT-Thread kernel-related concepts for beginners. +After understanding this chapter, readers will have an elementary understanding of the RT Thread kernel and will be able to answer questions such as - + +- What are the constituents of the kernel? +- How does the system startup? +- How is the memory distributed? +- What are the methods of kernel configuration? + +In the nutshell, this is only a brief introduction to software architecture decomposition and implementation of the real-time kernel. This will give understanding and concepts of how RT-Thread kernel works togther. After learning from this chapter, readers will have basic knowledge of each kernel components, system booting up proccesses, memory allocation and distrubtion, and methods of kernel configuration. + +## **Table of Contents** + +1. [Introduction to RT-Thread Kernel](#introduction-to-rt-thread-kernel) +2. [RT-Thread Startup Process](#rt-thread-startup-process) +3. [RT-Thread Program Memory Distribution](#rt-thread-program-memory-distribution) +4. [RT-Thread Automatic Initialization Mechanism](#rt-thread-automatic-initialization-mechanism) +5. [RT-Thread Kernel Object Model](#rt-thread-kernel-object-model) + +## Introduction to RT-Thread Kernel + +Kernel is the most basic and fundenmental part of an Operating System. Kernel service library and RT-Thread kernel libraries are interfacing between hardware and components/service layer. This includes the implementation of real-time kernel service library (rtservice.h/kservice.c) and other RT-Thread kernel libraries such as object management, thread management and scheduler, inter-thread communication management, clock management and memory management respectively. Below diagram is the core architecture diagram of the core kernel. + +![RT-Thread Kernel and its Substructure](figures/03kernel_Framework.png) + +Implementation of core kernel libraries are similar to a small set of standard C runtime library and it can run independently. For example, Standard C library (C runtime library) provides "strcpy", "memcpy", "printf", "scanf" and other function implementations. RT-Thread kernel libraries also provide the function implementations which are mainly used by Core Kernel. However, to avoid name conflicts, specifically functions' names are preceded with rt_. + + +The built of the Kernel will be vary depending on the complier. For example, using GNU GCC compiler, it will use more implementation from the standard C library. Last but not least, the minimum resource requirements of the Kernel is 3KB ROM and 1.2KB RAM. + + +### Thread Scheduling + +Thread is the smallest scheduling unit in the RT-Thread operating system. The thread scheduling algorithm is a **Priority-based Full Preemptive Multi-Thread** scheduling algorithm. +The system can support up to 256(0 - 255) thread priorities. For systems with tight resources, configurations with 8 or 32 thread priorities can be chosen(For example, STM32 has 32 thread priorities as per the default configuration). Lower numbers have a higher priority where 0 represents the highest priority furthermore the lowest priority(highest number) is reserved for idle threads. +RT-Thread supports the creation of multiple threads with the same priority. Threads having the same priority are scheduled with a Time Slice Rotation Scheduling algorithm so that each thread runs for the same amount of time. +The number of threads is bounded by the memory of the hardware platform and not the system. + +Thread management will be covered in detail in the "Thread Management" chapter. + +### Clock Management + +RT-Thread's Clock management is based upon a **clock beat**, which is the smallest clock unit in the RT-Thread operating system. +The RT-Thread timer provides two types of timer mechanisms: +- **One-Shot Timer** - Triggers only one timer event after startup and then stops automatically. +- **Periodic Trigger Timer** - Periodically triggers timer events until the user manually stops the timer or it will continue to operate. + +The RT-Thread timer can be set to the `HARD_TIMER` or the `SOFT_TIMER` mode depending on the context in which the timeout function is executed. + +The timer service is concluded using a timer timing callback i.e. a timeout function. The user can select the appropriate type of timer according to their real-time requirements for timing processing. + +Timer will be explained further in the "Clock Management" chapter. + +### Synchronization between Threads + +RT-Thread uses thread semaphores, mutexes, and event sets to achieve inter-thread synchronization. +Thread synchronizations happen through the acquisition and release of semaphore and mutexes. +The mutex uses priority inheritance to solve the common priority inversion problem in the real-time system. The thread synchronization mechanism allows threads to wait according to priorities or to acquire semaphores/mutexes following the First In First Out(FIFO) method. +Event sets are primarily used for synchronization between threads, they can achieve one-to-many and many-to-many synchronization. It allows "**OR** trigger"(*independent synchronization*) and "**AND** trigger"(*associative synchronization*) suitable for situations where threads are waiting for multiple events. + +The concepts of semaphores, mutexes, and event sets are detailed in the "Inter-Thread Synchronization" chapter. + +### Inter-Thread Communication + +RT-Thread supports communication mechanisms such as mailbox, message queue, etc. The mailbox's message length is fixed to 4 bytes. Whereas, message queue can receive messages in variable size and cache the messages in its own memory space. +Compared to a message queue, a mailbox is more efficient. The sending action of the mailbox and message queue can be safely used in an ISR (Interrupt Service Routine). The communication mechanism allows threads to wait by priority or to acquire by the First In First Out (FIFO) method. +The concept of mailbox and message queue will be explained in detail in the "Inter-Thread Communication" chapter. + +### Memory Management + +RT-Thread allows: +1. Static Memory Pool +2. Dynamic Memory Pool + +When the static memory pool has available memory, the time allocated to the memory block will be constant. +When the static memory pool is empty, the system will then request for suspending or blocking the thread of the memory block. The thread will abandon the request and return if the memory block is not obtained after waiting for a while, or the thread will abandon and return immediately. The waiting time depends on the waiting time parameter set when the memory block is applied. When other threads release the memory block to the memory pool, the system will wake up the thread if there are suspended threads waiting to be allocated of memory blocks. + +Under circumstances of different system resources, the dynamic memory heap management module respectively provides memory management algorithms for small memory systems and SLAB memory management algorithms for large memory systems. + +There is also a dynamic memory heap management called memheap, suitable for memory heaps in systems with multiple addresses that can be discontinuous. Using memheap, the user can "paste" multiple memory heaps together, letting them operate as if operating a memory heap. + +The concept of memory management will be explained in the "Memory Management" chapter. + +### I/O Device Management + +RT-Thread uses I2C, SPI, USB, UART, etc., as peripheral devices and is uniformly registered through the device. It realized a device management subsystem accessed by the name, and it can access hardware devices according to a unified API interface. On the device driver interface, depending on the characteristics of the embedded system, corresponding events can be attached to different devices. The driver notifies the upper application program when the device event is triggered. + +The concept of I/O device management will be explained in the "Device Model" and "General Equipment" chapters. + +## RT-Thread Startup Process + +The understanding of most codes usually starts from learning the startup process. We will firstly look for the source of the startup. Taking MDK-ARM as an example, the user program entry for MDK-ARM is the main() function located in the main.c file. The launching of the system starts from the assembly code startup_stm32f103xe.s, jumps to the C code, initializes the RT-Thread system function, and finally enters the user program entry main(). + +To complete the RT-Thread system function initialization before entering main(), we used the MDK extensions `$Sub$$` and `$Super$$`. Users can add the prefix of `$Sub$$` to main to make it a new function `$Sub$$main`. +`$Sub$$main` can call some functions to be added before main (here, RT-Thread system initialization function is added). Then, call `$Super$$main` to the main() function so that the user does not have to manage the system initialization before main(). + +For more information on the use of the `$Sub$$` and `$Super$$`extensions, see the ARM® Compiler v5.06 for μVision®armlink User Guide. + +Let's take a look at this code defined in components.c: + +```c +/* $Sub$$main Function */ +int $Sub$$main(void) +{ + rtthread_startup(); + return 0; +} +``` + +Here, the `$Sub$$main` function simply calls the rtthread_startup() function. RT-Thread allows multiple platforms and multiple compilers, and the rtthread_startup() function is a uniform entry point specified by RT-Thread, so the `$Sub$$main` function only needs to call the rtthread_startup() function (RT-Thread compiled using compiler GNU GCC is an example where it jumps directly from the assembly startup code section to the rtthread_startup() function and starts the execution of the first C code). +The rtthread_startup() function can be found in the code of components.c, the startup process of RT-Thread is as shown below: + +![System startup process](figures/03Startup_process.png) + +Code for the rtthread_startup() function is as follows: + +```c +int rtthread_startup(void) +{ + rt_hw_interrupt_disable(); + + /* Board level initialization: system heap initialization is required inside the function */ + rt_hw_board_init(); + + /* Print RT-Thread version information */ + rt_show_version(); + + /* Timer initialization */ + rt_system_timer_init(); + + /* Scheduler initialization */ + rt_system_scheduler_init(); + +#ifdef RT_USING_SIGNALS + /* Signal initialization */ + rt_system_signal_init(); +#endif + + /* Create a user main() thread here */ + rt_application_init(); + + /* Timer thread initialization */ + rt_system_timer_thread_init(); + + /* Idle thread initialization */ + rt_thread_idle_init(); + + /* Start scheduler */ + rt_system_scheduler_start(); + + /* Will not execute till here */ + return 0; +} +``` + +This part of the startup code can be roughly divided into four parts: + +1. Initialize hardware related to the system. +2. Initialize system kernel objects, such as timers, schedulers, and signals. +3. Create the main thread initialize various modules in the main thread one by one. +4. Initialize the timer thread, idle thread, and start the scheduler. + +Set the system clock in rt_hw_board_init() to provide heartbeat and serial port initialization for the system, bound to the system's input and output terminals to this serial port. Subsequent system operation information will be printed out from the serial port later. +The main() function is the user code entry for RT-Thread, and users can add their own applications to the main() function. + +```c +int main(void) +{ + /* user app entry */ + return 0; +} +``` + +## RT-Thread Program Memory Distribution + +The general MCU contains storage space that includes: on-chip Flash and on-chip RAM, RAM is equivalent to memory, and Flash is equivalent to hard disk. The compiler classifies a program into several parts, which are stored in different memory areas of the MCU. + +After the Keil project is compiled, there will prompt information for occupied space by the corresponding program, as shown below: + +``` +linking... +Program Size: Code=48008 RO-data=5660 RW-data=604 ZI-data=2124 +After Build - User command \#1: fromelf --bin.\\build\\rtthread-stm32.axf--output rtthread.bin +".\\build\\rtthread-stm32.axf" - 0 Error(s), 0 Warning(s). +Build Time Elapsed: 00:00:07 +``` + +The Program Size mentioned above contains the following sections: + +1) Code: code segment, section of code that store the program; + +2) RO-data: read-only data segment, stores the constants defined in the program; + +3) RW-data: read and write data segment, stores global variables initialized to non-zero values; + +4) ZI-data: 0 data segment, stores uninitialized global variables and initialized-to-0 variables; + +After compiling the project, there will be a generated .map file that describes the size and address of each function. The last few lines of the file also illustrate the relationship between the above fields: + +``` +Total RO Size (Code + RO Data) 53668 ( 52.41kB) +Total RW Size (RW Data + ZI Data) 2728 ( 2.66kB) +Total ROM Size (Code + RO Data + RW Data) 53780 ( 52.52kB) +``` + +1) RO Size contains Code and RO-data, indicating the size of the Flash occupied by the program; + +2) RW Size contains RW-data and ZI-data, indicating the size of the RAM occupied when operating; + +3) ROM Size contains Code, RO Data and RW Data, indicating the size of the Flash occupied by the programming system; + +Before the program runs, the file entity need to be burned into STM32 Flash, usually it is bin or hex file. The burned file is called executable image file. The left figure, Figure 3-3, shows the memory distribution after the executable image file is burned to STM32 which includes two parts: the RO segment and the RW segment. The RO segment stores data of Code and RO-data and the RW segment holds the data of RW-data. Since ZI-data is 0, it is not included in the image file. + +STM32 is launched from Flash by default after power-on. After launching, RW-data (initialized global variable) in RW segment is transferred to RAM, but RO segment is not transferred. This means execution code of CPU is read from Flash, the ZI segment is allocated according to the ZI address and size given by the compiler, and the RAM area is cleared. + +![RT-Thread Memory Distribution](figures/03Memory_distribution.png) + +The dynamic memory heap is unused RAM space, and the memory blocks requested and released by the application come from this space. + +As the following example: + +```c +rt_uint8_t* msg_ptr; +msg_ptr = (rt_uint8_t*) rt_malloc (128); +rt_memset(msg_ptr, 0, 128); +``` + +The 128-byte memory space pointed to by the msg_ptr pointer in the code is in the dynamic memory heap space. + +Some global variables are stored in the RW segment and the ZI segment. The RW segment stores the global variable with the initial value (the global variable in the constant form is placed in the RO segment, which is a read-only property), and uninitialized global variable is stored in the ZI segment, as in the following example: + +```c +#include + +const static rt_uint32_t sensor_enable = 0x000000FE; +rt_uint32_t sensor_value; +rt_bool_t sensor_inited = RT_FALSE; + +void sensor_init() +{ + /* ... */ +} +``` + +The sensor_value is stored in the ZI segment and is automatically initialized to zero after system startup (some library functions provided by the user program or compiler are initialized to zero). The sensor_inited variable is stored in the RW segment, and the sensor_enable is stored in the RO segment. + +RT-Thread Automatic Initialization Mechanism +----------------------- + +The automatic initialization mechanism means that the initialization function does not need to be called by explicit function. It only needs to be declared by macro definition at the function definition, and it will be executed during system startup. + +For example, calling a macro definition in the serial port driver to inform the function that needs to be called to initialize the system. The code is as follows: + +```c +int rt_hw_usart_init(void) /* Serial port initialization function */ +{ + ... ... + /* Register serial port 1 device */ + rt_hw_serial_register(&serial1, "uart1", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + uart); + return 0; +} +INIT_BOARD_EXPORT(rt_hw_usart_init); /* Use component auto-initialization mechanism */ +``` + +The last part of the sample code INIT_BOARD_EXPORT(rt_hw_usart_init) indicates that the automatic initialization function is used. In this way, rt_hw_usart_init() function is automatically called by the system, so where is it called? + +In the system startup flowchart, there are two functions: rt_components_board_init() and rt_components_init(), subsequent functions inside the box with the underlying color represent functions that are automatically initialized, where: + +1. “board init functions” are all initialization functions declared by INIT_BOARD_EXPORT(fn). +2. “pre-initialization functions” are all initialization functions declared by INIT_PREV_EXPORT(fn). +3. “device init functions” are all initialization functions declared by INIT_DEVICE_EXPORT(fn). +4. “components init functions” are all initialization functions declared by INIT_COMPONENT_EXPORT(fn). +5. “enviroment init functions” are all initialization functions declared by INIT_ENV_EXPORT(fn). +6. “application init functions” are all initialization functions declared by INIT_APP_EXPORT(fn). + +The rt_components_board_init() function executes earlier, mainly to initialize the relevant hardware environment. When this function is executed, it will traverse the initialization function table declared by INIT_BOARD_EXPORT(fn) and call each function. + +The rt_components_init() function is called and executed in the main thread created after the operating system is running. At this time, the hardware environment and the operating system have been initialized and the application-related code can be executed. The rt_components_init() function will transverse through the remaining few initialization function tables declared by macros. + +RT-Thread's automatic initialization mechanism uses a custom RTI symbol segment, it puts the function pointer that needs to be initialized at startup into this segment and forms an initialization function table which will be traversed during system startup. It calls the functions in the table to achieve the purpose of automatic initialization. + +The macro interface definitions used to implement the automatic initialization function are described in the following table: + +|Initialization sequence|Macro Interface |Description | +|----------------|------------------------------------|----------------------------------------------| +| 1 | INIT_BOARD_EXPORT(fn) | Very early initialization, the scheduler has not started yet. | +| 2 | INIT_PREV_EXPORT(fn) | Mainly used for pure software initialization, functions without too many dependencies | +| 3 | INIT_DEVICE_EXPORT(fn) | Peripheral driver initialization related, such as network card devices | +| 4 | INIT_COMPONENT_EXPORT(fn) | Component initialization, such as file system or LWIP | +| 5 | INIT_ENV_EXPORT(fn) | System environment initialization, such as mounting file systems | +| 6 | INIT_APP_EXPORT(fn) | Application initialization, such as application GUI | + +Initialization function actively declares through these macro interfaces, such as INIT_BOARD_EXPORT (rt_hw_usart_init), the linker will automatically collect all the declared initialization functions, placed in the RTI symbol segment, the symbol segment is located in the RO segment of the memory distribution. All functions in this RTI symbol segment are automatically called when the system is initialized. + +RT-Thread Kernel Object Model +--------------------- + +### Static and Dynamic Objects + +The RT-Thread kernel is designed with object-oriented method. The system-level infrastructures are all kernel objects such as threads, semaphores, mutexes, timers, and more. Kernel objects fall into two categories: static kernel objects and dynamic kernel objects. Static kernel objects are usually placed in RW and ZI segments, initialized in the program after system startup; dynamic kernel objects are created from the memory heap and then manually initialized. + +The following code is an example of static threads and dynamic threads: + + +```c +/* Thread 1 object and stack used while running */ +static struct rt_thread thread1; +static rt_uint8_t thread1_stack[512]; + +/* Thread 1 entry */ +void thread1_entry(void* parameter) +{ + int i; + + while (1) + { + for (i = 0; i < 10; i ++) + { + rt_kprintf("%d\n", i); + + /* Delay 100ms */ + rt_thread_mdelay(100); + } + } +} + +/* Thread 2 entry */ +void thread2_entry(void* parameter) +{ + int count = 0; + while (1) + { + rt_kprintf("Thread2 count:%d\n", ++count); + + /* Delay 50ms */ + rt_thread_mdelay(50); + } +} + +/* Thread routine initialization */ +int thread_sample_init() +{ + rt_thread_t thread2_ptr; + rt_err_t result; + + /* Initialize thread 1 */ + /* The thread entry is thread1_entry and the parameter is RT_NULL + * Thread stack is thread1_stack + * Priority is 200 and time slice is 10 OS Tick + */ + result = rt_thread_init(&thread1, + "thread1", + thread1_entry, RT_NULL, + &thread1_stack[0], sizeof(thread1_stack), + 200, 10); + + /* Start thread */ + if (result == RT_EOK) rt_thread_startup(&thread1); + + /* Create thread 2 */ + /* The thread entry is thread2_entry and the parameter is RT_NULL + * Stack space is 512, priority is 250, and time slice is 25 OS Tick + */ + thread2_ptr = rt_thread_create("thread2", + thread2_entry, RT_NULL, + 512, 250, 25); + + /* Start thread */ + if (thread2_ptr != RT_NULL) rt_thread_startup(thread2_ptr); + + return 0; +} +``` + +In this example, thread1 is a static thread object and thread2 is a dynamic thread object. The memory space of the thread1 object, including the thread control block thread1 and the stack space thread1_stack are all determined while compiling, because there is no initial value in the code and they are uniformly placed in the uninitialized data segment. The space used by thread2 is dynamically allocated includes the thread control block (the content pointed to by thread2_ptr) and the stack space. + +Static objects take up RAM space and is not depend on the memory heap manager. When allocating static objects, the time needed is determined. Dynamic objects depend on the memory heap manager. It requests RAM space while running. When the object is deleted, the occupied RAM space is released. These two methods have their own advantages and disadvantages, and can be selected according to actual needs. + +### Kernel Object Management Structure + +RT-Thread uses the kernel object management system to access/manage all kernel objects. Kernel objects contain most of the facilities in the kernel. These kernel objects can be statically allocated static objects and dynamic objects allocated from the system memory heap. . + +Because of this design for kernel object, RT-Thread is able to not depend on the specific memory allocation method, and the flexibility of the system is greatly improved. + +RT-Thread kernel objects include: threads, semaphores, mutexes, events, mailboxes, message queues and timers, memory pools, device drivers, and more. The object container contains information about each type of kernel object, including object type, size, and so on. The object container assigns a linked list to each type of kernel object. All kernel objects are linked to the linked list. The kernel object container and linked list of RT-Thread are shown in the following figure: + +![RT-Thread Kernel Object Container and Linked List](figures/03kernel_object.png) + +The following figure shows the derivation and inheritance relationships of various kernel objects in RT-Thread. For each specific kernel object and object control block, in addition to the basic structure, they have their own extended attributes (private attributes). Take thread control block for an example, the base object is extended, attributes like thread state, precedence and so on are added. These attributes are not used in the operation of the base class object and are only used in operations related to a specific thread. Therefore, from the object-oriented point of view, each concrete object can be considered as a derivative of an abstract object, inheriting the attributes of the base object and extending the attributes related to itself. + +![RT-Thread Kernel Object Inheritance Relationship](figures/03kernel_object2.png) + +In the object management module, a common data structure is defined to store the common attributes of various objects. Each specific object only needs to add some special attributes of its own and its own feature will be clearly expressed. + +The advantages of this design approach are: + +(1) Improve the reusability and scalability of the system. It is easy to add new object categories. It only needs to inherit the attributes of the general object and add a small amount of extension. + +(2) Provide a unified object operation mode, simplify the operation of various specific objects, and improve the reliability of the system. + +Derivations from object control block rt_object in the above figure includes: thread object, memory pool object, timer object, device object and IPC object (IPC: Inter-Process Communication. In RT-Thread real-time operating system, IPC objects is used for synchronization and communicate between threads); derivations from IPC objects includes: semaphores, mutexes, events, mailboxes, message queues, signals, etc. + +### Object Control Block + +Data structure of kernel object control block: + +```c +struct rt_object +{ + /* Kernel object name */ + char name[RT_NAME_MAX]; + /* Kernel object type */ + rt_uint8_t type; + /* Parameters to the kernel object */ + rt_uint8_t flag; + /* Kernel object management linked list */ + rt_list_t list; +}; +``` + +Types currently supported by kernel objects are as follows: + +```c +enum rt_object_class_type +{ + RT_Object_Class_Thread = 0, /* Object is thread type */ +#ifdef RT_USING_SEMAPHORE + RT_Object_Class_Semaphore, /* Object is semaphore type */ +#endif +#ifdef RT_USING_MUTEX + RT_Object_Class_Mutex, /* Object is mutex type */ +#endif +#ifdef RT_USING_EVENT + RT_Object_Class_Event, /* Object is event type */ +#endif +#ifdef RT_USING_MAILBOX + RT_Object_Class_MailBox, /* Object is mailbox type */ +#endif +#ifdef RT_USING_MESSAGEQUEUE + RT_Object_Class_MessageQueue, /* Object is message queue type */ +#endif +#ifdef RT_USING_MEMPOOL + RT_Object_Class_MemPool, /* Object is memory pool type */ +#endif +#ifdef RT_USING_DEVICE + RT_Object_Class_Device, /* Object is device type */ +#endif + RT_Object_Class_Timer, /* Object is timer type */ +#ifdef RT_USING_MODULE + RT_Object_Class_Module, /* Object is module */ +#endif + RT_Object_Class_Unknown, /* Object is unknown */ + RT_Object_Class_Static = 0x80 /* Object is a static object */ +}; +``` + +From the above type specification, we can see that if it is a static object, the highest bit of the object type will be 1 (which is the OR operation of RT_Object_Class_Static and other object types and operations). Otherwise it will be dynamic object, and the maximum number of object classes that the system can accommodate is 127. + +### Kernel Object Management + +Data structure of kernel object container: + +```c +struct rt_object_information +{ + /* Object type */ + enum rt_object_class_type type; + /* Object linked list */ + rt_list_t object_list; + /* Object size */ + rt_size_t object_size; +}; +``` + +A class of objects is managed by an rt_object_information structure, and each practical instance of such type of object is mounted to the object_list in the form of a linked list. The memory block size of this type of object is identified by object_size (the memory block each practical instance of each type of object is the same size). + +#### Initialization Object + +An uninitialized static object must be initialized before it can be used. The initialization object uses the following interfaces: + +```c +void rt_object_init(struct rt_object* object , + enum rt_object_class_type type , + const char* name) +``` + +When this function is called to initialize the object, the system will place the object into the object container for management, that is, initialize some parameters of the object, and then insert the object node into the object linked list of the object container. Input parameters of the function is described in the following table: + + +|Parameters|Description | +| -------- | ------------------------------------------------------------ | +| object | The object pointer that needs to be initialized must point to a specific object memory block, not a null pointer or a wild pointer. | +| type | The type of the object must be a enumeration type listed in rt_object_class_type, RT_Object_Class_Static excluded. (For static objects, or objects initialized with the rt_object_init interface, the system identifies it as an RT_Object_Class_Static type) | +| name | Name of the object. Each object can be set to a name, and the maximum length for the name is specified by RT_NAME_MAX. The system does not care if it uses ’`\0`’as a terminal symbol. | + +#### Detach Object + +Detach an object from the kernel object manager. The following interfaces are used to detach objects: + +```c +void rt_object_detach(rt_object_t object); +``` + +Calling this interface makes a static kernel object to be detached from the kernel object container, meaning the corresponding object node is deleted from the kernel object container linked list. After the object is detached, the memory occupied by the object will not be released. + +#### Allocate object + +The above descriptions are interfaces of objects initialization and detachment, both of which are under circumstances that object-oriented memory blocks already exist. But dynamic objects can be requested when needed. The memory space is freed for other applications when not needed. To request assigning new objects, you can use the following interfaces: + +```c +rt_object_t rt_object_allocate(enum rt_object_class_typetype , + const char* name) +``` + +When calling the above interface, the system first needs to obtain object information according to the object type (especially the size information of the object type for the system to allocate the correct size of the memory data block), and then allocate memory space corresponding to the size of the object from the memory heap. Next, to start necessary initialization for the object, and finally insert it into the object container linked list in which it is located. The input parameters for this function are described in the following table: + + +|Parameters |Description | +| ------------------ | ------------------------------------------------------------ | +| type | The type of the allocated object can only be of type rt_object_class_type other than RT_Object_Class_Static. In addition, the type of object allocated through this interface is dynamic, not static. | +| name | Name of the object. Each object can be set to a name, and the maximum length for the name is specified by RT_NAME_MAX. The system does not care if it uses ’`\0`’as a terminal symbol. | +|**Return** | —— | +| object handle allocated successfully | Allocate successfully | +| RT_NULL | Fail to allocate | + +#### Delete Object + +For a dynamic object, when it is no longer used, you can call the following interface to delete the object and release the corresponding system resources: + +```c +void rt_object_delete(rt_object_t object); +``` + +When the above interface is called, the object is first detached from the object container linked list, and then the memory occupied by the object is released. The following table describes the input parameters of the function: + + +|Parameter|Description | +|----------|------------| +| object | object handle | + +#### Identify objects + +Identify whether the specified object is a system object (static kernel object). The following interface is used to identify the object: + +```c +rt_err_t rt_object_is_systemobject(rt_object_t object); +``` + +Calling the rt_object_is_systemobject interface can help to identify whether an object is a system object. In RT-Thread operating system, a system object is also a static object, RT_Object_Class_Static bit is set to 1 on the object type identifier. Usually, objects that are initialized using the rt_object_init() method are system objects. The input parameters for this function are described in the following table: + +Input parameter of rt_object_is_systemobject() + +|**Parameter**|Description | +|----------|------------| +| object | Object handle | + +RT-Thread Kernel Configuration Example +---------------------- + +An important feature of RT-Thread is its high degree of tailorability, which allows for fine-tuning of the kernel and flexible removal of components. + +Configuration is mainly done by modifying the file under project directory - rtconfig.h. User can conditionally compile the code by opening/closing the macro definition in the file, and finally achieve the purpos e of system configuration and cropping, as follows: + +(1)RT-Thread Kernel part + +```c +/* Indicates the maximum length of the name of the kernel object. If the maximum length of the name of the object in the code is greater than the length of the macro definition, + * the extra part will be cut off. */ +#define RT_NAME_MAX 8 + +/* Set the number of aligned bytes when bytes are aligned. Usually use ALIGN(RT_ALIGN_SIZE) for byte alignment.*/ +#define RT_ALIGN_SIZE 4 + +/* Define the number of system thread priorities; usually define the priority of idle threads with RT_THREAD_PRIORITY_MAX-1 */ +#define RT_THREAD_PRIORITY_MAX 32 + +/* Define the clock beat. When it is 100, it means 100 tick per second, and a tick is 10ms. */ +#define RT_TICK_PER_SECOND 100 + +/* Check if the stack overflows, if not defined, close. */ +#define RT_USING_OVERFLOW_CHECK + +/* Define this macro to enable debug mode, if not defined, close. */ +#define RT_DEBUG +/* When debug mode is enabled: When the macro is defined as 0, the print component initialization information is turned off. When it is defined as 1, it is enabled. */ +#define RT_DEBUG_INIT 0 +/* When debug mode is enabled: When the macro is defined as 0, the print thread switching information is turned off. When it is defined as 1, it is enabled. */ +#define RT_DEBUG_THREAD 0 + +/* Defining this macro means the use of the hook function is started, if not defined, close. */ +#define RT_USING_HOOK + +/* Defines the stack size of idle threads. */ +#define IDLE_THREAD_STACK_SIZE 256 +``` + +(2)Inter-thread synchronization and communication part, the objects that will be used in this part are semaphores, mutexes, events, mailboxes, message queues, signals, and so on. + +```c +/* Define this macro to enable the use of semaphores, if not defined, close. */ +#define RT_USING_SEMAPHORE + +/* Define this macro to enable the use of mutexes, if not defined, close. */ +#define RT_USING_MUTEX + +/* Define this macro to enable the use of events, if not defined, close. */ +#define RT_USING_EVENT + +/* Define this macro to enable the use of mailboxes, if not defined, close. */ +#define RT_USING_MAILBOX + +/* Define this macro to enable the use of message queues, if not defined, close. */ +#define RT_USING_MESSAGEQUEUE + +/* Define this macro to enable the use of signals, if not defined, close. */ +#define RT_USING_SIGNALS +``` + +(3)Memory Management Part + +```c +/* Start the use of static memory pool */ +#define RT_USING_MEMPOOL + +/* Define this macro to start the concatenation of two or more memory heap , if not defined, close. */ +#define RT_USING_MEMHEAP + +/* Start algorithm for small memory management */ +#define RT_USING_SMALL_MEM + +/* Turn off SLAB memory management algorithm */ +/* #define RT_USING_SLAB */ + +/* Start the use of heap */ +#define RT_USING_HEAP +``` + +(4)Kernel Device Object + +```c +/* Indicates the start of useing system devices */ +#define RT_USING_DEVICE + +/* Define this macro to start the use of system console devices, if not defined, close. */ +#define RT_USING_CONSOLE +/* Define the buffer size of the console device. */ +#define RT_CONSOLEBUF_SIZE 128 +/* Name of the console device. */ +#define RT_CONSOLE_DEVICE_NAME "uart1" +``` + +(5)Automatic Initialization Method + +```c +/* Define this macro to enable automatic initialization mechanism, if not defined, close. */ +#define RT_USING_COMPONENTS_INIT + +/* Define this macro to set application entry as main function */ +#define RT_USING_USER_MAIN +/* Define the stack size of the main thread */ +#define RT_MAIN_THREAD_STACK_SIZE 2048 +``` + +(6)FinSH + +```c +/* Define this macro to start the use of the system FinSH debugging tool, if not defined, close. */ +#define RT_USING_FINSH + +/* While starting the system FinSH: the thread name is defined as tshell */ +#define FINSH_THREAD_NAME "tshell" + +/* While turning the system FinSH: use history commands. */ +#define FINSH_USING_HISTORY +/* While turning the system FinSH: define the number of historical command lines. */ +#define FINSH_HISTORY_LINES 5 + +/* While turning the system FinSH: define this macro to open the Tab key, if not defined, close. */ +#define FINSH_USING_SYMTAB + +/* While turning the system FinSH: define the priority of the thread. */ +#define FINSH_THREAD_PRIORITY 20 +/* While turning the system FinSH:define the stack size of the thread. */ +#define FINSH_THREAD_STACK_SIZE 4096 +/* While turning the system FinSH:define the length of command character. */ +#define FINSH_CMD_SIZE 80 + +/* While turning the system FinSH: define this macro to enable the MSH function. */ +#define FINSH_USING_MSH +/* While turning the system FinSH:when MSH function is enabled, macro is defined to use the MSH function by default. */ +#define FINSH_USING_MSH_DEFAULT +/* While turning the system FinSH:define this macro to use only the MSH function. */ +#define FINSH_USING_MSH_ONLY +``` + +(7)About MCU + +```c +/* Define the MCU used in this project is STM32F103ZE; the system defines the chip pins by defining the chip type. */ +#define STM32F103ZE + +/* Define the clock source frequency. */ +#define RT_HSE_VALUE 8000000 + +/* Define this macro to enable the use of UART1. */ +#define RT_USING_UART1 +``` + +>In practice, the system configuration file rtconfig.h is automatically generated by configuration tools and does not need to be changed manually. + +Common Macro Definition Description +-------------- + +Macro definitions are often used in RT-Thread. For example, some common macro definitions in the Keil compilation environment: + +1)rt_inline, definition is as follows, static keyword is to make the function only available for use in the current file; inline means inline, after modification using static, the compiler is recommended to perform inline expansion when calling the function. + +```c +#define rt_inline static __inline +``` + +2)RT_USED,definition is as follows, the purpose of this macro is to explain to the compiler that this code is useful, compilation needs to be saved even if it is not called in the function. For example, RT-Thread auto-initialization uses custom segments, using RT_USED will retain custom code snippets. + +```c +#define RT_USED __attribute__((used)) +``` + +3)RT_UNUSED,definition is as follows, indicates that a function or variable may not be used. This attribute prevents the compiler from generating warnings. + +```c +#define RT_UNUSED __attribute__((unused)) +``` + +4)RT_WEAK,definition is as follows, often used to define functions, when linking the function, the compiler will link the function without the keyword prefix first and link the function modified by weak if it can't find those functions. + +```c +#define RT_WEAK __weak +``` + +5)ALIGN(n),definition is as follows, is used to align its stored address with n bytes when allocating an address space to an object. Here, n can be the power of 2. Byte alignment not only facilitates quick CPU access, but also save memory space if byte alignment is properly used. + +```c +#define ALIGN(n) __attribute__((aligned(n))) +``` + +6)RT_ALIGN(size,align),definition is as follows, to increase size to a multiple of an integer defined by align. For example, RT_ALIGN(13,4) will return to 16. + +```c +#define RT_ALIGN(size, align) (((size) + (align) - 1) & ~((align) - 1)) +``` + diff --git a/documentation/basic/figures/03Memory_distribution.png b/documentation/basic/figures/03Memory_distribution.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcd4016486e5944319b25a32151c98bbdf61fc7 GIT binary patch literal 18846 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%0Dq7LJ>J{s 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 literal 0 HcmV?d00001 diff --git a/documentation/basic/figures/03Startup_process.png b/documentation/basic/figures/03Startup_process.png new file mode 100644 index 0000000000000000000000000000000000000000..4128df8d949bc2e7dd062a176beb280cff75d3cf GIT binary patch literal 53158 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 F{{d%CKWzX2 literal 0 HcmV?d00001 diff --git a/documentation/basic/figures/03kernel_Framework.png b/documentation/basic/figures/03kernel_Framework.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2c3059fe5c5832b467dc34f6e7f2df94ffb5bf GIT binary patch literal 59896 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 literal 0 HcmV?d00001 diff --git a/documentation/basic/figures/03kernel_object.png b/documentation/basic/figures/03kernel_object.png new file mode 100644 index 0000000000000000000000000000000000000000..85508581d3f630af172be510eb2722f9dc88053c GIT binary patch literal 15060 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 Lsz6I+j067{`~g=L literal 0 HcmV?d00001 diff --git a/documentation/basic/figures/03kernel_object2.png b/documentation/basic/figures/03kernel_object2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1601b48686cb94abb817b7213c52e85f80cf6c4 GIT binary patch literal 16088 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 PH;9({BejZqPecD3B@P`8 literal 0 HcmV?d00001 diff --git a/documentation/coding_style_cn.md b/documentation/contribution_guide/coding_style_cn.md similarity index 100% rename from documentation/coding_style_cn.md rename to documentation/contribution_guide/coding_style_cn.md diff --git a/documentation/coding_style_en.txt b/documentation/contribution_guide/coding_style_en.md similarity index 100% rename from documentation/coding_style_en.txt rename to documentation/contribution_guide/coding_style_en.md diff --git a/documentation/contribution_guide/contribution_guide.md b/documentation/contribution_guide/contribution_guide.md new file mode 100644 index 0000000000..a812cd1102 --- /dev/null +++ b/documentation/contribution_guide/contribution_guide.md @@ -0,0 +1,171 @@ +# Contribution Guide + +We sincerely thank you for your contribution, and welcome to submit the code through GitHub's fork and Pull Request processes. + +First, explain the word Pull Request. Pull request means to send a request. The purpose of the developer initiating Pull Request is to request the repository maintainer to adopt the code submitted by the developer. + +When you want to correct mistakes in other people's repositories, follow the following procedure: + +- To fork someone else's repository is equivalent to copying someone else's information. Because you can't guarantee that your modification is correct and beneficial to the project, you can't modify it directly in someone else's repository, but first fork it into your own git repository. +- Clone code to your own PC local, create a new branch, modify bugs or add new features, and then launch pull request to the original repository, so that the original repository manager can see the changes you submitted. +- The original repository manager reviews this submission and, if correct, merge it into his own project. Merge means merging, merging the part of code you modified into the original repository to add code or replace the original code. So far, the whole Pull Request process is over. + +## Coding Style + +Refer to the `coding_style_en.txt` file in the rt_thread project documentation directory for the RT-Thread code programming style. + +## Preparation + +Install Git: You need to add Git's directory to the system environment variable. + +## Contribution Process + +Now take RT-Thread repository as an example to illustrate the process of contributing code: + +### Fork + +Fork the RT-Thread/rt-thread repository into your git repository. + +![fork rt-thread repository](figures/cloneformgit.png) + +### Clone + +In your repository, copy the repository links after your fork: + +![clone rt-thread from your repo](figures/cloneformgit2.png) + +You can use the `git clone` command to copy the repository to your PC: + +``` +git clone [url] +``` + +![git clone](figures/git_clone.png) + +### Create a New Branch + +It is recommended that you create your own development branch based on the master branch, and use following commands to create a new branch: + +``` +git checkout -b YourBranchName +``` + +For example, create a branch named "dev": `git checkout -b dev`. + +### Developing + +Modify bugs and submit new functional code. For example, suppose the developer adds a USB driver: + +![Add a USB driver](figures/add_usb_driver.png) + +### Temporarily Store Modified Files + +Add all changes to the temporary area: + +``` +git add . +``` + +If you only want to add some specified files to the temporary area, use other commands of `git add`. + +### Commit + +Submit this modification to the local repository: + +``` +git commit -m "Describe your submission here" +``` + +> Note: If there are multiple commits in the local development branch, in order to ensure that the RT-Thread repository commit is clean, please tidy up the local commits. More than five commits are not accepted by Pull Request.。 + +### Push to Your Remote Repository + +Push the modified content to the branch of your remote repository. It is recommended that the branch name of the remote repository be consistent with the local branch name.Use the following command to push: + +``` +git push origin YourBranchName +``` + +### Create a Pull Request + +Enter the RT-Thread repository under your Github account and click `New pull request -> Create pull request`. Make sure you choose the right branch. + +![Create a Pull Request](figures/pull_request_step2.png) + +Step 1: Fill in the title of this Pull Request + +Step 2: Modify the description information of this Pull Request (modify it in `Write` and preview it with `Preview`): + +- Modify PR Description: Replace the content in the red box below with the description of this pull request according to the requirements in the red box below. + +- Check PR Options: Fill in [x] in the OK Options check box to confirm. Note that there are no spaces on both sides of [x]. + +![Modify PR Description and Check PR Options](figures/pr_description.png) + +Step 3:Create pull request. + +### Sign CLA + +The first contribution to RT-Thread requires signing the *Contributor License Agreement*. + +![Sign CLA](figures/cla.png) + +Make sure that CLA shows successful signing and CI compilation, as shown in the following figure: + +![CLA successful](figures/checkok.png) + +Note: Do not submit commmit using a non-GitHub account, or commit using a different account, which can lead to CLA signing failure. + +### Review Pull Request + +Once the request is successful, the RT-Thread maintainer can see the code you submitted. The code will be reviewed and comments will be filled in on GitHub. Please check the PR status in time and update the code according to the comments. + +### Merge Pull Request + +If the Pull Request code is okay, the code will be merged into the RT-Thread repository. This time Pull Request succeeded. + +So far, we have completed a code contribution process. + +## Keep in Sync with RT-Thread Repository + +The content of the RT-Thread GitHub repository is always updated. To develop based on the latest RT-Thread code, you need to update the local repository. + +After clone, the local master branch content is consistent with the master branch content of the RT-Thread repository. But when the RT-Thread repository is updated, your local code is different from the RT-Thread code. + +The local master is synchronized with the RT-Thread repository of your own GitHub account. If there is no content modification for the master branch (please create a new branch for development), then you can keep the local code synchronized with the RT-Thread repository according to the following steps: + +- To view the existing remote repository, there is usually only one default origin, which is your own remote repository: + +```c +$ git remote -v +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) +``` + +* Add the RT-Thread remote repository and name it `rtt`, or you can customize the name by yourself: + +```c +$ git remote add rtt https://github.com/RT-Thread/rt-thread.git +``` + +* View all remote repositories tracked locally: + +```c +$ git remote -v +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) +rtt https://github.com/RT-Thread/rt-thread.git (fetch) +rtt https://github.com/RT-Thread/rt-thread.git (push) +``` + +* Pull the code from the master branch of RT-Thread remote repository and merge it into the local master branch: + +```c +git pull rtt master +``` + +## Reference + +* Refer to the [*GitHub - Contributing to a Project*](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project) section of the official Git document for details. + + diff --git a/documentation/contribution_guide/figures/add_usb_driver.png b/documentation/contribution_guide/figures/add_usb_driver.png new file mode 100644 index 0000000000000000000000000000000000000000..a50133d1c19456df174dbfb7a54f1d778b1368a1 GIT binary patch literal 9282 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 BKj;7e literal 0 HcmV?d00001 diff --git a/documentation/contribution_guide/figures/branch.png b/documentation/contribution_guide/figures/branch.png new file mode 100644 index 0000000000000000000000000000000000000000..40fdd37557ebf0cd035193e7f9fa08bc8a08196b GIT binary patch literal 13427 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 literal 0 HcmV?d00001 diff --git a/documentation/contribution_guide/figures/checkok.png b/documentation/contribution_guide/figures/checkok.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1b5e68cebb9115d9187cda8c30204bc416b441 GIT binary patch literal 20334 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 literal 0 HcmV?d00001 diff --git a/documentation/contribution_guide/figures/cla.png b/documentation/contribution_guide/figures/cla.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4db17f91dbacb3bb6b12879ff41d9fe9ffba77 GIT binary patch literal 18680 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 ey7cu=J+EuetDQ#oi-9K^F?hQAxvX#p<|+ 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 C@*8RZ literal 0 HcmV?d00001 diff --git a/documentation/contribution_guide/figures/cloneformgit2.png b/documentation/contribution_guide/figures/cloneformgit2.png new file mode 100644 index 0000000000000000000000000000000000000000..52505dab663ad6c1b06c586ae8ae1c90c94c561a GIT binary patch literal 82388 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˸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 literal 0 HcmV?d00001 diff --git a/documentation/contribution_guide/figures/git_clone.png b/documentation/contribution_guide/figures/git_clone.png new file mode 100644 index 0000000000000000000000000000000000000000..b19af3fa7c6d3e3d6237b2afa88b59eec60b94ef GIT binary patch literal 8455 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ℜ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 literal 0 HcmV?d00001 diff --git a/documentation/device/adc/adc.md b/documentation/device/adc/adc.md new file mode 100644 index 0000000000..6da8e4cae1 --- /dev/null +++ b/documentation/device/adc/adc.md @@ -0,0 +1,264 @@ +# ADC Device + +## An Introduction to ADC + +ADC refers to analog to digital converter which is a device that converts continuously changing analog signals into discrete digital signals. Analog signals , such as temperature, pressure, sound, or images, need to be converted into digital forms that are easier to be stored, processed, and transmitted. The analog-to-digital converter can do this, and it can be found in a variety of different products. The corresponding DAC (Digital-to-Analog Converter) has a reverse conversion process compared to that of the ADC. The ADC was first used to convert wireless signals to digital signals such as television signals, or signals from long-short broadcast stations. + +### Conversion Process + +As shown in the figure below, the analog-to-digital conversion generally involves steps of sampling, holding, quantifying, and encoding. In actual circuits, some processes are combined, such as sampling and holding, and quantization and encoding are implemented simultaneously in the conversion process. + +![ADC Conversion Process](figures/adc-p.png) + +Sampling is the conversion of analog signals that changes continuously over time into time-discrete analog signals. It takes a certain amount of time for the analog signals obtained by sampling to be converted into digital signals. In order to provide a stable value for the subsequent quantization coding process, it is required to keep the sampling analog signals for a period of time after the sampling circuit. + +The process of converting a numerically continuous analog quantity into a digital quantity is called quantization. Digital signals are discrete numerically. The output voltage of the sample-and-hold circuit also needs to be naturalized to a corresponding discrete level in a similar way, and any digital quantity can only be an integer multiple of a certain minimum quantity unit. The quantized value also requires the encoding process, which is the digital output of the A/D converter. + +### Resolution + +The resolution is expressed in binary (or decimal) digits. Generally, there are 8 bits, 10 bits, 12 bits, 16 bits, etc. It explains the resolution capability of the input signals by the analog-to-digital converter. The more bits, the higher the resolution, and the more accurate the analog signal will be. + +### Precision + +Precision represents the maximum error value between the analog and real values of the ADC devices at all numerical points, that is, the distance at which the output value deviates from the linear maximum. + +>Precision and resolution are two different concepts, so please pay attention to the distinction. + +### Conversion Rate + +The conversion rate is the reciprocal of the time it takes for the A/D converter to complete an AD conversion from analog to digital. For example, an A/D converter with a conversion rate of 1MHz means that an AD conversion time is 1 microsecond. + +## Access ADC Device + +The application accesses the ADC hardware through the ADC device management interface provided by RT-Thread. The relevant interfaces are as follows: + +| **Function** | Description | +| --------------- | ------------------ | +| rt_device_find() | Find device handles based on ADC device name | +| rt_adc_enable() | Enable ADC devices | +| rt_adc_read() | Read ADC device data | +| rt_adc_disable() | Close the ADC device | + +### Find ADC Devices + +The application gets the device handle based on the ADC device name, which in turn operates the ADC device. Functions for looking for devices are as follows: + +```c +rt_device_t rt_device_find(const char* name); +``` + +| **Parameter** | Description | +| -------- | ---------------------------------- | +| name | The name of the ADC device | +| **Return** | —— | +| Device handle | Finding the corresponding device will return to the corresponding device handle | +| RT_NULL | No device found | + +In general, the names of the ADC device registered to the system are adc0, adc1, etc., and an usage example is as follows: + +```c +#define ADC_DEV_NAME "adc1" /* ADC device name */ +rt_adc_device_t adc_dev; /* ADC device handle */ +/* find the device */ +adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); +``` + +### Enable ADC Channel + +Before reading the ADC device data, Use the following function to enable the device: + +```c +rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel); +``` + +| Parameter | Description | +| ---------- | ------------------------------- | +| dev | ADC device handle | +| channel | ADC channel | +| **Return** | —— | +| RT_EOK | Succeed | +| -RT_ENOSYS | Failed, the device operation method is empty | +| Other error code | Failed | + + An usage example is as follows: + +```c +#define ADC_DEV_NAME "adc1" /* ADC device name */ +#define ADC_DEV_CHANNEL 5 /* ADC channel */ +rt_adc_device_t adc_dev; /* ADC device handle */ +/* find the device */ +adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); +/* enable the device */ +rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); +``` + +### Read ADC Channel Sample Values + +Reading the ADC channel sample values can be done by the following function: + +```c +rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel); +``` + +| Parameter | Description | +| ---------- | ----------------- | +| dev | ADC device handle | +| channel | ADC channel | +| **Return** | —— | +| Read values | | + +An example of using the ADC sampled voltage value is as follows: + +```c +#define ADC_DEV_NAME "adc1" /* ADC device name */ +#define ADC_DEV_CHANNEL 5 /* ADC channel */ +#define REFER_VOLTAGE 330 /* Reference voltage 3.3V, data accuracy multiplied by 100 and reserve 2 decimal places*/ +#define CONVERT_BITS (1 << 12) /* The number of conversion bits is 12 */ + +rt_adc_device_t adc_dev; /* ADC device handle */ +rt_uint32_t value; +/* find the device */ +adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); +/* enable the device */ +rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); +/* Read sampling values */ +value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); +/* Convert to the corresponding voltage value */ +vol = value * REFER_VOLTAGE / CONVERT_BITS; +rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); +``` + +The calculation formula of the actual voltage value is: `sampling value * reference voltage/(1 << resolution digit)`. In the above example, variable *vol* was enlarged 100 times, so finally the integer part of voltage is obtained through *vol / 100*, and the decimal part of voltage is obtained through *vol % 100*. + +### Close the ADC Channel + +Use the following function can close the ADC channel : + +```c +rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel); +``` + +| **Parameter** | **Description** | +| ---------- | ------------------------------- | +| dev | ADC device handle | +| channel | ADC channel | +| **Return** | —— | +| RT_EOK | Succeed | +| -RT_ENOSYS | Failed, the device operation method is empty | +| Other error code | Failed | + +An example: + +```c +#define ADC_DEV_NAME "adc1" /* ADC device name */ +#define ADC_DEV_CHANNEL 5 /* ADC channel */ +rt_adc_device_t adc_dev; /* ADC device handle */ +rt_uint32_t value; +/* find the device */ +adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); +/* enable the device */ +rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); +/* read sampling values */ +value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); +/* convert to the corresponding voltage value */ +vol = value * REFER_VOLTAGE / CONVERT_BITS; +rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); +/* close the channel */ +rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); +``` + +### FinSH Command + +Before using the device, you need to find out whether the device exists. You can use the command `adc probe` followed by the name of the registered ADC device. As follows: + +```c +msh >adc probe adc1 +probe adc1 success +``` + +A channel of the enabled device can use the command `adc enable` followed by the channel number. + +```c +msh >adc enable 5 +adc1 channel 5 enables success +``` + +To read data from a channel of an ADC device, you can use the command `adc read` followed by the channel number. + +```c +msh >adc read 5 +adc1 channel 5 read value is 0x00000FFF +msh > +``` + +To close a channel of an ADC device, you can use the command `adc disable` followed by the channel number. + +```c +msh >adc disable 5 +adc1 channel 5 disable success +msh > +``` + +## ADC Device Usage Example + +The specific usage of the ADC device can refer to the following sample code. The main steps of the sample code are as follows: + +1. First find the device handle based on the ADC device name “adc1”. +2. After the device is enabled, read the sample value of the corresponding channel 5 of the adc1 device, and then calculate the actual voltage value with the resolution of 12 bits and the reference voltage of 3.3V. +3. Finally close the corresponding channel of the ADC device. + +Running result: Print the raw and converted data which actually read , and print the calculated actual voltage value. + +```c +/* + * Program Listing: ADC Device Usage Routines + * The routine exports the adc_sample command to the control terminal + * adc_sample Command call format: adc_sample + * Program function: The voltage value is sampled by the ADC device and converted to a numerical value. + * The sample code reference voltage is 3.3V and the number of conversion bits is 12 bits. +*/ + +#include +#include + +#define ADC_DEV_NAME "adc1" /* ADC device name */ +#define ADC_DEV_CHANNEL 5 /* ADC channel */ +#define REFER_VOLTAGE 330 /* Reference voltage 3.3V, data accuracy multiplied by 100 and reserve 2 decimal places*/ +#define CONVERT_BITS (1 << 12) /* The number of conversion bits is 12 */ + +static int adc_vol_sample(int argc, char *argv[]) +{ + rt_adc_device_t adc_dev; + rt_uint32_t value, vol; + rt_err_t ret = RT_EOK; + + /* find the device */ + adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME); + if (adc_dev == RT_NULL) + { + rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME); + return RT_ERROR; + } + + /* enable the device */ + ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL); + + /* read sampling values */ + value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL); + rt_kprintf("the value is :%d \n", value); + + /* convert to the corresponding voltage value */ + vol = value * REFER_VOLTAGE / CONVERT_BITS; + rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100); + + /* close the channel */ + ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL); + + return ret; +} +/* export to the msh command list */ +MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample); +``` + + + diff --git a/documentation/device/adc/figures/adc-p.png b/documentation/device/adc/figures/adc-p.png new file mode 100644 index 0000000000000000000000000000000000000000..26c6e9bfc310e01ad4692667ceaa9c170620bee1 GIT binary patch literal 32160 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 should be avoided to repeatedly register registered devices and to register devices with the same name. + +flags parameters support the following parameters (multiple parameters can be supported in OR logic): + +```c +#define RT_DEVICE_FLAG_RDONLY 0x001 /* read only */ +#define RT_DEVICE_FLAG_WRONLY 0x002 /* write only */ +#define RT_DEVICE_FLAG_RDWR 0x003 /* read and write */ +#define RT_DEVICE_FLAG_REMOVABLE 0x004 /* can be removed */ +#define RT_DEVICE_FLAG_STANDALONE 0x008 /* stand alone */ +#define RT_DEVICE_FLAG_SUSPENDED 0x020 /* suspended */ +#define RT_DEVICE_FLAG_STREAM 0x040 /* stream mode */ +#define RT_DEVICE_FLAG_INT_RX 0x100 /* interrupt reception */ +#define RT_DEVICE_FLAG_DMA_RX 0x200 /* DMA reception */ +#define RT_DEVICE_FLAG_INT_TX 0x400 /* interrupt sending */ +#define RT_DEVICE_FLAG_DMA_TX 0x800 /* DMA sending */ +``` + +Device Stream Mode The RT_DEVICE_FLAG_STREAM parameter is used to output a character string to the serial terminal: when the output character is `\n` , it automatically fills in a `\r` to make a branch. + +Successfully registered devices can use the `list_device` command on the FinSH command line to view all device information in the system, including the device name, device type, and number of times the device is opened: + +```c +msh />list_device +device type ref count +-------- -------------------- ---------- +e0 Network Interface 0 +sd0 Block Device 1 +rtc RTC 0 +uart1 Character Device 0 +uart0 Character Device 2 +msh /> +``` + +When the device is logged off, the device will be removed from the device manager and the device will no longer be found through the device. Logging out of the device does not release the memory occupied by the device control block. The function to log off of the device is as follows: + +```c +rt_err_t rt_device_unregister(rt_device_t dev); +``` + +|**Parameters**|**Description**| +|----------|----------| +| dev | device handle | +|**Return**| -- | +| RT_EOK | successful | + +The following code is an example of registering a watchdog device. After calling the `rt_hw_watchdog_register()` interface, the device is registered to the I/O Device Manager via the `rt_device_register()` interface. + +```c +const static struct rt_device_ops wdt_ops = +{ + rt_watchdog_init, + rt_watchdog_open, + rt_watchdog_close, + RT_NULL, + RT_NULL, + rt_watchdog_control, +}; + +rt_err_t rt_hw_watchdog_register(struct rt_watchdog_device *wtd, + const char *name, + rt_uint32_t flag, + void *data) +{ + struct rt_device *device; + RT_ASSERT(wtd != RT_NULL); + + device = &(wtd->parent); + + device->type = RT_Device_Class_Miscellaneous; + device->rx_indicate = RT_NULL; + device->tx_complete = RT_NULL; + + device->ops = &wdt_ops; + device->user_data = data; + + /* register a character device */ + return rt_device_register(device, name, flag); +} + +``` + +## Access I/O Devices + +The application accesses the hardware device through the I/O device management interface, which is accessible to the application when the device driver is implemented. The mapping relationship between the I/O device management interface and the operations on the I/O device is as follows: + +![Mapping between the I/O Device Management Interface and the Operations on the I/O Device](figures/io-fun-call.png) + +### Find Device + +The application obtains the device handle based on the device name, which in turn allows the device to operate. To find device, use function below: + +```c +rt_device_t rt_device_find(const char* name); +``` + +|**Parameters**|**Description** | +|----------|------------------------------------| +| name | device name | +|**Return**| -- | +| device handle | finding the corresponding device will return the corresponding device handle | +| RT_NULL | no corresponding device object found | + +### Initialize Device + +Once the device handle is obtained, the application can initialize the device using the following functions: + +```c +rt_err_t rt_device_init(rt_device_t dev); +``` + +|**Parameters**|**Description** | +|----------|----------------| +| dev | device handle | +|**Return**| -- | +| RT_EOK | device initialization succeeded | +| Error Code | device initialization failed | + +>When a device has been successfully initialized, calling this interface will not repeat initialization. + +### Open and Close Device + +Through the device handle, the application can open and close the device. When the device is opened, it will detect whether the device has been initialized. If it is not initialized, it will call the initialization interface to initialize the device by default. Open the device with the following function: + +```c +rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags); +``` + +|**Parameters** |**Description** | +|------------|-----------------------------| +| dev | device handle | +| oflags | open device in oflag mode | +|**Return** | -- | +| RT_EOK | device successfully turned on | +|-RT_EBUSY | device will not allow being repeated opened if the RT_DEVICE_FLAG_STANDALONE parameter is included in the parameters specified when the device is registered. | +| Other Error Code | device failed to be turned on | + +oflags supports the following parameters: + +```c +#define RT_DEVICE_OFLAG_CLOSE 0x000 /* device was already closed(internal use)*/ +#define RT_DEVICE_OFLAG_RDONLY 0x001 /* open the device in read-only mode */ +#define RT_DEVICE_OFLAG_WRONLY 0x002 /* open the device in write-only mode */ +#define RT_DEVICE_OFLAG_RDWR 0x003 /* open the device in read-and_write mode */ +#define RT_DEVICE_OFLAG_OPEN 0x008 /* device was already closed(internal use) */ +#define RT_DEVICE_FLAG_STREAM 0x040 /* open the device in stream mode */ +#define RT_DEVICE_FLAG_INT_RX 0x100 /* open the device in interrupt reception mode */ +#define RT_DEVICE_FLAG_DMA_RX 0x200 /* open the device in DMA mode */ +#define RT_DEVICE_FLAG_INT_TX 0x400 /* open the device in interrupt sending mode */ +#define RT_DEVICE_FLAG_DMA_TX 0x800 /* open the device in DMA mode */ +``` + +>If the upper application needs to set the device's receive callback function, it must open the device as RT_DEVICE_FLAG_INT_RX or RT_DEVICE_FLAG_DMA_RX, otherwise the callback function will not be called. + +After the application opens the device to complete reading and writing, if no further operations are needed, you can close the device using the following functions: + +```c +rt_err_t rt_device_close(rt_device_t dev); +``` + +|**Parameters** |**Description** | +|------------|------------------------------------| +| dev | device handle | +|**Return** | -- | +| RT_EOK | device successfully closed | +| \-RT_ERROR | device has been completely closed and cannot be closed repeatedly | +| Other Error Code | failed to close device | + +>Device interfaces `rt_device_open()` and `rt_device_close()` need to used in pairs. Open a device requires close the device, so that the device will be completely closed, otherwise the device will remain on. + +### Control Device + +By commanding the control word, the application can also control the device with the following function: + +```c +rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); +``` + +|**Parameters** |**Description** | +|-------------|--------------------------------------------| +| dev | device handle | +| cmd | command control word, this parameter is usually related to the device driver | +| arg | controlled parameter | +|**Return** | -- | +| RT_EOK | function executed successfully | +| -RT_ENOSYS | execution failed, dev is empty | +| Other Error Code | execution failed | + +The generic device command for the parameter `cmd` can be defined as follows: + +```c +#define RT_DEVICE_CTRL_RESUME 0x01 /* resume device */ +#define RT_DEVICE_CTRL_SUSPEND 0x02 /* suspend device */ +#define RT_DEVICE_CTRL_CONFIG 0x03 /* configure device */ +#define RT_DEVICE_CTRL_SET_INT 0x10 /* set interrupt */ +#define RT_DEVICE_CTRL_CLR_INT 0x11 /* clear interrupt */ +#define RT_DEVICE_CTRL_GET_INT 0x12 /* obtain interrupt status */ +``` + +### Read and Write Device + +Application can read data from the device by the following function: + +```c +rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos,void* buffer, rt_size_t size); +``` + +|**Parameters** |**Description** | +|--------------------|--------------------------------| +| dev | device handle | +| pos | read data offset | +| buffer | memory buffer pointer, the data read will be saved in the buffer | +| size | size of the data read | +|**Return** | -- | +| Actual Size of the Data Read | If it is a character device, the return size is in bytes. If it is a block device, the returned size is in block units. | +| 0 | need to read the current thread's errno to determine the error status | + +Calling this function will read the data from the dev device and store it in the buffer. The maximum length of this buffer is *size*, and *pos* has different meanings depending on the device class. + +Writing data to the device can be done by the following function: + +```c +rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos,const void* buffer, rt_size_t size); +``` + +|**Parameters** |**Description** | +|--------------------|--------------------------------| +| dev | device handle | +| pos | write data offset | +| buffer | memory buffer pointer, placing the data to be written in | +| size | size of the written data | +|**Return** | -- | +| Actual Size of the Data Written | If it is a character device, the return size is in bytes. If it is a block device, the returned size is in block units. | +| 0 | need to read the current thread's errno to determine the error status | + +Calling this function will write the data in the buffer to the *dev* device . The maximum length of the written data is *size*, and *pos* has different meanings depending on the device class. + +### Data Transceiving and Call-back + +When the hardware device receives the data, the following function can be used to call back another function to set the data receiving indication to notify the upper application thread that the data arrives: + +```c +rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size)); +``` + +|**Parameters**|**Description** | +|----------|--------------| +| dev | device handle | +| rx_ind | callback function pointer | +|**Return**| -- | +| RT_EOK | set successfully | + +The callback of this function will be provided by the user. When the hardware device receives the data, it will perform the callback function and pass the received data length to the upper layer application in the *size* parameter. The upper application thread should read the data from the device as soon as it receives the indication. + +When the application calls `rt_device_write()` to write data, if the bottom hardware can support automatic sending, the upper application can set a callback function. This callback function is called after the bottom hardware data has been sent (for example, when the DMA transfer is complete or the FIFO has been written to complete, triggered interrupt). Use the following function to set the device with a send completion indication. The function parameters and return values are as follows: + +```c +rt_err_t rt_device_set_tx_complete(rt_device_t dev, rt_err_t (*tx_done)(rt_device_t dev,void *buffer)); +``` + +|**Parameters**|**Description** | +|----------|--------------| +| dev | device handle | +| tx_done | callback function pointer | +|**Return**| -- | +| RT_EOK | set successfully | + +When this function is called, the callback function is provided by the user. When the hardware device sends the data, the driver calls back the function and passes the sent data block address buffer as a parameter to the upper application. When the upper layer application (thread) receives the indication, it will release the buffer memory block or use it as the buffer for the next write data according to the condition of sending the buffer. + +### Access Device Sample + +The following code is an example of accessing a device. First, find the watchdog device through the `rt_device_find()` port, obtain the device handle, then initialize the device through the `rt_device_init()` port, and set the watchdog device timeout through the `rt_device_control()`port. + +```c +#include +#include + +#define IWDG_DEVICE_NAME "iwg" + +static rt_device_t wdg_dev; + +static void idle_hook(void) +{ + /* feed the dog in the callback function of the idle thread */ + rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_KEEPALIVE, NULL); + rt_kprintf("feed the dog!\n "); +} + +int main(void) +{ + rt_err_t res = RT_EOK; + rt_uint32_t timeout = 1000; /* timeout */ + + /* find the watchdog device based on the device name, and obtain the device handle */ + wdg_dev = rt_device_find(IWDG_DEVICE_NAME); + if (!wdg_dev) + { + rt_kprintf("find %s failed!\n", IWDG_DEVICE_NAME); + return RT_ERROR; + } + /* initialize device */ + res = rt_device_init(wdg_dev); + if (res != RT_EOK) + { + rt_kprintf("initialize %s failed!\n", IWDG_DEVICE_NAME); + return res; + } + /* set watchdog timeout */ + res = rt_device_control(wdg_dev, RT_DEVICE_CTRL_WDT_SET_TIMEOUT, &timeout); + if (res != RT_EOK) + { + rt_kprintf("set %s timeout failed!\n", IWDG_DEVICE_NAME); + return res; + } + /* set idle thread callback function */ + rt_thread_idle_sethook(idle_hook); + + return res; +} +``` + diff --git a/documentation/device/figures/block-dev.png b/documentation/device/figures/block-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..510e3d516a987cec6458417bc0bfd0b41fb0b288 GIT binary patch literal 14360 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

    AWkNo`4e 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 n0BRSl`5(3uL?8+>%F-p0#xMT|_i)DZ literal 0 HcmV?d00001 diff --git a/documentation/device/figures/io-dev.png b/documentation/device/figures/io-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..50fd63f954b68c66dce7c55d48d48d52a21aabc1 GIT binary patch literal 20837 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 literal 0 HcmV?d00001 diff --git a/documentation/device/figures/io-fun-call.png b/documentation/device/figures/io-fun-call.png new file mode 100644 index 0000000000000000000000000000000000000000..49a77f7681c3dc4e915174265ee14d36d8edc93f GIT binary patch literal 16301 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 z zd?P35Rfz%9p%LKe{RL~<&LAU!o$V(OuKc==k%*L#PieU@n5Lavb`?C7dMsA z?~i5_9oL_3fZ96K)6-K*N{Zoo@#Z@wlbMAD+(PFv@&!tHU0}M}fH`WgO;`GYy)`pK z-r42o<G|z86wA!ykZ>w3oUzXty}9Q>yG#jk~b9A z@_v;QIOf$O$tmLD{&0y^xI{CnZf?7wlR<)=9r>6$yE~vP6s&dArhPASa|=-+TKZK^ zX&*nMQD47C1Y)tZVTkqa9;kT-@7;iAUN;&`^++%2S%arp1F*9+B4olVU7y>HOqQ*H+z zp0kG=#+KEi2Kr2%tZo?EovLt~o=E)+j4m%ZclN#5Yo0+b9`;t*GZ?thTOw}TOh>fP zLWFJ&D=^gOJLB_HS2)4&yPT|~HJH-qxONkFJG((m#fyJFg!9@TE9%2+^+(EK+|EUut0`ryQd>;pVqq3jI4sRFNaXq1o^I(j<6zeU|Ge@h<$ME?d z&wzDb>5BxE;unnyGuRH1Yegr=l2xA;v!C#u&q60mNIHRs71-`slgCs%t_$70k@E^l z4R<@!8O-(}$|vE6cKdiX8QT&3m?oX^?1)w&8&6jLbQf(n-$NdMTDVLwQ5E#-(!h1w zPRHh~5QZ3t<8lJKec#~bQv{SN=j>jT?1e}GF@DO2RwUcj0^Y23x|5_ca9u>O`Ft-JIzbSOv{nK+gaq=l={Gn0 zV<46RJn409zd1ddre8G=6_wrrN~jwz{I^kyMz~}EL#(c@x;>r`INo1c@t;M1*!WXR zr7wIus9*!Cj&d$8T+fdaFNE^QlD2#?hSOv_y#o;<{AM=Y>HF(lYW!g@Fu`ua*Kh5g zFn`u!uVb!#veVUyA};ztXV9u=clV9~fot;@Lf|tkf8u@uT;yow z-0flOT^kVd-UKn&w}+i}-^+P^(XR^J;6#Qf~;rmy_yd}v6x3W5mOT-yq�vP+BiF4cA`3)8{tfM@VHg1;&+ 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 literal 0 HcmV?d00001 diff --git a/documentation/device/figures/io-parent.png b/documentation/device/figures/io-parent.png new file mode 100644 index 0000000000000000000000000000000000000000..7c87db7f20397343b359205ac47fdc3a7e149c3d GIT binary patch literal 20021 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

    B|)Xpn}>U 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�gv=F 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 frequency is valid only when the timer hardware and driver support sets the counting frequency. Generally, the default frequency of the driving setting can be used. + +When setting the timer mode, the parameter arg can take the following values: + +```c +HWTIMER_MODE_ONESHOT /* Single timing */ +HWTIMER_MODE_PERIOD /* Periodic timing */ +``` + +An example of using the timer count frequency and timing mode is as follows: + +```c +#define HWTIMER_DEV_NAME "timer0" /* timer name */ +rt_device_t hw_dev; /* timer device handle */ +rt_hwtimer_mode_t mode; /* timer mode */ +rt_uint32_t freq = 10000; /* couting frequency */ + +/* Timer timeout callback function */ +static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) +{ + rt_kprintf("this is hwtimer timeout callback fucntion!\n"); + rt_kprintf("tick is :%d !\n", rt_tick_get()); + + return 0; +} + +static int hwtimer_sample(int argc, char *argv[]) +{ + /* find timer device */ + hw_dev = rt_device_find(HWTIMER_DEV_NAME); + /* open the device in read and write mode */ + rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); + /* Set the timeout callback function */ + rt_device_set_rx_indicate(hw_dev, timeout_cb); + + /* Set the counting frequency (1Mhz or the supported minimum counting frequency by default) */ + rt_device_control(hw_dev, HWTIMER_CTRL_FREQ_SET, &freq); + /* Set the mode to periodic timer */ + mode = HWTIMER_MODE_PERIOD; + rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode); +} +``` + +### Set the Timer Timeout Value + +The timer timeout value can be set by the following function: + +```c +rt_size_t rt_device_write(rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size); +``` + +| **Parameter** | Description | +| ---------- | ------------------------------------------ | +| dev | device handle | +| pos | write data offset, unused now, can set 0 value | +| buffer | pointer to the timer timeout structure | +| size | timeout structure size | +| **return** | —— | +| The actual size of the written data | | +| 0 | fail | + +The prototype of the timeout structure is shown below : + +```c +typedef struct rt_hwtimerval +{ + rt_int32_t sec; /* second */ + rt_int32_t usec; /* microsecond */ +} rt_hwtimerval_t; +``` + +An example of using the timer timeout value is as follows: + +```c +#define HWTIMER_DEV_NAME "timer0" /* timer name */ +rt_device_t hw_dev; /* timer device handle */ +rt_hwtimer_mode_t mode; /* timer mode */ +rt_hwtimerval_t timeout_s; /* Timer timeout value */ + +/* Timer timeout callback function */ +static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) +{ + rt_kprintf("this is hwtimer timeout callback fucntion!\n"); + rt_kprintf("tick is :%d !\n", rt_tick_get()); + + return 0; +} + +static int hwtimer_sample(int argc, char *argv[]) +{ + /* find timer device */ + hw_dev = rt_device_find(HWTIMER_DEV_NAME); + /* open the device in read-write mode */ + rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); + /* set the timeout callback function */ + rt_device_set_rx_indicate(hw_dev, timeout_cb); + /* set the mode as periodic timer */ + mode = HWTIMER_MODE_PERIOD; + rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode); + + /* Set the timer timeout value to 5s and start the timer */ + timeout_s.sec = 5; /* second */ + timeout_s.usec = 0; /* microsecond */ + rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)); +} +``` + +### Obtain the Current Value of the Timer + +The current value of the timer can be obtained by the following function: + +```c +rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size); +``` + +| **Parameter** | Description | +| ---------- | ------------------------------------------ | +| dev | timer device handle | +| pos | write data offset, unused now , can set 0 value | +| buffer | output parameter, a pointer point to the timeout structure | +| size | timeout structure size | +| **return** | —— | +| Timeout structure size | success | +| 0 | fail | + +An example of use is shown below: + +```c +rt_hwtimerval_t timeout_s; /* Used to save the time the timer has elapsed */ +/* Read the elapsed time of the timer */ +rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); +``` + +### Close the Timer Device + +The timer device can be closed by the following function: + +```c +rt_err_t rt_device_close(rt_device_t dev); +``` + +| Parameter | Description | +| ---------- | ---------------------------------- | +| dev | timer device handle | +| **return** | —— | +| RT_EOK | close device successfully | +| -RT_ERROR | the device has been completely shut down and cannot be closed repeatedly | +| other error code | fail to close the device | + +To close the device interface and open the device interface should be used in pairs. When open a device, close the device after use , so that the device can be completely shut down, otherwise the device will remain a opening status. + + An example of use is shown below: + +```c +#define HWTIMER_DEV_NAME "timer0" /* timer name */ +rt_device_t hw_dev; /* timer device handle */ +/* find timer device */ +hw_dev = rt_device_find(HWTIMER_DEV_NAME); +... ... +rt_device_close(hw_dev); +``` + +>Timing errors may occur. Assume that the counter has a maximum value of 0xFFFF, a counting frequency of 1Mhz, and a timing time of 1 second and 1 microsecond. Since the timer can only count up to 65535us at a time, the timing requirement for 1000001us can be completed 20 times at 50000us, and the calculation error will be 1us. + +## Hardware Timer Device Usage Example + +The specific use of the hardware timer device can refer to the following sample code. The main steps of the sample code are as follows: + +1. First find the device handle based on the timer device name "timer0". +2. Open the device "timer0" in read-write mode. +3. Set the timer timeout callback function. +4. Set the timer mode to periodic timer and set the timeout period to 5 seconds. At this time, the timer starts. +5. Read the timer after 3500ms delay, the read value will be displayed in seconds and microseconds. + +```c + /* + * Program listing: This is an hwtimer device usage routine +  * The routine exports the hwtimer_sample command to the control terminal +  * Command call format: hwtimer_sample +  * Program function: The hardware timer timeout callback function periodically prints the current tick value, and the difference between the two tick values is converted to the time equivalent to the timing time value. + */ + +#include +#include + +#define HWTIMER_DEV_NAME "timer0" /* timer name */ + +/* Timer timeout callback function */ +static rt_err_t timeout_cb(rt_device_t dev, rt_size_t size) +{ + rt_kprintf("this is hwtimer timeout callback fucntion!\n"); + rt_kprintf("tick is :%d !\n", rt_tick_get()); + + return 0; +} + +static int hwtimer_sample(int argc, char *argv[]) +{ + rt_err_t ret = RT_EOK; + rt_hwtimerval_t timeout_s; /* timer timeout value */ + rt_device_t hw_dev = RT_NULL; /* timer device value */ + rt_hwtimer_mode_t mode; /* timer mode */ + + /* find timer device */ + hw_dev = rt_device_find(HWTIMER_DEV_NAME); + if (hw_dev == RT_NULL) + { + rt_kprintf("hwtimer sample run failed! can't find %s device!\n", HWTIMER_DEV_NAME); + return RT_ERROR; + } + + /* Open the device in read-write mode */ + ret = rt_device_open(hw_dev, RT_DEVICE_OFLAG_RDWR); + if (ret != RT_EOK) + { + rt_kprintf("open %s device failed!\n", HWTIMER_DEV_NAME); + return ret; + } + + /* set timeout callback function */ + rt_device_set_rx_indicate(hw_dev, timeout_cb); + + /* Setting mode is periodic timer */ + mode = HWTIMER_MODE_PERIOD; + ret = rt_device_control(hw_dev, HWTIMER_CTRL_MODE_SET, &mode); + if (ret != RT_EOK) + { + rt_kprintf("set mode failed! ret is :%d\n", ret); + return ret; + } + + /* Set the timer timeout value to 5s and start the timer. */ + timeout_s.sec = 5; /* second */ + timeout_s.usec = 0; /* microsecond */ + + if (rt_device_write(hw_dev, 0, &timeout_s, sizeof(timeout_s)) != sizeof(timeout_s)) + { + rt_kprintf("set timeout value failed\n"); + return RT_ERROR; + } + + /* delay 3500ms */ + rt_thread_mdelay(3500); + + /* read the current value of timer */ + rt_device_read(hw_dev, 0, &timeout_s, sizeof(timeout_s)); + rt_kprintf("Read: Sec = %d, Usec = %d\n", timeout_s.sec, timeout_s.usec); + + return ret; +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(hwtimer_sample, hwtimer sample); +``` diff --git a/documentation/device/i2c/figures/i2c1.png b/documentation/device/i2c/figures/i2c1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b3b2d204d3a3a7a2e10c7328f5ee24f53bb8634 GIT binary patch literal 9696 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 literal 0 HcmV?d00001 diff --git a/documentation/device/i2c/figures/i2c3.png b/documentation/device/i2c/figures/i2c3.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ad1a1c9311ae814d35192a92bee230d2e0082d GIT binary patch literal 7749 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 literal 0 HcmV?d00001 diff --git a/documentation/device/i2c/i2c.md b/documentation/device/i2c/i2c.md new file mode 100644 index 0000000000..c8531bced0 --- /dev/null +++ b/documentation/device/i2c/i2c.md @@ -0,0 +1,298 @@ +# I2C Bus Device + +## Introduction of I2C + +The I2C (Inter Integrated Circuit) bus is a half-duplex, bidirectional two-wire synchronous serial bus developed by PHILIPS. The I2C bus has only two signal lines, one is the bidirectional data line SDA (serial data), and the other is the bidirectional clock line SCL (serial clock). The SPI bus has two lines for receiving data and transmitting data between the master and slave devices, while the I2C bus uses only one line for data transmission and reception. + +Like SPI, I2C works in a master-slave manner. Unlike SPI-master-multi-slave architecture, it allows multiple master devices to exist at the same time. Each device connected to the bus has a unique address, and the master device initiates data transfer, and generates a clock signal. The slave device is addressed by the master device, and only one master device is allowed at a time. As shown below: + +![I2C Bus master-slave device connection mode](figures/i2c1.png) + +The main data transmission format of the I2C bus is shown in the following figure: + +![I2C Bus Data Transmission Format](figures/i2c2.png) + +When the bus is idle, both SDA and SCL are in a high state. When the host wants to communicate with a slave, it will send a start condition first, then send the slave address and read and write control bits, and then transfer the data (host send or receive data). The host will send a stop condition when the data transfer ends. Each byte transmitted is 8 bits, with the high bit first and the low bit last. The different terms in the data transmission process are as follows: + +* **Starting Condition:** When SCL is high, the host pulls SDA low, indicating that data transfer is about to begin. + +* **Slave Address:** The first byte sent by the master is the slave address, the upper 7 bits are the address, the lowest bit is the R/W read/write control bit, R/W bit equals to 1 means the read operation, and 0 means the write operation. The general slave address has 7-bit address mode and 10-bit address mode. In the 10-bit address mode, the first 7 bits of the first byte are a combination of 11110XX, where the last two bits (XX) are two highest 10-bit addresses. The second byte is the remaining 8 bits of the 10-bit slave address, as shown in the following figure: + +![7-bit address and 10-bit address format](figures/i2c3.png) + +* **Answer Signal:** Each time a byte of data is transmitted, the receiver needs to reply with an ACK (acknowledge). The slave sends an ACK when writing data and the ACK by the host when reading data. When the host reads the last byte of data, it can send NACK (Not acknowledge) and then stop the condition. + +* **Data:** After the slave address is sent, some commands may be sent, depending on the slave, and then the data transmission starts, and is sent by the master or the slave. Each data is 8 bits, and the number of bytes of data is not limited. + +* **Repeat Start Condition:** In a communication process, when the host may need to transfer data with different slaves or need to switch read and write operations, the host can send another start condition. + +* **Stop Condition:** When SDA is low, the master pulls SCL high and stays high, then pulls SDA high to indicate the end of the transfer. + +## Access to I2C Bus Devices + +In general, the MCU's I2C device communicates as a master and slave. In the RT-Thread, the I2C master is virtualized as an I2C bus device. The I2C slave communicates with the I2C bus through the I2C device interface. The related interfaces are as follows: + +| **Function** | **Description** | +| --------------- | ---------------------------------- | +| rt_device_find() | Find device handles based on I2C bus device name | +| rt_i2c_transfer() | transfer data | + +### Finding I2C Bus Device + +Before using the I2C bus device, you need to obtain the device handle according to the I2C bus device name, so that you can operate the I2C bus device. The device function is as follows. + +```c +rt_device_t rt_device_find(const char* name); +``` + +| Parameter | Description | +| -------- | ---------------------------------- | +| name | I2C bus device name | +| **Return Value** | —— | +| device handle | Finding the corresponding device will return the corresponding device handle | +| RT_NULL | No corresponding device object found | + +In general, the name of the I2C device registered to the system is i2c0, i2c1, etc. The usage examples are as follows: + +```c +#define AHT10_I2C_BUS_NAME "i2c1" /* Sensor connected I2C bus device name */ +struct rt_i2c_bus_device *i2c_bus; /* I2C bus device handle */ + +/* Find the I2C bus device and get the I2C bus device handle */ +i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(name); +``` + +### Data Transmission + +You can use `rt_i2c_transfer()` for data transfer by getting the I2C bus device handle. The function prototype is as follows: + +```c +rt_size_t rt_i2c_transfer(struct rt_i2c_bus_device *bus, + struct rt_i2c_msg msgs[], + rt_uint32_t num); +``` + +| Parameter | Description | +|--------------------|----------------------| +| bus | I2C bus device handle | +| msgs[] | Message array pointer to be transmitted | +| num | The number of elements in the message array | +| **Return Value** | —— | +| the number of elements in the message array | succeeded | +| error code | failed | + +Like the custom transport interface of the SPI bus, the data transmitted by the custom transport interface of the I2C bus is also in units of one message. The parameter msgs[] points to the array of messages to be transmitted. The user can customize the content of each message to implement two different data transmission modes supported by the I2C bus. If the master needs to send a repeat start condition, it will need to send 2 messages. + +>This function will call rt_mutex_take(), which cannot be called inside the interrupt service routine, which will cause assertion to report an error. + +The prototypes of the I2C message data structure are as follows: + +```c +struct rt_i2c_msg +{ + rt_uint16_t addr; /* Slave address */ + rt_uint16_t flags; /* Reading, writing signs, etc. */ + rt_uint16_t len; /* Read and write data bytes */ + rt_uint8_t *buf; /* Read and write data buffer pointer */ +} +``` + +Slave address (addr): Supports 7-bit and 10-bit binary addresses. You need to view the data sheets of different devices. + +>The slave address used by the RT-Thread I2C device interface does not contain read/write bits. The read/write bit control needs to modify the flag `flags`. + +The flags `flags` can be defined as macros that can be combined with other macros using the bitwise operation "|" as needed. + +```c +#define RT_I2C_WR 0x0000 /* Write flag */ +#define RT_I2C_RD (1u << 0) /* Read flag */ +#define RT_I2C_ADDR_10BIT (1u << 2) /* 10-bit address mode */ +#define RT_I2C_NO_START (1u << 4) /* No start condition */ +#define RT_I2C_IGNORE_NACK (1u << 5) /* Ignore NACK */ +#define RT_I2C_NO_READ_ACK (1u << 6) /* Do not send ACK when reading */ +``` + +Examples of use are as follows: + +```c +#define AHT10_I2C_BUS_NAME "i2c1" /* Sensor connected I2C bus device name */ +#define AHT10_ADDR 0x38 /* Slave address */ +struct rt_i2c_bus_device *i2c_bus; /* I2C bus device handle */ + +/* Find the I2C bus device and get the I2C bus device handle */ +i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(name); + +/* Read sensor register data */ +static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t len, rt_uint8_t *buf) +{ + struct rt_i2c_msg msgs; + + msgs.addr = AHT10_ADDR; /* Slave address */ + msgs.flags = RT_I2C_RD; /* Read flag */ + msgs.buf = buf; /* Read and write data buffer pointer */ + msgs.len = len; /* Read and write data bytes */ + + /* Call the I2C device interface to transfer data */ + if (rt_i2c_transfer(bus, &msgs, 1) == 1) + { + return RT_EOK; + } + else + { + return -RT_ERROR; + } +} +``` + +## I2C Bus Device Usage Example + +The specific usage of the I2C device can be referred to the following sample code. The main steps of the sample code are as follows: + +1. First find the I2C name based on the I2C device name, get the device handle, and then initialize the aht10 sensor. +2. The two functions that control the sensor are the write sensor register `write_reg()` and the read sensor register `read_regs()`, both called `rt_i2c_transfer()` to transfer the data. The function `read_temp_humi()` calls the above two functions to read the temperature and humidity information. + +```c +/* + * Program listing: This is an I2C device usage routine + * The routine exports the i2c_aht10_sample command to the control terminal + * Command call format: i2c_aht10_sample i2c1 + * Command explanation: The second parameter of the command is the name of the I2C bus device to be used. If it is empty, the default I2C bus device is used. + * Program function: read the temperature and humidity data of the aht10 sensor and print. +*/ + +#include +#include + +#define AHT10_I2C_BUS_NAME "i2c1" /* Sensor connected I2C bus device name */ +#define AHT10_ADDR 0x38 /* Slave address */ +#define AHT10_CALIBRATION_CMD 0xE1 /* Calibration command */ +#define AHT10_NORMAL_CMD 0xA8 /* General command */ +#define AHT10_GET_DATA 0xAC /* Get data command */ + +static struct rt_i2c_bus_device *i2c_bus = RT_NULL; /* I2C bus device handle */ +static rt_bool_t initialized = RT_FALSE; /* Sensor initialization status */ + +/* Write sensor register */ +static rt_err_t write_reg(struct rt_i2c_bus_device *bus, rt_uint8_t reg, rt_uint8_t *data) +{ + rt_uint8_t buf[3]; + struct rt_i2c_msg msgs; + + buf[0] = reg; //cmd + buf[1] = data[0]; + buf[2] = data[1]; + + msgs.addr = AHT10_ADDR; + msgs.flags = RT_I2C_WR; + msgs.buf = buf; + msgs.len = 3; + + /* Call the I2C device interface to transfer data */ + if (rt_i2c_transfer(bus, &msgs, 1) == 1) + { + return RT_EOK; + } + else + { + return -RT_ERROR; + } +} + +/* Read sensor register data */ +static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint8_t len, rt_uint8_t *buf) +{ + struct rt_i2c_msg msgs; + + msgs.addr = AHT10_ADDR; + msgs.flags = RT_I2C_RD; + msgs.buf = buf; + msgs.len = len; + + /* Call the I2C device interface to transfer data */ + if (rt_i2c_transfer(bus, &msgs, 1) == 1) + { + return RT_EOK; + } + else + { + return -RT_ERROR; + } +} + +static void read_temp_humi(float *cur_temp, float *cur_humi) +{ + rt_uint8_t temp[6]; + + write_reg(i2c_bus, AHT10_GET_DATA, 0); /* send command */ + rt_thread_mdelay(400); + read_regs(i2c_bus, 6, temp); /* obtian sensor data */ + + /* Humidity data conversion */ + *cur_humi = (temp[1] << 12 | temp[2] << 4 | (temp[3] & 0xf0) >> 4) * 100.0 / (1 << 20); + /* Temperature data conversion */ + *cur_temp = ((temp[3] & 0xf) << 16 | temp[4] << 8 | temp[5]) * 200.0 / (1 << 20) - 50; +} + +static void aht10_init(const char *name) +{ + rt_uint8_t temp[2] = {0, 0}; + + /* Find the I2C bus device and get the I2C bus device handle */ + i2c_bus = (struct rt_i2c_bus_device *)rt_device_find(name); + + if (i2c_bus == RT_NULL) + { + rt_kprintf("can't find %s device!\n", name); + } + else + { + write_reg(i2c_bus, AHT10_NORMAL_CMD, temp); + rt_thread_mdelay(400); + + temp[0] = 0x08; + temp[1] = 0x00; + write_reg(i2c_bus, AHT10_CALIBRATION_CMD, temp); + rt_thread_mdelay(400); + initialized = RT_TRUE; + } +} + +static void i2c_aht10_sample(int argc, char *argv[]) +{ + float humidity, temperature; + char name[RT_NAME_MAX]; + + humidity = 0.0; + temperature = 0.0; + + if (argc == 2) + { + rt_strncpy(name, argv[1], RT_NAME_MAX); + } + else + { + rt_strncpy(name, AHT10_I2C_BUS_NAME, RT_NAME_MAX); + } + + if (!initialized) + { + /* Sensor initialization */ + aht10_init(name); + } + if (initialized) + { + /* Read temperature and humidity data */ + read_temp_humi(&temperature, &humidity); + + rt_kprintf("read aht10 sensor humidity : %d.%d %%\n", (int)humidity, (int)(humidity * 10) % 10); + rt_kprintf("read aht10 sensor temperature: %d.%d \n", (int)temperature, (int)(temperature * 10) % 10); + } + else + { + rt_kprintf("initialize sensor failed!\n"); + } +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(i2c_aht10_sample, i2c aht10 sample); +``` + diff --git a/documentation/device/pin/figures/pin2.png b/documentation/device/pin/figures/pin2.png new file mode 100644 index 0000000000000000000000000000000000000000..d51371fecc0ccc4b296ea03570d6419fb4b4d980 GIT binary patch literal 16419 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 PAE79#Dw8i|67YWjf9%zU literal 0 HcmV?d00001 diff --git a/documentation/device/pin/pin.md b/documentation/device/pin/pin.md new file mode 100644 index 0000000000..2528373de1 --- /dev/null +++ b/documentation/device/pin/pin.md @@ -0,0 +1,353 @@ +# PIN Device + +## Introduction of Pin + +The pins on the chip are generally divided into four categories: power supply, clock, control, and I/O. The I/O port is further divided into General Purpose Input Output (GPIO) and function multiplex I/O (such as SPI/I2C/UART, etc.) in the usage mode. + +Most MCU pins have more than one function. The internal structure of different pins is different and the functions are different. The actual function of the pin can be switched through different configurations. The main features of the General Purpose Input Output (GPIO) port are as follows: + +* Programmable Interrupt: The interrupt trigger mode is configurable. Generally, there are five interrupt trigger modes as shown in the following figure: + + ![5 Interrupt Trigger Modes](figures/pin2.png) + +* Input and output modes can be controlled. + + * Output modes generally include Output push-pull, Output open-drain, Output pull-up, and Output pull-down. When the pin is in the output mode, the connected peripherals can be controlled by configuring the level of the pin output to be high or low. + + * Input modes generally include: Input floating, Input pull-up, Input pull-down, and Analog. When the pin is in the input mode, the level state of the pin can be read, that is, high level or low level. + +## Access PIN Device + +The application accesses the GPIO through the PIN device management interface provided by RT-Thread. The related interfaces are as follows: + +| Function | **Description** | +| ---------------- | ---------------------------------- | +| rt_pin_mode() | Set pin mode | +| rt_pin_write() | Set the pin level | +| rt_pin_read() | Read pin level | +| rt_pin_attach_irq() | Bind pin interrupt callback function | +| rt_pin_irq_enable() | Enable pin interrupt | +| rt_pin_detach_irq() | Detach pin interrupt callback function | + +### Obtain Pin Number + +The pin numbers provided by RT-Thread need to be distinguished from the chip pin numbers. They are not the same concept. The pin numbers are defined by the PIN device driver and are related to the specific chip. There are two ways to obtain the pin number: use the macro definition or view the PIN driver file. + +#### Use Macro Definition + +If you use the BSP in the `rt-thread/bsp/stm32` directory, you can use the following macro to obtain the pin number: + +```c +GET_PIN(port, pin) +``` + +The sample code for the pin number corresponding to LED0 with pin number PF9 is as follows: + +```c +#define LED0_PIN GET_PIN(F, 9) +``` + +#### View Driver Files + +If you use a different BSP, you will need to check the PIN driver code `drv_gpio.c` file to confirm the pin number. There is an array in this file that holds the number information for each PIN pin, as shown below: + +```c +static const rt_uint16_t pins[] = +{ + __STM32_PIN_DEFAULT, + __STM32_PIN_DEFAULT, + __STM32_PIN(2, A, 15), + __STM32_PIN(3, B, 5), + __STM32_PIN(4, B, 8), + __STM32_PIN_DEFAULT, + __STM32_PIN_DEFAULT, + __STM32_PIN_DEFAULT, + __STM32_PIN(8, A, 14), + __STM32_PIN(9, B, 6), + ... ... +} +``` + +Take `__STM32_PIN(2, A, 15)` as an example, 2 is the pin number used by RT-Thread, A is the port number, and 15 is the pin number, so the pin number corresponding to PA15 is 2. + +### Set Pin Mode + +Before the pin is used, you need to set the input or output mode first, and the following functions are used: + +```c +void rt_pin_mode(rt_base_t pin, rt_base_t mode); +``` + +| Parameter | **Discription** | +| --------- | ------------------ | +| pin | Pin number | +| mode | Pin operation mode | + +At present, the pin working mode supported by RT-Thread can take one of the five macro definition values as shown. The mode supported by the chip corresponding to each mode needs to refer to the specific implementation of the PIN device driver: + +```c +#define PIN_MODE_OUTPUT 0x00 /* Output */ +#define PIN_MODE_INPUT 0x01 /* Input */ +#define PIN_MODE_INPUT_PULLUP 0x02 /* input Pull up */ +#define PIN_MODE_INPUT_PULLDOWN 0x03 /* input Pull down */ +#define PIN_MODE_OUTPUT_OD 0x04 /* output Open drain */ +``` + +An example of use is as follows: + +```c +#define BEEP_PIN_NUM 35 /* PB0 */ + +/* Buzzer pin is in output mode */ +rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); +``` + +### Set The Pin Level + +The function to set the pin output level is as follows: + +```c +void rt_pin_write(rt_base_t pin, rt_base_t value); +``` + +| **Parameter** | Discription | +|----------|-------------------------| +| pin | Pin number | +| value | Level logic value, which can take one of two macro definition values: PIN_LOW means low level, or PIN_HIGH means high level | + +Examples of use are as follows: + +```c +#define BEEP_PIN_NUM 35 /* PB0 */ + +/* Beep's pin is in output mode */ +rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); +/* Set low level */ +rt_pin_write(BEEP_PIN_NUM, PIN_LOW); +``` + +### Read Pin Level + +The functions to read the pin level are as follows: + +```c +int rt_pin_read(rt_base_t pin); +``` + +| Parameter | Description | +| ---------- | ----------- | +| pin | Pin number | +| **return** | —— | +| PIN_LOW | Low level | +| PIN_HIGH | High level | + +Examples of use are as follows: + +```c +#define BEEP_PIN_NUM 35 /* PB0 */ +int status; + +/* Buzzer pin is in output mode */ +rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); +/* Set low level */ +rt_pin_write(BEEP_PIN_NUM, PIN_LOW); + +status = rt_pin_read(BEEP_PIN_NUM); +``` + +### Bind Pin Interrupt Callback Function + +To use the interrupt function of the pin, you can use the following function to configure a pin to some interrupt trigger mode and bind an interrupt callback function to the corresponding pin. When the pin interrupt occurs, the callback function will be executed. : + +```c +rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode, + void (*hdr)(void *args), void *args); +``` + +| Parameter | Description | +| ---------- | ------------------------------------------------------------ | +| pin | Pin number | +| mode | Interrupt trigger mode | +| hdr | Interrupt callback function. Users need to define this function | +| args | Interrupt the parameters of the callback function, set to RT_NULL when not needed | +| return | —— | +| RT_EOK | Binding succeeded | +| error code | Binding failed | + +Interrupt trigger mode mode can take one of the following five macro definition values: + +```c +#define PIN_IRQ_MODE_RISING 0x00 /* Rising edge trigger */ +#define PIN_IRQ_MODE_FALLING 0x01 /* Falling edge trigger */ +#define PIN_IRQ_MODE_RISING_FALLING 0x02 /* Edge trigger (triggered on both rising and falling edges)*/ +#define PIN_IRQ_MODE_HIGH_LEVEL 0x03 /* High level trigger */ +#define PIN_IRQ_MODE_LOW_LEVEL 0x04 /* Low level trigger */ +``` + +Examples of use are as follows: + +```c +#define KEY0_PIN_NUM 55 /* PD8 */ +/* Interrupt callback function */ +void beep_on(void *args) +{ + rt_kprintf("turn on beep!\n"); + + rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); +} +static void pin_beep_sample(void) +{ + /* Button 0 pin is the input mode */ + rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); + /* Bind interrupt, rising edge mode, callback function named beep_on */ + rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); +} +``` + +### Enable Pin Interrupt + +After binding the pin interrupt callback function, use the following function to enable pin interrupt: + +```c +rt_err_t rt_pin_irq_enable(rt_base_t pin, rt_uint32_t enabled); +``` + +| **Parameter** | **Description** | +|----------|----------------| +| pin | Pin number | +| enabled | Status, one of two values: PIN_IRQ_ENABLE, and PIN_IRQ_DISABLE | +| **return** | —— | +| RT_EOK | Enablement succeeded | +| error code | Enablement failed | + +Examples of use are as follows: + +```c +#define KEY0_PIN_NUM 55 /* PD8 */ +/* Interrupt callback function */ +void beep_on(void *args) +{ + rt_kprintf("turn on beep!\n"); + + rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); +} +static void pin_beep_sample(void) +{ + /* Key 0 pin is the input mode */ + rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); + /* Bind interrupt, rising edge mode, callback function named beep_on */ + rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); + /* Enable interrupt */ + rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE); +} +``` + +### Detach Pin Interrupt Callback Function + +You can use the following function to detach the pin interrupt callback function: + +```c +rt_err_t rt_pin_detach_irq(rt_int32_t pin); +``` + +| **Parameter** | **Description** | +| ------------- | -------------------- | +| pin | Pin number | +| **return** | —— | +| RT_EOK | Detachment succeeded | +| error code | Detachment failed | + +After the pin detaches the interrupt callback function, the interrupt is not closed. You can also call the bind interrupt callback function to bind the other callback functions again. + +```c +#define KEY0_PIN_NUM 55 /* PD8 */ +/* Interrupt callback function */ +void beep_on(void *args) +{ + rt_kprintf("turn on beep!\n"); + + rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); +} +static void pin_beep_sample(void) +{ + /* Key 0 pin is the input mode */ + rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); + /* Bind interrupt, rising edge mode, callback function named beep_on */ + rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); + /* Enable interrupt */ + rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE); + /* Detach interrupt callback function */ + rt_pin_detach_irq(KEY0_PIN_NUM); +} +``` + +## PIN Device Usage Example + +The following sample code is the pin device usage example. The main steps of the sample code are as follows: + +1. Set the corresponding pin of the beep to the output mode and give a default low state. + +2. Set the key 0 and button 1 corresponding to the input mode, then bind the interrupt callback function and enable the interrupt. + +3. When the key 0 is pressed, the beep starts to sound, and when the key 1 is pressed, the beep stops. + +```c +/* + * Program listing: This is a PIN device usage routine + * The routine exports the pin_beep_sample command to the control terminal + * Command call format:pin_beep_sample + * Program function: control the buzzer by controlling the level state of the corresponding pin of the buzzer by pressing the button +*/ + +#include +#include + +/* Pin number, determined by looking at the device driver file drv_gpio.c */ +#ifndef BEEP_PIN_NUM + #define BEEP_PIN_NUM 35 /* PB0 */ +#endif +#ifndef KEY0_PIN_NUM + #define KEY0_PIN_NUM 55 /* PD8 */ +#endif +#ifndef KEY1_PIN_NUM + #define KEY1_PIN_NUM 56 /* PD9 */ +#endif + +void beep_on(void *args) +{ + rt_kprintf("turn on beep!\n"); + + rt_pin_write(BEEP_PIN_NUM, PIN_HIGH); +} + +void beep_off(void *args) +{ + rt_kprintf("turn off beep!\n"); + + rt_pin_write(BEEP_PIN_NUM, PIN_LOW); +} + +static void pin_beep_sample(void) +{ + /* Beep pin is in output mode */ + rt_pin_mode(BEEP_PIN_NUM, PIN_MODE_OUTPUT); + /* Default low level */ + rt_pin_write(BEEP_PIN_NUM, PIN_LOW); + + /* KEY 0 pin is the input mode */ + rt_pin_mode(KEY0_PIN_NUM, PIN_MODE_INPUT_PULLUP); + /* Bind interrupt, falling edge mode, callback function named beep_on */ + rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL); + /* Enable interrupt */ + rt_pin_irq_enable(KEY0_PIN_NUM, PIN_IRQ_ENABLE); + + /* KEY 1 pin is input mode */ + rt_pin_mode(KEY1_PIN_NUM, PIN_MODE_INPUT_PULLUP); + /* Binding interrupt, falling edge mode, callback function named beep_off */ + rt_pin_attach_irq(KEY1_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_off, RT_NULL); + /* Enable interrupt */ + rt_pin_irq_enable(KEY1_PIN_NUM, PIN_IRQ_ENABLE); +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(pin_beep_sample, pin beep sample); +``` diff --git a/documentation/device/pwm/figures/pwm-f.png b/documentation/device/pwm/figures/pwm-f.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6c7370cc138dcc7c602475f1cc38dba0db0875 GIT binary patch literal 15113 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%0DXS{pdSnu9O_D8 zTGeW(ABKYCT=aQktJzX(%w%x??CDMPlaJt#S8DM6|JOrc8~cZsJK@2@_45UwEgDrt LO$Ds{!)N~sk`y!G literal 0 HcmV?d00001 diff --git a/documentation/device/pwm/figures/pwm-l.png b/documentation/device/pwm/figures/pwm-l.png new file mode 100644 index 0000000000000000000000000000000000000000..e793b2cfcae8d9425e05fccabe6c4b7bfa741feb GIT binary patch literal 10754 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 I&4+*d4+rztlK=n! literal 0 HcmV?d00001 diff --git a/documentation/device/pwm/pwm.md b/documentation/device/pwm/pwm.md new file mode 100644 index 0000000000..57338b3db1 --- /dev/null +++ b/documentation/device/pwm/pwm.md @@ -0,0 +1,265 @@ +# PWM Device + +## Introduction to PWM + +PWM (Pulse Width Modulation) is a method of digitally encoding the level of an analog signal. The frequency of the square wave is used to encode the level of a specific analog signal by pulses of different frequencies. The output receives a series of pulses of equal magnitude and uses these pulses to replace the device with the desired waveform. + +![PWM Schematic Diagram](figures/pwm-f.png) + +Above is a simple schematic diagram of PWM. Assuming that the timer works in a up-counter mode. When the count value is less than the threshold, it outputs a level state, such as a high level. When the count value is greater than the threshold, it outputs the opposite, such as a low level. When the count value reaches the maximum value, the counter recounts from 0 and returns to the original level state. The ratio of the high-level duration (pulse width) to the cycle time is the duty cycle, ranging from 0 to 100%. The high level of the above picture is just half of the cycle time, so the duty cycle is 50%. + +One of the common PWM control scenarios is to adjust the brightness of the light or screen. The brightness can be adjusted according to the duty cycle. The PWM adjusts the brightness not continuously, but constantly lights up and turns off the screen. When the light is turned on and off fast enough, the naked eye will always think that it is always bright. In the process of on and off, the longer the light is off, the lower the brightness of the screen to the naked eye. The longer the light is on, the less time is spent and the screen will be brighter. + +![PWM Brightness Adjustment](figures/pwm-l.png) + +## Access to PWM Devices + +The application accesses the PWM device hardware through the PWM device management interface provided by RT-Thread. The related interfaces are as follows: + +| **Function** | Description | +| ----------------- | ---------------------------------- | +| rt_device_find() | Find device handles based on the name of PWM device | +| rt_pwm_set() | Set PWM period and pulse width | +| rt_pwm_enable() | Enable PWM device | +| rt_pwm_disable() | Disable the PWM device | + +### Find the PWM Device + +The application obtains the device handle based on the name of PWM device, which in turn can operate the PWM device. The function is as follows: + +```c +rt_device_t rt_device_find(const char* name); +``` + +| Parameter | Description | +| -------- | ---------------------------------- | +| name | Device | +| **Return** | —— | +| Device handle | Found the corresponding device, will return the corresponding device handle | +| RT_NULL | Device not found | + +In general, the name of the PWM device registered to the system is pwm0, pwm1, etc. The usage examples are as follows: + +```c +#define PWM_DEV_NAME "pwm3" /* name of PWM device */ +struct rt_device_pwm *pwm_dev; /* PWM device handle */ +/* Search the device */ +pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); +``` + +### Set PWM Period and Pulse Width + +Set the PWM period and duty cycle by using the following function: + +```c +rt_err_t rt_pwm_set(struct rt_device_pwm *device, + int channel, + rt_uint32_t period, + rt_uint32_t pulse); +``` + +| Parameter | Description | +| ---------- | ----------------- | +| device | PWM device handle | +| channel | PWM channel | +| period | PWM period (ns) | +| pulse | PWM pulse width time (ns) | +| **Return** | —— | +| RT_EOK | successful | +| -RT_EIO | device is null | +| -RT_ENOSYS | Device operation method is null | +| Other Errors | Execute failed | + +The output frequency of the PWM is determined by the period. For example, the time of a period is 0.5ms (milliseconds), the period value is 500000ns (nanoseconds), the output frequency is 2KHz, the duty cycle is `pulse / period`, and the pulse value cannot exceed period. + +An example of use is as follows: + +```c +#define PWM_DEV_NAME "pwm3" /* name of PWM device */ +#define PWM_DEV_CHANNEL 4 /* PWM channel */ +struct rt_device_pwm *pwm_dev; /* PWM device handle */ +rt_uint32_t period, pulse; + +period = 500000; /* The period is 0.5ms, the unit is nanoseconds */ +pulse = 0; /* PWM pulse width value, the unit is nanoseconds */ +/* Search the device */ +pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); +/* Set the PWM period and pulse width */ +rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); +``` + +### Enable the PWM Device + +After setting the PWM period and pulse width, you can enable the PWM device by the following function: + +```c +rt_err_t rt_pwm_enable(struct rt_device_pwm *device, int channel); +``` + +| Parameter | Description | +| ---------- | ------------------------------- | +| device | PWM device handle | +| channel | PWM channel | +| **Return** | —— | +| RT_EOK | Enable device successful | +| -RT_ENOSYS | Device operation method is null | +| Other Errors | Enable device failed | + +An example of use is as follows: + +```c +#define PWM_DEV_NAME "pwm3" /* name of PWM device */ +#define PWM_DEV_CHANNEL 4 /* PWM channel */ +struct rt_device_pwm *pwm_dev; /* PWM device handle */ +rt_uint32_t period, pulse; + +period = 500000; /* The period is 0.5ms, the unit is nanoseconds */ +pulse = 0; /* PWM pulse width value, the unit is nanoseconds */ +/* Search the device */ +pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); +/* Set the PWM period and pulse width */ +rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); +/* Enable the device */ +rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); +``` + +### Disable the PWM device Channel + +Use the following function to turn off the corresponding channel of the PWM device. + +```c +rt_err_t rt_pwm_disable(struct rt_device_pwm *device, int channel); +``` + +| **Parameter** | Description | +| ---------- | ------------------------------- | +| device | PWM device handle | +| channel | PWM channel | +| **Return** | —— | +| RT_EOK | Turn off device successful | +| -RT_EIO | Device handle is null | +| Other Errors | Turn off device failed | + +An example of use is as follows: + +```c +#define PWM_DEV_NAME "pwm3" /* name of PWM device */ +#define PWM_DEV_CHANNEL 4 /* PWM channel */ +struct rt_device_pwm *pwm_dev; /* PWM device handle */ +rt_uint32_t period, pulse; + +period = 500000; /* The period is 0.5ms, the unit is nanoseconds */ +pulse = 0; /* PWM pulse width value, the unit is nanoseconds */ +/* Search the device */ +pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); +/* Set the PWM period and pulse width */ +rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); +/* Enable the device */ +rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); +/* Turn off the device channel */ +rt_pwm_disable(pwm_dev,PWM_DEV_CHANNEL); +``` + +## FinSH Command + +To set the period and duty cycle of a channel of a PWM device, use the command `pwm_set pwm1 1 500000 5000`. The first parameter is the command, the second parameter is the PWM device name, the third parameter is the PWM channel, and the fourth parameter is PWM period(ns), the fifth parameter is the pulse width (ns). + +```c +msh />pwm_set pwm1 1 500000 5000 +msh /> +``` + +To enable a channel of the PWM device, use the command`pwm_enable pwm1 1`. The first parameter is the command, the second parameter is the PWM device name, and the third parameter is the PWM channel. + +```c +msh />pwm_enable pwm1 1 +msh /> +``` + +To disable a channel of the PWM device, use the command `pwm_disable pwm1 1`. The first parameter is the command, the second parameter is the PWM device name, and the third parameter is the PWM channel. + +```c +msh />pwm_disable pwm1 1 +msh /> +``` + +## PWM Device Usage Example + +The following sample code is a PWM device usage sample . The main steps of the sample code are as follows: + +1. Find the PWM device to get the device handle. +2. Set the PWM period and pulse width. +3. Enable the PWM device. +4. The pulse width is modified every 50 milliseconds in the while loop. +5. Connect the PWM channel to a LED, and you can see that the LED changes from dark to bright gradually, and then from bright to dark. + +```c +/* + * Program list: This is PWM device usage example + * The routine exports the pwm_led_sample command to the control terminal + * Format for Command: pwm_led_sample + * Program function: By controlling the brightness of the LED light through the PWM device, + * you can see that the LED changes from dark to bright gradually, then from bright to dark. + */ + +#include +#include + +#define PWM_DEV_NAME "pwm3" /* PWM device name */ +#define PWM_DEV_CHANNEL 4 /* PWM channel */ + +struct rt_device_pwm *pwm_dev; /* PWM device handle */ + +static int pwm_led_sample(int argc, char *argv[]) +{ + rt_uint32_t period, pulse, dir; + + period = 500000; /* The period is 0.5ms, the unit is nanoseconds */ + dir = 1; /* Increase or decrease direction of PWM pulse width value */ + pulse = 0; /* PWM pulse width value, the unit is nanoseconds*/ + + /* Set LED pin mode to output */ + rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT); + /* Set high LED pin mode */ + rt_pin_write(LED_PIN_NUM, PIN_HIGH); + + /* Search the Device */ + pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); + if (pwm_dev == RT_NULL) + { + rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME); + return RT_ERROR; + } + + /* Set PWM period and pulse width defaults */ + rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); + /* Enable device */ + rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); + + while (1) + { + rt_thread_mdelay(50); + if (dir) + { + pulse += 5000; /* Increase 5000ns each time from 0 */ + } + else + { + pulse -= 5000; /* 5000ns reduction from the maximum */ + } + if (pulse >= period) + { + dir = 0; + } + if (0 == pulse) + { + dir = 1; + } + + /* Set the PWM period and pulse width */ + rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); + } +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(pwm_led_sample, pwm sample); +``` diff --git a/documentation/device/rtc/rtc.md b/documentation/device/rtc/rtc.md new file mode 100644 index 0000000000..503f1d814d --- /dev/null +++ b/documentation/device/rtc/rtc.md @@ -0,0 +1,198 @@ +# RTC Device + +## Introduction of RTC + +The RTC (Real-Time Clock) provides accurate real-time clock time, which can be used to generate information such as year, month, day, hour, minute, and second. At present, most real-time clock chips use a higher precision crystal oscillator as a clock source. In order to work when the main power supply is powered down, some clock chips will be powered by a battery to keep the time information valid. + +The RT-Thread RTC device provides the basic services for the operating system's time system. In the face of more and more IoT scenarios, RTC has become the standard configuration of the product, and even in the secure transmission process such as SSL, RTC has become an indispensable part. + + +## Access RTC Devices + +The application accesses the RTC hardware through the RTC device management interface, and the relevant interfaces are as follows: + +| **Function** | Description | +| ------------- | ---------------------------------- | +| set_date() | Set date, year, month, day | +| set_time() | Set time, hour, minute, second | +| time() | Obtain current time | + +### Set Date + +Set the current date value of the RTC device by the following functions: + +```c +rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day) +``` + +| **Parameter** | **Description** | +| -------- | ---------------------------------- | +|year |The year to be set to take effect| +|month |The month to be set to take effect| +|day | The date to be set to take effect | +| **return** | —— | +| RT_EOK | Set-up succeeded | +| -RT_ERROR | Set-up failed, no rtc device found | +| other error code | Set-up failed | + +An example of use is as follows: + +```c +/* Set the date to December 3, 2018 */ +set_date(2018, 12, 3); +``` + +### Set Time + +Set the current time value of the RTC device by the following function: + +```c +rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second) +``` + +| **Parameter** | **Description** | +| ---------- | ------------------------------- | +|hour |The hour to be set to take effect| +|minute |The minute to be set to take effect| +|second |The second to be set to take effect| +| **return** | —— | +| RT_EOK | Set-up succeeded | +| -RT_ERROR | Set-up failed, no rtc device found | +| other error code | Set-up failed | + +An example of use is as follows: + +```c +/* Set the time to 11:15:50 */ +set_time(11, 15, 50); +``` + +### Obtain Current Time + +Obtain time using the time API in the C standard library: + +```c +time_t time(time_t *t) +``` + +| **Parameter** | **Description** | +| ---------- | ------------------------------- | +|t |Time data pointer | +| **return** | —— | +| Current time value | | + +Examples of use are as follows: + +```c +time_t now; /* Save the current time value obtained */ +/* Obtain Time */ +now = time(RT_NULL); +/* Printout time information */ +rt_kprintf("%s\n", ctime(&now)); +``` + +>Currently only one RTC device is allowed in the system and the name is `"rtc"`. + +## Functional Configuration + +### Enable Soft RTC (Software Emulation RTC) + +You can use the function of enabling RTC software emulation, which is ideal for products that do not require high time precision and have no hardware RTC. The configuration options of menuconfig are as follows: + +```c +RT-Thread Components → + Device Drivers: + -*- Using RTC device drivers /* Use RTC device driver */ + [ ] Using software simulation RTC device /* Use software simulation RTC device */ +``` + +### Enable NTP Time Automatic Synchronization + +If the RT-Thread is connected to the Internet, you can enable automatic NTP time synchronization to synchronize local time periodically. + +First open the NTP function in menuconfig as follows: + +```c +RT-Thread online packages → + IoT - internet of things → + netutils: Networking utilities for RT-Thread: + [*] Enable NTP(Network Time Protocol) client +``` + +After the NTP is turned on, the RTC's automatic synchronization function will be automatically turned on, and the synchronization period and the delay time of the first synchronization can also be set: + +```c +RT-Thread Components → + Device Drivers: + -*- Using RTC device drivers /* Use RTC device driver */ + [ ] Using software simulation RTC device /* Use software simulation RTC device */ + [*] Using NTP auto sync RTC time /* Automatically synchronize RTC time with NTP */ + (30) NTP first sync delay time(second) for network connect /* The delay for performing NTP time synchronization for the first time. The purpose of the delay is to reserve a certain amount of time for the network connection and try to increase the success rate of the first NTP time synchronization. The default time is 30S; */ + (3600) NTP auto sync period(second) /* NTP The synchronization period is automatically synchronized in seconds, and the default period is one hour (ie 3600S). */ +``` + +## FinSH Command + +Enter `date` to view the current time. + +```c +msh />date +Fri Feb 16 01:11:56 2018 +msh /> +``` + +Also use the `date` command, after the command, enter `year` `month` `date` `hour ` ` minute ` ` second ` (between spaces, 24H system), and set the current time to 2018-02-16 01:15:30. The approximate effect is as follows: + +```c +msh />date 2018 02 16 01 15 30 +msh /> +``` + +## RTC Device Usage Examples + +For the specific usage of the RTC device, refer to the following example code. First, set the year, month, date, hour, minute and second information, and then delay the data for 3 seconds to get the current time information. + +```c +/* + * Program listing: This is an RTC device usage routine + * The routine exports the rtc_sample command to the control terminal + * Command call format:rtc_sample + * Program function: Set the date and time of the RTC device. After a delay, obtain the current time and print the display. +*/ + +#include +#include + +static int rtc_sample(int argc, char *argv[]) +{ + rt_err_t ret = RT_EOK; + time_t now; + + /* Set date */ + ret = set_date(2018, 12, 3); + if (ret != RT_EOK) + { + rt_kprintf("set RTC date failed\n"); + return ret; + } + + /* Set time */ + ret = set_time(11, 15, 50); + if (ret != RT_EOK) + { + rt_kprintf("set RTC time failed\n"); + return ret; + } + + /* Delay 3 seconds */ + rt_thread_mdelay(3000); + + /* Obtain Time */ + now = time(RT_NULL); + rt_kprintf("%s\n", ctime(&now)); + + return ret; +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(rtc_sample, rtc sample); +``` diff --git a/documentation/device/sensor/sensor.md b/documentation/device/sensor/sensor.md new file mode 100644 index 0000000000..db9da643c9 --- /dev/null +++ b/documentation/device/sensor/sensor.md @@ -0,0 +1,465 @@ +# Sensor Device + +## Introduction + +Sensor is an important part of the Internet of Things, and "Sensor to the Internet of Things" is equivalent to "eyes to humans". Without eyes, human beings can not see the vast world of flowers. The same is true for the Internet of Things. + +Nowadays, with the development of Internet of Things, a large number of Sensors have been developed for developers to choose, such as Accelerometer, Magnetometer, Gyroscope, Barometer/pressure, Humidometer and so on. These sensors, manufactured by the world's leading semiconductor manufacturers, have increased market selectivity and made application development more difficult. Because different sensor manufacturers and sensors need their own unique drivers to run, so when developing applications, they need to adapt to different sensors, which naturally increases the difficulty of development. In order to reduce the difficulty of application development and increase the reusability of sensor driver, we designed a Sensor device. + +The function of Sensor device is to provide a unified operation interface for the upper layer and improve the reusability of the upper code. + +### Characteristics of Sensor Device + +- **Interface**: Standard device interface (open/close/read/control) +- **Work mode**: support polling, interruption, FIFO three modes +- **Power mode**: support four modes: power failure, common, low power consumption and high power consumption + +## Access Sensor Device + +The application accesses the sensor device through the I/O device management interface provided by RT-Thread. The related interfaces are as follows: + +| Functions | Description | +| --------------------------- | ------------------------------------------------------------ | +| rt_device_find() | Finding device handles based on device name of sensor device | +| rt_device_open() | open sensor device | +| rt_device_read() | read data | +| rt_device_control() | control sensor device | +| rt_device_set_rx_indicate() | setting reveive callback fuction | +| rt_device_close() | close sensor device | + +### Find Sensor Device + +The application obtains the device handle according to the name of the sensor device, and then can operate the sensor device. The function of finding the device is as follows: + +```c +rt_device_t rt_device_find(const char* name); +``` + +| **Parameter** | **Description** | +| ------------- | ------------------------------------------------------------ | +| name | sensor device name | +| **return** | —— | +| handle | Finding the corresponding device returns the corresponding device handle | +| RT_NULL | No corresponding device object was found | + +The use example is as follows: +```c +#define SENSOR_DEVICE_NAME "acce_st" /* sensor device name */ + +static rt_device_t sensor_dev; /* sensor device handle */ +/* Find the sensor device according to the device name and get the device handle */ +sensor_dev = rt_device_find(SENSOR_DEVICE_NAME); +``` + +### Open Sensor Device + +Through the device handle, the application can open and close the device. When the device is opened, it will check whether the device has been initialized or not. If it is not initialized, it will call the initialization interface initialization device by default. Open the device through the following functions: + +```c +rt_err_t rt_device_open(rt_device_t dev, rt_uint16_t oflags); +``` + +| **Parameter** | **Description** | +| ------------- | ------------------------------------------------------------ | +| dev | device handle | +| oflags | open mode flag | +| **Return** | —— | +| RT_EOK | open success | +| -RT_EBUSY | If the RT_DEVICE_FLAG_STANDALONE parameter is included in the parameter specified at the time of device registration, the device will not be allowed to open repeatedly. | +| -RT_EINVAL | Unsupported open mode | +| other err | open failed | + +The oflags parameter supports the following parameters: + +```c +#define RT_DEVICE_FLAG_RDONLY 0x001 /* Read-only mode for standard device, polling mode for corresponding sensors */ +#define RT_DEVICE_FLAG_INT_RX 0x100 /* Interrupt Receiving Mode */ +#define RT_DEVICE_FLAG_FIFO_RX 0x200 /* FIFO receiving mode */ +``` + +There are three modes of receiving and sending sensor data: interrupt mode, polling mode and FIFO mode. When using these three modes, **only one of them can be chosen**. If the sensor's open parameter oflags does not specify the use of interrupt mode or FIFO mode, polling mode is used by default. + +FIFO ,means first Input first output. FIFO transmission mode needs sensor hardware support, data is stored in hardware FIFO, read multiple data at a time, which saves CPU resources to do other operations. Very useful in low power mode + +If the sensor uses FIFO receiving mode, the value of oflags is RT_DEVICE_FLAG_FIFO_RX. + +An example of turning on sensor devices in polling mode is as follows: + +```c +#define SAMPLE_SENSOR_NAME "acce_st" /* sensor device name */ +int main(void) +{ + rt_device_t dev; + struct rt_sensor_data data; + + /* find sensor device */ + dev = rt_device_find(SAMPLE_SENSOR_NAME); + /* Open sensor devices in read-only and polling mode */ + rt_device_open(dev, RT_DEVICE_FLAG_RDWR); + + if (rt_device_read(dev, 0, &data, 1) == 1) + { + rt_kprintf("acce: x:%5d, y:%5d, z:%5d, timestamp:%5d\n", data.data.acce.x, data.data.acce.y, data.data.acce.z, data.timestamp); + } + rt_device_close(dev); + + return RT_EOK; +} +``` + +### Control Sensor Device + +By command control word, the application program can configure the sensor device through the following functions: + +```c +rt_err_t rt_device_control(rt_device_t dev, rt_uint8_t cmd, void* arg); +``` + +| **Parameter** | **Description** | +| ------------- | ------------------------------------------------------------ | +| dev | device handle | +| cmd | command control word, see below for more details. | +| arg | the parameters of command control word, see below for more details. | +| **Return** | —— | +| RT_EOK | success | +| -RT_ENOSYS | failed,device is NULL | +| other err | failed | + +`cmd` currently supports the following command control words: + +```c +#define RT_SEN_CTRL_GET_ID (0) /* read device ID */ +#define RT_SEN_CTRL_GET_INFO (1) /* get device information */ +#define RT_SEN_CTRL_SET_RANGE (2) /* Setting the measuring range of the sensor */ +#define RT_SEN_CTRL_SET_ODR (3) /* Setting the Output Rate of Sensor Data,unit is HZ */ +#define RT_SEN_CTRL_SET_MODE (4) /* Setting up working mode */ +#define RT_SEN_CTRL_SET_POWER (5) /* Setting up power mode */ +#define RT_SEN_CTRL_SELF_TEST (6) /* selfcheck */ +``` + +#### Get device information + +```c +struct rt_sensor_info info; +rt_device_control(dev, RT_SEN_CTRL_GET_INFO, &info); +LOG_I("vendor :%d", info.vendor); +LOG_I("model :%s", info.model); +LOG_I("unit :%d", info.unit); +LOG_I("intf_type :%d", info.intf_type); +LOG_I("period_min:%d", info.period_min); +``` + +#### Read Device ID + +```c +rt_uint8_t reg = 0xFF; +rt_device_control(dev, RT_SEN_CTRL_GET_ID, ®); +LOG_I("device id: 0x%x!", reg); +``` + +#### Setting the measuring range of the sensor + +The unit that sets the measuring range of the sensor is the unit that is provided when the device is registered. + +```c +rt_device_control(dev, RT_SEN_CTRL_SET_RANGE, (void *)1000); +``` + +#### Setting the Output Rate of Sensor Data + +Set the output rate to 100HZ and call the following interface. + +```c +rt_device_control(dev, RT_SEN_CTRL_SET_ODR, (void *)100); +``` + +#### Setting up working mode + +```c +/* Set the working mode to polling mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_MODE, (void *)RT_SEN_MODE_POLLING); +/* Set working mode to interrupt mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_MODE, (void *)RT_SEN_MODE_INT); +/* Set working mode to FIFO mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_MODE, (void *)RT_SEN_MODE_FIFO); +``` + +#### Setting up power mode + +```c +/* Set power mode to power-off mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_POWER, (void *)RT_SEN_POWER_DOWN); +/* Set power mode to normal mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_POWER, (void *)RT_SEN_POWER_NORMAL); +/* Setting Power Mode to Low Power Consumption Mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_POWER, (void *)RT_SEN_POWER_LOW); +/* Setting Power Mode to High Performance Mode */ +rt_device_control(dev, RT_SEN_CTRL_SET_POWER, (void *)RT_SEN_POWER_HIGH); +``` + +#### Device self-inspection + +```c +int test_res; +/* Control equipment self-check and return the results. Returning RT_EOK indicates success of self-check and other values indicate failure of self-check. */ +rt_device_control(dev, RT_SEN_CTRL_SELF_TEST, &test_res); +``` + +### Setting Reveive Callback Fuction + +Data reception instructions can be set by following functions. When the sensor receives data, it notifies the upper application thread that data arrives: + +```c +rt_err_t rt_device_set_rx_indicate(rt_device_t dev, rt_err_t (*rx_ind)(rt_device_t dev,rt_size_t size)); +``` + +| **Parameter** | **Description** | +| ------------- | --------------------------------------------- | +| dev | device handle | +| rx_ind | Callback function pointer | +| dev | device handle(parameter of callback function) | +| size | buffer size(parameter of callback function) | +| **Return** | —— | +| RT_EOK | Successful setup | + +The callback function of the function is provided by the user. If the sensor is opened in interrupt mode, when the sensor receives data and interrupts, the callback function will be called, and the data size of the buffer will be placed in the `size` parameter, and the sensor device handle will be placed in the `dev` parameter for users to obtain. + +Generally, receiving callback function can send a semaphore or event to inform sensor data processing thread that data arrives. The use example is as follows: + +```c +#define SAMPLE_SENSOR_NAME "acce_st" /* sensor device name */ +static rt_device_t dev; /* sensoe device handle*/ +static struct rt_semaphore rx_sem; /* The semaphore used to receive messages */ + +/* Callback function for receiving data */ +static rt_err_t sensor_input(rt_device_t dev, rt_size_t size) +{ + /* When the sensor receives the data, it generates an interrupt, calls the callback function, and sends the semphore . */ + rt_sem_release(&rx_sem); + + return RT_EOK; +} + +static int sensor_sample(int argc, char *argv[]) +{ + dev = rt_device_find(SAMPLE_SENSOR_NAME); + + /* Open Sensor Device in Interrupt Receive and Poll Send Mode */ + rt_device_open(dev, RT_DEVICE_FLAG_INT_RX); + /* init semphore */ + rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO); + + /* setting reveive callback function */ + rt_device_set_rx_indicate(dev, sensor_input); +} + +``` + +### Read Data of Sensor Device + +The following functions can be called to read the data received by the sensor: + +```c +rt_size_t rt_device_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size); +``` + +| **Parameter** | **Description** | +| ---------------------- | ------------------------------------------------------------ | +| dev | device handle | +| pos | Read data offset, sensor does not use this parameter | +| buffer | Buffer pointer, read data will be saved in the buffer | +| size | Size of read data | +| **Return** | —— | +| Real size of read data | Returns the number of read data | +| 0 | The errno of the current thread needs to be read to determine the error status | + +The sensor uses the interrupt receiving mode and cooperates with the receiving callback function as follows: + +```c +static rt_device_t dev; /* sensor device handle */ +static struct rt_semaphore rx_sem; /* The semaphore used to receive messages */ + +/* Threads receiving data */ +static void sensor_irq_rx_entry(void *parameter) +{ + rt_device_t dev = parameter; + struct rt_sensor_data data; + rt_size_t res; + + while (1) + { + rt_sem_take(rx_sem, RT_WAITING_FOREVER); + + res = rt_device_read(dev, 0, &data, 1); + if (res == 1) + { + sensor_show_data(dev, &data); + } + } +} + +``` + +The sensor uses FIFO receiving mode and cooperates with receiving callback function as follows: + +```c +static rt_sem_t sensor_rx_sem = RT_NULL; +rt_err_t rx_cb(rt_device_t dev, rt_size_t size) +{ + rt_sem_release(sensor_rx_sem); + return 0; +} +static void sensor_fifo_rx_entry(void *parameter) +{ + rt_device_t dev = parameter; + struct rt_sensor_data data; + rt_size_t res, i; + + data = rt_malloc(sizeof(struct rt_sensor_data) * 32); + + while (1) + { + rt_sem_take(sensor_rx_sem, RT_WAITING_FOREVER); + + res = rt_device_read(dev, 0, data, 32); + for (i = 0; i < res; i++) + { + sensor_show_data(dev, &data[i]); + } + } +} +int main(void) +{ + static rt_thread_t tid1 = RT_NULL; + rt_device_t dev; + struct rt_sensor_data data; + + sensor_rx_sem = rt_sem_create("sen_rx_sem", 0, RT_IPC_FLAG_FIFO); + tid1 = rt_thread_create("sen_rx_thread", + sensor_fifo_rx_entry, dev, + 1024, + 15, 5); + if (tid1 != RT_NULL) + rt_thread_startup(tid1); + + dev = rt_device_find("acce_st"); + rt_device_set_rx_indicate(dev, rx_cb); + rt_device_open(dev, RT_SEN_FLAG_FIFO); + return RT_EOK; +} +``` + +### Close Sensor Device + +When the application completes the sensor operation, the sensor device can be closed by the following functions: + +```c +rt_err_t rt_device_close(rt_device_t dev); +``` + +| **Parameter** | **Description** | +| ------------- | ------------------------------------------------------------ | +| dev | device handle | +| **Return** | —— | +| RT_EOK | The equipment was closed successfully. | +| -RT_ERROR | The device has been completely shut down and cannot be closed repeatedly. | +| other err | failed to close th device | + +Closing the device interface and opening the device interface should be used in pairs, opening the primary device should close the primary device, so that the device will be completely closed, otherwise the device is still in an open state. + +## Example Code for Sensor Device + +The specific use of sensor devices can be referred to the following sample code, the main steps of the sample code are as follows: + +1. Find the sensor device first and get the device handle. + +2. Open the sensor device by polling. + +3. Read the data five times in a row and print it out. + +4. Close the sensor device. + +This sample code is not limited to a specific BSP. According to the BSP registered sensor device, input different dev_name to run. + +```c +/* + * Program List: This is a routine for sensor devices + * The routine exports the sensor_sample command to the control terminal + * Command Call Format:sensor_sample dev_name + * Command Interpretation: The second parameter of the command is the name of the sensor device to be used. + * Program function: Open the corresponding sensor, and then read the data five times in a row and print it out. +*/ + +#include "sensor.h" + +static void sensor_show_data(rt_size_t num, rt_sensor_t sensor, struct rt_sensor_data *sensor_data) +{ + switch (sensor->info.type) + { + case RT_SENSOR_CLASS_ACCE: + rt_kprintf("num:%3d, x:%5d, y:%5d, z:%5d, timestamp:%5d\n", num, sensor_data->data.acce.x, sensor_data->data.acce.y, sensor_data->data.acce.z, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_GYRO: + rt_kprintf("num:%3d, x:%8d, y:%8d, z:%8d, timestamp:%5d\n", num, sensor_data->data.gyro.x, sensor_data->data.gyro.y, sensor_data->data.gyro.z, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_MAG: + rt_kprintf("num:%3d, x:%5d, y:%5d, z:%5d, timestamp:%5d\n", num, sensor_data->data.mag.x, sensor_data->data.mag.y, sensor_data->data.mag.z, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_HUMI: + rt_kprintf("num:%3d, humi:%3d.%d%%, timestamp:%5d\n", num, sensor_data->data.humi / 10, sensor_data->data.humi % 10, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_TEMP: + rt_kprintf("num:%3d, temp:%3d.%dC, timestamp:%5d\n", num, sensor_data->data.temp / 10, sensor_data->data.temp % 10, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_BARO: + rt_kprintf("num:%3d, press:%5d, timestamp:%5d\n", num, sensor_data->data.baro, sensor_data->timestamp); + break; + case RT_SENSOR_CLASS_STEP: + rt_kprintf("num:%3d, step:%5d, timestamp:%5d\n", num, sensor_data->data.step, sensor_data->timestamp); + break; + default: + break; + } +} + +static void sensor_sample(int argc, char **argv) +{ + rt_device_t dev = RT_NULL; + struct rt_sensor_data data; + rt_size_t res, i; + + /* Finding Sensor Devices in the System */ + dev = rt_device_find(argv[1]); + if (dev == RT_NULL) + { + rt_kprintf("Can't find device:%s\n", argv[1]); + return; + } + + /* Open sensor devices in polling mode */ + if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK) + { + rt_kprintf("open device failed!"); + return; + } + + for (i = 0; i < 5; i++) + { + /* Read a data from a sensor */ + res = rt_device_read(dev, 0, &data, 1); + if (res != 1) + { + rt_kprintf("read data failed!size is %d", res); + } + else + { + sensor_show_data(i, (rt_sensor_t)dev, &data); + } + rt_thread_mdelay(100); + } + /* Close the sensor device */ + rt_device_close(dev); +} +MSH_CMD_EXPORT(sensor_sample, sensor device sample); +``` + diff --git a/documentation/device/spi/figures/spi1.png b/documentation/device/spi/figures/spi1.png new file mode 100644 index 0000000000000000000000000000000000000000..2096701713f23a386b6827ec3740f86b206da5df GIT binary patch literal 8051 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 literal 0 HcmV?d00001 diff --git a/documentation/device/spi/figures/spi2.png b/documentation/device/spi/figures/spi2.png new file mode 100644 index 0000000000000000000000000000000000000000..55c3188d559bea0385f65d4d852cfe055580e39f GIT binary patch literal 10016 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 DM9c4r literal 0 HcmV?d00001 diff --git a/documentation/device/spi/figures/spi5.png b/documentation/device/spi/figures/spi5.png new file mode 100644 index 0000000000000000000000000000000000000000..2e71536451ce4c025d2370d67e07a46ccb140c01 GIT binary patch literal 46773 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�V-k_f#FLbEf z;f_w#sdIQ#eM+9a^n~*}}$KO~kV6}w*z`IXFh@kNP8|&SchWcgB{dGadUqq-3 zQyHP7{!YF3rf?v_iJC3xyX=tU;&FxuvE#X`HwnEL}kkDyn`K8wTf87Bz}jOe?&ELwx|2J?yYKM^p(yua6TW+@_6xR zfB$GLGRv!ae? zNASH$s?kLP;&J4=ij4-}nic43jjt<;2Vqh|47H?7wT|Zm8C9d=!?8=3Aw?_1J0a*Vxy_(({D2I3T61ygy_PaUiRhTVSryl@b9ED0lhn`5wQ>G8lwHf{A87vHp!fgva>BJO in)yGW`TzefxgRRJxc_H& literal 0 HcmV?d00001 diff --git a/documentation/device/spi/spi.md b/documentation/device/spi/spi.md new file mode 100644 index 0000000000..de56a20823 --- /dev/null +++ b/documentation/device/spi/spi.md @@ -0,0 +1,741 @@ +# SPI Device + +## Introduction to SPI + +SPI (Serial Peripheral Interface) is a high-speed, full-duplex, synchronous communication bus commonly used for short-range communication. It is mainly used in EEPROM, FLASH, real-time clock, AD converter, and digital signal processing and between the device and the digital signal decoder. SPI generally uses 4 lines of communication, as shown in the following figure: + +![Ways of communication from SPI Master to SPI Slave](figures/spi1.png) + +* MOSI :SPI Bus Master Output/Slave Input. + +* MISO :SPI Bus Master Input/Slave Output. + +* SCLK :Serial Clock, Master device outputs clock signal to slave device. + +* CS : select the slave device, also called SS, CSB, CSN, EN, etc., the master device outputs a chip select signal to the slave device. + +The SPI works in master-slave mode and usually has one master and one or more slaves. The communication is initiated by the master device. The master device selects the slave device to communicate through CS, and then provides a clock signal to the slave device through SCLK. The data is output to the slave device through the MOSI, and the data sent by the slave device is received through the MISO. + +As shown in the figure below, the chip has two SPI controllers. The SPI controller corresponds to the SPI master. Each SPI controller can connect multiple SPI slaves. The slave devices mounted on the same SPI controller share three signal pins: SCK, MISO, MOSI, but the CS pins of each slave device are independent. + +![Connect from one SPI controller to multiple SPI slaves](figures/spi2.png) + +The master device selects the slave device by controlling the CS pin, typically active low. Only one CS pin is active on an SPI master, and the slave connected to the active CS pin can now communicate with the master. + +The slave's clock is provided by the master through SCLK, and MOSI and MISO complete the data transfer based on SCLK. The working timing mode of the SPI is determined by the phase relationship between CPOL (Clock Polarity) and CPHA (Clock Phase). CPOL represents the state of the initial level of the clock signal. A value of 0 indicates that the initial state of the clock signal is low, and a value of 1 indicates that the initial level of the clock signal is high. CPHA indicates on which clock edge the data is sampled. A value of 0 indicates that the data is sampled on the first clock change edge, and a value of 1 indicates that the data is sampled on the second clock change edge. There are 4 working timing modes according to different combinations of CPOL and CPHA: ①CPOL=0, CPHA=0; ②CPOL=0, CPHA=1; ③CPOL=1, CPHA=0; ④CPOL=1, CPHA=1. As shown below: + +![4 working timing modes of SPI](figures/spi5.png) + +**QSPI:** QSPI is short for Queued SPI and is an extension of the SPI interface from Motorola, which is more extensive than SPI applications. Based on the SPI protocol, Motorola has enhanced its functionality, added a queue transfer mechanism, and introduced a queue serial peripheral interface protocol (QSPI protocol). Using this interface, users can transfer transmission queues containing up to 16 8-bit or 16-bit data at one time. Once the transfer is initiated, CPU is not required until the end of the transfer, greatly improving the transfer efficiency. Compared to SPI, the biggest structural feature of QSPI is the replacement of the transmit and receive data registers of the SPI with 80 bytes of RAM. + +**Dual SPI Flash:** For SPI Flash, full-duplex is not commonly used. You can send a command byte into Dual mode and let it work in half-duplex mode to double data transfer. Thus, MOSI becomes SIO0 (serial io 0), and MISO becomes SIO1 (serial io 1), so that 2 bit data can be transmitted in one clock cycle, which doubles the data transmission. + +**Quad SPI Flash:** Similar to the Dual SPI, Quad SPI Flash adds two I/O lines (SIO2, SIO3) to transfer 4 bits of data in one clock. + +So for SPI Flash, there are three types of standard SPI Flash, Dual SPI Flash, Quad SPI Flash. At the same clock, the higher the number of lines, the higher the transmission rate. + +## Mount SPI Device + +The SPI driver registers the SPI bus and the SPI device needs to be mounted to the SPI bus that has already been registered. + +```C +rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device, + const char *name, + const char *bus_name, + void *user_data) +``` + +| **Parameter** | Description | +| -------- | ---------------------------------- | +| device | SPI device handle | +| name | SPI device name | +| bus_name | SPI bus name | +| user_data | user data pointer | +| **Return** | —— | +| RT_EOK | Success | +| Other Errors | Failure | + +This function is used to mount an SPI device to the specified SPI bus, register the SPI device with the kernel, and save user_data to the control block of the SPI device. + +The general SPI bus naming principle is spix, and the SPI device naming principle is spixy. For example, spi10 means device 0 mounted on the spi1 bus. User_data is generally the CS pin pointer of the SPI device. When data is transferred, the SPI controller will operate this pin for chip select. + +If you use the BSP in the `rt-thread/bsp/stm32` directory, you can use the following function to mount the SPI device to the bus: + +```c +rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef* cs_gpiox, uint16_t cs_gpio_pin); +``` + +The following sample code mounts the SPI FLASH W25Q128 to the SPI bus: + +```c +static int rt_hw_spi_flash_init(void) +{ + __HAL_RCC_GPIOB_CLK_ENABLE(); + rt_hw_spi_device_attach("spi1", "spi10", GPIOB, GPIO_PIN_14); + + if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10")) + { + return -RT_ERROR; + }; + + return RT_EOK; +} +/* Export to automatic initialization */ +INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init); +``` + +## Configuring SPI Device + +The SPI device's transmission parameters need to be configured after the SPI device is mounted to the SPI bus. + +```c +rt_err_t rt_spi_configure(struct rt_spi_device *device, + struct rt_spi_configuration *cfg) +``` + +| **Parameter** | **Description** | +| -------- | ---------------------------------- | +| device | SPI device handle | +| cfg | SPI configuration parameter pointer | +| **Return** | —— | +| RT_EOK | Success | + +This function saves the configuration parameters pointed to by `cfg` to the control block of the SPI device device, which is used when transferring data. + +The `struct rt_spi_configuration` prototype is as follows: + +```c +struct rt_spi_configuration +{ + rt_uint8_t mode; /* mode */ + rt_uint8_t data_width; /* data width, 8 bits, 16 bits, 32 bits */ + rt_uint16_t reserved; /* reserved */ + rt_uint32_t max_hz; /* maximum frequency */ +}; +``` + +**Mode: **Contains MSB/LSB, master-slave mode, timing mode, etc. The available macro combinations are as follows: + +```c +/* Set the data transmission order whether the MSB bit is first or the LSB bit is before */ +#define RT_SPI_LSB (0<<2) /* bit[2]: 0-LSB */ +#define RT_SPI_MSB (1<<2) /* bit[2]: 1-MSB */ + +/* Set the master-slave mode of the SPI */ +#define RT_SPI_MASTER (0<<3) /* SPI master device */ +#define RT_SPI_SLAVE (1<<3) /* SPI slave device */ + +/* Set clock polarity and clock phase */ +#define RT_SPI_MODE_0 (0 | 0) /* CPOL = 0, CPHA = 0 */ +#define RT_SPI_MODE_1 (0 | RT_SPI_CPHA) /* CPOL = 0, CPHA = 1 */ +#define RT_SPI_MODE_2 (RT_SPI_CPOL | 0) /* CPOL = 1, CPHA = 0 */ +#define RT_SPI_MODE_3 (RT_SPI_CPOL | RT_SPI_CPHA) /* CPOL = 1, CPHA = 1 */ + +#define RT_SPI_CS_HIGH (1<<4) /* Chipselect active high */ +#define RT_SPI_NO_CS (1<<5) /* No chipselect */ +#define RT_SPI_3WIRE (1<<6) /* SI/SO pin shared */ +#define RT_SPI_READY (1<<7) /* Slave pulls low to pause */ +``` + +**Data width:** The data width format that can be sent and received by the SPI master and SPI slaves is set to 8-bit, 16-bit or 32-bit. + +**Maximum Frequency:** Set the baud rate for data transfer, also based on the baud rate range at which the SPI master and SPI slaves operate. + +The example for configuration is as follows: + +```c + struct rt_spi_configuration cfg; + cfg.data_width = 8; + cfg.mode = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB; + cfg.max_hz = 20 * 1000 *1000; /* 20M */ + + rt_spi_configure(spi_dev, &cfg); +``` + +## QSPI Configuration + +To configure the transmission parameters of a QSPI device, use the following function: + +```c +rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configuration *cfg); +``` + +| **Parameter** | **Description** | +| -------- | ---------------------------------- | +| device | QSPI device handle | +| cfg | QSPI configuration parameter pointer | +| **Return** | —— | +| RT_EOK | Success | + +This function saves the configuration parameters pointed to by `cfg` to the control block of the QSPI device, which is used when transferring data. + +The `struct rt_qspi_configuration` prototype is as follows: + +```c +struct rt_qspi_configuration +{ + struct rt_spi_configuration parent; /* SPI device configuration parent */ + rt_uint32_t medium_size; /* medium size */ + rt_uint8_t ddr_mode; /* double rate mode */ + rt_uint8_t qspi_dl_width ; /* QSPI bus width, single line mode 1 bit, 2 line mode 2 bits, 4 line mode 4 bits */ +}; +``` + +## Access SPI Device + +In general, the MCU's SPI device communicates as a master and slave. In the RT-Thread, the SPI master is virtualized as an SPI bus device. The application uses the SPI device management interface to access the SPI slave device. The main interfaces are as follows: + +| **Function** | **Description** | +| -------------------- | ---------------------------------- | +| rt_device_find() | Find device handles based on SPI device name | +| rt_spi_transfer_message() | Custom transfer data | +| rt_spi_transfer() | Transfer data once | +| rt_spi_send() | Send data once | +| rt_spi_recv() | Receive data one | +| rt_spi_send_then_send() | Send data twice | +| rt_spi_send_then_recv() | Send then Receive | + +>The SPI data transfer related interface will call rt_mutex_take(). This function cannot be called in the interrupt service routine, which will cause the assertion to report an error. + +### Find SPI Device + +Before using the SPI device, you need to find and obtain the device handle according to the SPI device name, so that you can operate the SPI device. The device function is as follows. + +```c +rt_device_t rt_device_find(const char* name); +``` + +| **Parameter** | **Description** | +| ------------- | ------------------------------------------------------------ | +| name | Device name | +| **Return** | —— | +| device handle | Finding the corresponding device will return the corresponding device handle | +| RT_NULL | Corresponding device object unfound | + +In general, the name of the SPI device registered to the system is spi10, qspi10, etc. The usage examples are as follows: + +```c +#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI device name */ +struct rt_spi_device *spi_dev_w25q; /* SPI device handle */ + +/* Find the spi device to get the device handle */ +spi_dev_w25q = (struct rt_spi_device *)rt_device_find(W25Q_SPI_DEVICE_NAME); +``` + +### Transfer Custom Data + +By obtaining the SPI device handle, the SPI device management interface can be used to access the SPI device device for data transmission and reception. You can transfer messages by the following function: + +```c +struct rt_spi_message *rt_spi_transfer_message(struct rt_spi_device *device,struct rt_spi_message *message); +``` + +| **Parameter** | **Description** | +| ---------------- | ------------------------------------------------------------ | +| device | SPI device handle | +| message | message pointer | +| **Return** | —— | +| RT_NULL | Send successful | +| Non-null pointer | Send failed, return a pointer to the remaining unsent message | + +This function can transmit a series of messages, the user can customize the value of each parameter of the message structure to be transmitted, so that the data transmission mode can be conveniently controlled. The `struct rt_spi_message` prototype is as follows: + +```c +struct rt_spi_message +{ + const void *send_buf; /* Send buffer pointer */ + void *recv_buf; /* Receive buffer pointer */ + rt_size_t length; /* Send/receive data bytes */ + struct rt_spi_message *next; /* Pointer to the next message to continue sending */ + unsigned cs_take : 1; /* Take chip selection*/ + unsigned cs_release : 1; /* Release chip selection */ +}; +``` +send_buf :sendbuf is the send buffer pointer. When the value is RT_NULL, it means that the current transmission is only receiving state, and no data needs to be sent. + +recv_buf :recvbuf is the receive buffer pointer. When the value is RT_NULL, it means that the current transmission is in the transmit-only state. It does not need to save the received data, so the received data is directly discarded. + +length :The unit of length is word, that is, when the data length is 8 bits, each length occupies 1 byte; when the data length is 16 bits, each length occupies 2 bytes. + +next :The parameter next is a pointer to the next message to continue to send. If only one message is sent, the value of this pointer is RT_NULL. Multiple messages to be transmitted are connected together in a singly linked list by the next pointer. + +cs_take :A cs_take value of 1 means that the corresponding CS is set to a valid state before data is transferred. + +cs_release :A cs_release value of 1 indicates that the corresponding CS is released after the data transfer ends. + +>When send_buf or recv_buf is not empty, the available size for both cannot be less than length. +If you use this function to transfer messages, the first message sent by cs_take needs to be set to 1. Set the chip to be valid, and the cs_release of the last message needs to be set to 1. Release the chip select. + +An example of use is as follows: + +```c +#define W25Q_SPI_DEVICE_NAME "qspi10" /* SPI device name */ +struct rt_spi_device *spi_dev_w25q; /* SPI device handle */ +struct rt_spi_message msg1, msg2; +rt_uint8_t w25x_read_id = 0x90; /* command */ +rt_uint8_t id[5] = {0}; + +/* Find the spi device to get the device handle */ +spi_dev_w25q = (struct rt_spi_device *)rt_device_find(W25Q_SPI_DEVICE_NAME); +/* Send command to read ID */ +struct rt_spi_message msg1, msg2; + +msg1.send_buf = &w25x_read_id; +msg1.recv_buf = RT_NULL; +msg1.length = 1; +msg1.cs_take = 1; +msg1.cs_release = 0; +msg1.next = &msg2; + +msg2.send_buf = RT_NULL; +msg2.recv_buf = id; +msg2.length = 5; +msg2.cs_take = 0; +msg2.cs_release = 1; +msg2.next = RT_NULL; + +rt_spi_transfer_message(spi_dev_w25q, &msg1); +rt_kprintf("use rt_spi_transfer_message() read w25q ID is:%x%x\n", id[3], id[4]); +``` + +### Transfer Data Once + +If only transfer data for once, use the following function: + +```c +rt_size_t rt_spi_transfer(struct rt_spi_device *device, + const void *send_buf, + void *recv_buf, + rt_size_t length); +``` + +| **Parameter** | **Description** | +|----------|----------------------| +| device | SPI device handle | +| send_buf | Send data buffer pointer | +| recv_buf | Receive data buffer pointer | +| length | Length of data send/received | +| **Return** | —— | +| 0 | Transmission failed | +| Non-0 Value | Length of data successfully transferred | + +This function is equivalent to calling `rt_spi_transfer_message()` to transfer a message. When starting to send data, the chip is selected. When the function returns, the chip is released. The message parameter is configured as follows: + +```c +struct rt_spi_message msg; + +msg.send_buf = send_buf; +msg.recv_buf = recv_buf; +msg.length = length; +msg.cs_take = 1; +msg.cs_release = 1; +msg.next = RT_NULL; +``` + +### Send Data Once + +If only send data once and ignore the received data, use the following function: + +```c +rt_size_t rt_spi_send(struct rt_spi_device *device, + const void *send_buf, + rt_size_t length) +``` + +| **Parameter** | **Description** | +|----------|--------------------| +| device | SPI device handle | +| send_buf | Send data buffer pointer | +| length | Length of data sent | +| **Return** | —— | +| 0 | Transmission failed | +| Non-0 Value | Length of data successfully transferred | + +Call this function to send the data of the buffer pointed to by send_buf, ignoring the received data. This function is a wrapper of the `rt_spi_transfer()` function. + +This function is equivalent to calling `rt_spi_transfer_message()` to transfer a message. When the data starts to be sent, the chip is selected. When the function returns, the chip is released. The message parameter is configured as follows: + +```c +struct rt_spi_message msg; + +msg.send_buf = send_buf; +msg.recv_buf = RT_NULL; +msg.length = length; +msg.cs_take = 1; +msg.cs_release = 1; +msg.next = RT_NULL; +``` + +### Receive Data Once + +If only receive data once, use the following function: + +```c +rt_size_t rt_spi_recv(struct rt_spi_device *device, + void *recv_buf, + rt_size_t length); +``` + +| **Parameter** | **Description** | +|----------|--------------------| +| device | SPI device handle | +| recv_buf | Send data buffer pointer | +| length | Length of data sent | +| **Return** | —— | +| 0 | Transmission failed | +| Non-0 Value | Length of data successfully transferred | + +Call this function to receive the data and save it to the buffer pointed to by recv_buf. This function is a wrapper of the `rt_spi_transfer()` function. The SPI bus protocol stipulates that the master can only generate a clock, so when receiving data, the master will send the data 0XFF. + +This function is equivalent to calling `rt_spi_transfer_message()` to transfer a message. When receiving data, the chip is selected. When the function returns, the chip is released. The message parameter is configured as follows: + +```c +struct rt_spi_message msg; + +msg.send_buf = RT_NULL; +msg.recv_buf = recv_buf; +msg.length = length; +msg.cs_take = 1; +msg.cs_release = 1; +msg.next = RT_NULL; +``` + +### Send Data Twice in Succession + +If need to send data of 2 buffers in succession and the CS is not released within the process, you can call the following function: + +```c +rt_err_t rt_spi_send_then_send(struct rt_spi_device *device, + const void *send_buf1, + rt_size_t send_length1, + const void *send_buf2, + rt_size_t send_length2); +``` + +| **Parameter** | **Description** | +|--------------|---------------------------| +| device | SPI device handle | +| send_buf1 | Send data buffer pointer 1 | +| send_length1 | Send data buffer length 1 | +| send_buf2 | Send data buffer pointer 2 | +| send_length2 | Send data buffer length 2 | +| **Return** | —— | +| RT_EOK | Send Successful | +| -RT_EIO | Send Failed | + +This function can continuously send data of 2 buffers, ignore the received data, select the CS when send_buf1 is sent, and release the CS after sending send_buf2. + +This function is suitable for writing a piece of data to the SPI device, sending data such as commands and addresses for the first time, and sending data of the specified length for the second time. The reason is that it is sent twice instead of being merged into one data block, or `rt_spi_send()`is called twice, because in most data write operations, commands and addresses need to be sent first, and the length is usually only a few bytes. If send it in conjunction with the data that follows, it will need a memory space request and a lot of data handling. If `rt_spi_send()`is called twice, the chip select will be released after the command and address are sent. Most SPI devices rely on setting the chip select once to be the start of the command, so the chip selects the command or address after sending. After the data is released, the operation is discarded. + +This function is equivalent to calling `rt_spi_transfer_message()` to transfer 2 messages. The message parameter is configured as follows: + +```c +struct rt_spi_message msg1,msg2; + +msg1.send_buf = send_buf1; +msg1.recv_buf = RT_NULL; +msg1.length = send_length1; +msg1.cs_take = 1; +msg1.cs_release = 0; +msg1.next = &msg2; + +msg2.send_buf = send_buf2; +msg2.recv_buf = RT_NULL; +msg2.length = send_length2; +msg2.cs_take = 0; +msg2.cs_release = 1; +msg2.next = RT_NULL; +``` + +### Receive Data After Sending Data + +If need to send data to the slave device first, then receive the data sent from the slave device, and the CS is not released within the process, call the following function to implement: + +```c +rt_err_t rt_spi_send_then_recv(struct rt_spi_device *device, + const void *send_buf, + rt_size_t send_length, + void *recv_buf, + rt_size_t recv_length); +``` + +| **Parameter** | **Description** | +|-------------|--------------------------| +| device | SPI slave device handle | +| send_buf | Send data buffer pointer | +| send_length | Send data buffer length | +| recv_buf | Receive data buffer pointer | +| recv_length | Receive data buffer length | +| **Return** | —— | +| RT_EOK | Successful | +| -RT_EIO | Failed | + +This function select CS when sending the first data send_buf when the received data is ignored, and the second data is sent. At this time, the master device will send the data 0XFF, and the received data will be saved in recv_buf, and CS will be released when the function returns. + +This function is suitable for reading a piece of data from the SPI slave device. The first time it will send some command and address data, and then receive the data of the specified length. + +This function is equivalent to calling `rt_spi_transfer_message()` to transfer 2 messages. The message parameter is configured as follows: + +```c +struct rt_spi_message msg1,msg2; + +msg1.send_buf = send_buf; +msg1.recv_buf = RT_NULL; +msg1.length = send_length; +msg1.cs_take = 1; +msg1.cs_release = 0; +msg1.next = &msg2; + +msg2.send_buf = RT_NULL; +msg2.recv_buf = recv_buf; +msg2.length = recv_length; +msg2.cs_take = 0; +msg2.cs_release = 1; +msg2.next = RT_NULL; +``` + +The SPI device management module also provides `rt_spi_sendrecv8()` and `rt_spi_sendrecv16()` functions, both are wrapper of the `rt_spi_send_then_recv()`. `rt_spi_sendrecv8()` sends a byte data and receives one byte data, and`rt_spi_sendrecv16()` sends 2 bytes. The section data receives 2 bytes of data at the same time. + +## Access QSPI Device + +The data transfer interface of QSPI is as follows: + +| **P**arameter | **Description** | +| -------------------- | ----------------------------| +| rt_qspi_transfer_message() | Transfer message | +| rt_qspi_send_then_recv() | Send then receive | +| rt_qspi_send() | Send data once | + +>The QSPI data transfer related interface will call rt_mutex_take(). This function cannot be called in the interrupt service routine, which will cause the assertion to report an error. + +### Transfer Data + +Transfer messages by the following function: + +```c +rt_size_t rt_qspi_transfer_message(struct rt_qspi_device *device, struct rt_qspi_message *message); +``` + +| **Parameter** | **Description** | +|----------|--------------------------------------------| +| device | QSPI device handle | +| message | Message pointer | +| **Return** | —— | +| Actual transmitted message size | | + +The message `structure struct rt_qspi_message` prototype is as follows: + +```c +struct rt_qspi_message +{ + struct rt_spi_message parent; /* inhert from struct rt_spi_message */ + + struct + { + rt_uint8_t content; /* Instruction content */ + rt_uint8_t qspi_lines; /* Instruction mode, single line mode 1 bit, 2 line mode 2 bits, 4 line mode 4 bits */ + } instruction; /* Instruction phase */ + + struct + { + rt_uint32_t content; /* Address/alternate byte content */ + rt_uint8_t size; /* Address/alternate byte size */ + rt_uint8_t qspi_lines; /* Address/alternate byte mode, single line mode 1 bit, 2 line mode 2 bits, 4 line mode 4 bits */ + } address, alternate_bytes; /* Address/alternate byte stage */ + + rt_uint32_t dummy_cycles; /* Dummy cycle */ + rt_uint8_t qspi_data_lines; /* QSPI data line */ +}; +``` + +### Receive Data + +Use the following function to receive data: + +```c +rt_err_t rt_qspi_send_then_recv(struct rt_qspi_device *device, + const void *send_buf, + rt_size_t send_length, + void *recv_buf, + rt_size_t recv_length); +``` + +| **Parameter** | **Description** | +|-------------|--------------------------| +| device | QSPI device handle | +| send_buf | Send data buffer pointer | +| send_length | Send data length | +| recv_buf | Receive data buffer pointer | +| recv_length | Receive data length | +| **Return** | —— | +| RT_EOK | Successful | +| Other Errors | Failed | + +The send_buf parameter contains the sequence of commands that will be sent. + +### Send Data + +```c +rt_err_t rt_qspi_send(struct rt_qspi_device *device, const void *send_buf, rt_size_t length) +``` + +| **Parameter** | **Description** | +|-------------|--------------------------| +| device | QSPI device handle | +| send_buf | Send data buffer pointer | +| length | Send data length | +| **Return** | —— | +| RT_EOK | Successful | +| Other Errors | Failed | + +The send_buf parameter contains the sequence of commands and data to be sent. + +## Special Usage Scenarios + +In some special usage scenarios, a device wants to monopolize the bus for a period of time, and the CS is always valid during the period, during which the data transmission may be intermittent, then the relevant interface can be used as shown. The transfer data function must use `rt_spi_transfer_message()`, and this function must set the cs_take and cs_release of the message to be transmitted to 0 value, because the CS has already used other interface control, and does not need to control during data transmission. + +### Acquire the SPI bus + +In the case of multi-threading, the same SPI bus may be used in different threads. In order to prevent the data being transmitted by the SPI bus from being lost, the slave device needs to acquire the right to use the SPI bus before starting to transfer data. To transfer data using the bus, use the following function to acquire the SPI bus: + +```c +rt_err_t rt_spi_take_bus(struct rt_spi_device *device); +``` + +| **Parameter** | **Description** | +|----------|---------------| +| device | SPI device handle | +| **Return** | —— | +| RT_EOK | Successful | +| Other Errors | Failed | + +### Select CS + +After obtaining the usage right of the bus from the device, you need to set the corresponding chip selection signal to be valid. You can use the following function to select the CS: + +```c +rt_err_t rt_spi_take(struct rt_spi_device *device); +``` + +| **Parameter** | **Description** | +|----------|---------------| +| device | SPI device handle | +| **Return** | —— | +| 0 | Successful | +| Other Errors | Failed | + +### Add a New Message + +When using `rt_spi_transfer_message()` to transfer messages, all messages to be transmitted are connected in the form of a singly linked list. Use the following function to add a new message to be sent to the message list: + +```c +void rt_spi_message_append(struct rt_spi_message *list, + struct rt_spi_message *message); +``` + +| **Parameter** | **Description** | +| ------------- | ----------------------------------- | +| list | Message link node to be transmitted | +| message | New message pointer | + +### Release CS + +After the device data transfer is completed, CS need to be released. Use the following function to release the CS: + +```c +rt_err_t rt_spi_release(struct rt_spi_device *device); +``` + +| **Parameter** | **D**escription | +|----------|---------------| +| device | SPI device handle | +| Return | —— | +| 0 | Successful | +| Other Errors | Failed | + +### Release Data Bus + +The slave device does not use the SPI bus to transfer data. The bus must be released as soon as possible so that other slave devices can use the SPI bus to transfer data. The following function can be used to release the bus: + +```c +rt_err_t rt_spi_release_bus(struct rt_spi_device *device); +``` + +| **Parameter** | **Description** | +|----------|---------------| +| device | SPI device handle | +| **Return** | —— | +| RT_EOK | Successful | + +## SPI Device Usage Example + +The specific use of the SPI device can be referred to the following sample code. The sample code first finds the SPI device to get the device handle, and then uses the rt_spi_transfer_message() send command to read the ID information. + +```c +/* + * Program listing: This is a SPI device usage routine + * The routine exports the spi_w25q_sample command to the control terminal + * Command call format: spi_w25q_sample spi10 + * Command explanation: The second parameter of the command is the name of the SPI device to be used. If it is empty, the default SPI device is used. + * Program function: read w25q ID data through SPI device +*/ + +#include +#include + +#define W25Q_SPI_DEVICE_NAME "qspi10" + +static void spi_w25q_sample(int argc, char *argv[]) +{ + struct rt_spi_device *spi_dev_w25q; + char name[RT_NAME_MAX]; + rt_uint8_t w25x_read_id = 0x90; + rt_uint8_t id[5] = {0}; + + if (argc == 2) + { + rt_strncpy(name, argv[1], RT_NAME_MAX); + } + else + { + rt_strncpy(name, W25Q_SPI_DEVICE_NAME, RT_NAME_MAX); + } + + /* Find the spi device to get the device handle */ + spi_dev_w25q = (struct rt_spi_device *)rt_device_find(name); + if (!spi_dev_w25q) + { + rt_kprintf("spi sample run failed! can't find %s device!\n", name); + } + else + { + /* Method 1: Send the command to read the ID using rt_spi_send_then_recv() */ + rt_spi_send_then_recv(spi_dev_w25q, &w25x_read_id, 1, id, 5); + rt_kprintf("use rt_spi_send_then_recv() read w25q ID is:%x%x\n", id[3], id[4]); + + /* Method 2: Send the command to read the ID using rt_spi_transfer_message() */ + struct rt_spi_message msg1, msg2; + + msg1.send_buf = &w25x_read_id; + msg1.recv_buf = RT_NULL; + msg1.length = 1; + msg1.cs_take = 1; + msg1.cs_release = 0; + msg1.next = &msg2; + + msg2.send_buf = RT_NULL; + msg2.recv_buf = id; + msg2.length = 5; + msg2.cs_take = 0; + msg2.cs_release = 1; + msg2.next = RT_NULL; + + rt_spi_transfer_message(spi_dev_w25q, &msg1); + rt_kprintf("use rt_spi_transfer_message() read w25q ID is:%x%x\n", id[3], id[4]); + + } +} +/* Export to the msh command list */ +MSH_CMD_EXPORT(spi_w25q_sample, spi w25q sample); +``` + diff --git a/documentation/device/uart/figures/uart-dma.png b/documentation/device/uart/figures/uart-dma.png new file mode 100644 index 0000000000000000000000000000000000000000..1415e8552ac652374bf491547a6a32fa80b1f2ac GIT binary patch literal 40241 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