Linux offers various tools to interface with serial COM port, it uses ttySx for a serial port device name. For example, COM1 (DOS/Windows name) is ttyS0, COM2 is ttyS1 and so on. Show
1. Display Detected System’s Serial Support Simply run dmesg command $ dmesg | grep tty 2. Linux serial console programs Once serial ports identified you can configure Linux box using various utilities:
The best friendly serial communication program for controlling modems and connecting to dump devices Minicom installation Install the program with: sudo apt-get install minicom Alternatively, you can get Minicom via the Synaptic Package Manager. If it is a direct serial connection, the output will be something like this: [ 22.587279] console [tty0] enabled [ 24.186230] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 24.186860] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A [ 51.598012] audit(1243322582.732:2): type=1503 operation="inode_permission" requested_mask="a::" denied_mask="a::" name="/dev/tty" pid=5705 profile="/usr/sbin/cupsd" namespace="default" For a USB-to-Serial adapter, one may see: [ 0.000000] console [tty0] enabled [ 5.065029] usb 4-3: pl2303 converter now attached to ttyUSB0 Then try to run minicom with Below is an example using Serial COM Port to access Raspberry Pi 3 terminal: To exit Minicom when in terminal mode press ‘Ctrl-A’ to get a message bar at the bottom of the terminal window and then press ‘X’. Don’t forget to save config as default with “Save setup as dfl”
is a PL2303 and from everything I’ve read no additional drivers are required. The device is recognised as a PL2303. So you won’t need first install PL2303 driver as you have to in Windows OK now I can ssh Rasp Pi 3 with Terminal in Ubuntu You won’t see what you’ve sent only get what you receive via UART. You can see by joining RX-TX of PL2303
Users can also choose GUI version of Serial COM Port utility on Linux. Similar to famous GUI software on Windows like: Terminal, Hercules… I found the most advantage of using GUI software rather than Terminal ones is the ability to separate Tx and Rx windows, in some applications (eg: your debug program), this could be very helpful.
https://gitlab.com/cutecom/cutecom Preferences: https://www.cyberciti.biz/faq/find-out-linux-serial-ports-with-setserial/ https://stackoverflow.com/questions/5347962/how-to-connect-to-a-terminal-to-serial-usb-device-on-ubuntu-10-10 https://help.ubuntu.com/community/Minicom https://askubuntu.com/questions/631601/how-to-find-serial-port In this article, I’m going to instruct most common ways to connect with the target MCU, for flashing program or debugging. First, you need to follow several steps: Part A. Strategy1. Reading the documentsTo understand what communication protocol you will need and what’s available in your target MCU. Figure out the debug/flash pins on your target 2. Choose your setupAfter step 1, you must then select one best suited option for your case. 3. Prepare off the hardware+ Programmer/Debugger + Connection wires + Target MCU interface Part B. Traditional debug protocols1. SWD protocolIn most cases we only need 4 wires: 2 power wires and 2 wires for CLK and IO. a. Utilize onboard ST-Link from STM32F407VG DiscoveryFirst remove the jumpers on STM32F407VG Discovery to download the firmware to another STM32 board supports SWD. From top to bottom the pin is specified as the following image: Kit STMF4 Discovery Kit ARM design Comment 3V VCC No connect SWCLK/JTCK/Pin2 JTCK GND/Pin3 GND SWDIO/JTMS/pin 4 JTMS JTDI No connect TRACESWO/JTDO/pin 6 JSWO NRST pin JNRST/NRST Connect to external STM32Discovery board: Connect JTCK to PA14 on your target STM32F407. Connect JTMS to PA13 on your target STM32F407. Finally GND and VCC. (UM1472 User manual Discovery kit with STM32F407VG Discovery board) Pin6 SWO: SWD trace data line (optional and therefore not subject to this post). Thử xem cái này có phải dùng để chạy STMStudio hay ko, nếu có vẫn để thôi 2. JTAG protocolNormally you’ll use SEGGER J-LINK (V8, V9), with pinout as follow: Note that: PB4 = nTRST = JNRST.
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/ 3. SWIM protocolUsed for programming STM8S MCUs C. Using bootloaderFlashing the code using bootloaderBesides the official methods mentioned above, with ST’s MCUs such as STM32Fx…, users have the options for flashing the firmware to the MCU. One must know the difference between chip default bootloader (by the manufacturer) and user bootloader. User bootloader is a piece of program that can be changed by user that will be put at the start of executing Flash address (as any normal program), like: Arduino bootloader or Ardupilot bootloader… 1. Using ST’s bootloader via UARTThis is useful when you don’t have any SWD, JTAG tool. Or when you don’t want to implement JTAG/SWD in your circuit. Tie the BOOT0 to VDD, then reset the chip to go to the manufacturer’s bootloader (This bootloader program is designed by the chip manufacturer (ST) and can’t be changed). Now you can program the target using one of available UART ports (the bootloader program will scan for used UART port, so any 2-pin-1-UART-port will work). Below are the related links: Program STM32F4 with UART AN3155 – Application note – USART protocol used in the STM32 bootloader https://www.st.com/en/development-tools/flasher-stm32.html 2. ST’s USB DFU bootloaderSimilar idea to UART bootloader, but DFU mode uses USB communication. This is useful if you don’t have USB-UART converter. https://hocarm.org/usb-dfu-bootloader-trong-stm32/ 3. User custom bootloaderYou can make use of available open source projects for bootloader program (on Github…) and write or customize your own bootloader that suits your application C. Other advanced methodsJ-Link Remote Server (TCP/IP)Links:+ https://www.segger.com/products/debug-probes/j-link/tools/j-link-remote-server/ + https://mcuoneclipse.com/2017/02/05/remote-board-debugging-j-link-remote-server-with-eclipse/ References:
2. http://www.st.com/en/development-tools/seg-jlink.html 3. C:\Program Files (x86)\SEGGER\JLink_V622e\Doc\Manuals 5. Another product from SEGGER: J-Trace (it has full J-Link’s features) 6. https://www.segger.com/products/debug-probes/j-trace/ 7. http://www.keil.com/support/man/docs/jlink/jlink_conf_interface.htm 8. https://docplayer.net/87930309-Can-bus-bootloader-for-the-stm32f407vg-page-1.html Update March 4, 2020it’s possible to use ST-Link programmer to program via ST-Link Utility and use STMStudio with only 4 pins. Vcc, Gnd, SWD, SCK The main question now is it’s necessary for pull-up resistors? The SWD trace data line is only necessary if http://survivalengineer.blogspot.com/2013/01/turning-stm32-evaluation-board-into.html Stores my explanation or learning notes, can be developed to a complete post I. Encryption, hashThuật toán encode/decode dữ liệu. UID Base64 encoding/decoding EncryptionMã hóa thông tin, cần key và loại mã hóa, dùng để đảm bảo dữ liệu chỉ được trao đổi giữa bên truyền và bên nhận. DES: Data Encryption Standard AES Advanced Encryption Standard Hash/checksumMột ví dụ đơn giản khi nói về cái này đó là, Bạn muốn chia sẻ một file trên máy tính cho một người bạn qua mạng, tuy nhiên vì một lý do nào đó nên bạn buộc phải sử dụng Google Drive để lưu trữ file đó và chia sẻ qua đường link, và người khác muốn download phần mềm, trước khi chạy ứng dụng đó thì để đảm bảo rằng file được tải về đã không bị chỉnh sửa (có thể để chèn virus). Đưa file đó qua thuật toán, có thể là MD5, SHA-1, SHA-256, hay SHA-512, output của nó sẽ là một chuỗi bao gồm cả ký tự và số với độ dài xác định. Một số ứng dụng phổ biến của checksum/hash: đảm bảo data lưu trữ trên ổ đĩa nó không bị hư hỏng, Cách tính Checksum của một file trên Linux: Hàm một chiều: Input -> Hash Function -> Output. Và để tính các trường hợp Input mà cho ra cùng một loại Output (hàm ngược của Hash Function) trên là điều rất khó có thể thực hiện và tiêu tốn rất nhiều thời gian. CRC Nó được được coi là một hàm băm, và thường được sử dụng để kiểm tra tính vẹn toàn của dữ liệu trên một đường truyền nào đó, ưu điểm của nó là đơn giản, và chú ý là nó không bằng các hash function khác về tính bảo mật và hiệu quả. References: https://www.howtogeek.com/363735/what-is-a-checksum-and-why-should-you-care/ https://www.digistar.vn/su-khac-biet-giua-hashing-va-encryption/ https://anhhangxomonline.net/2009/08/26/hash-la-gi-va-co-tac-dung-gi/ III. Dùng digital multimeter Pro’skit MT 1706Live Wire Test:kiểm tra dây nóng/nguội của mạng điện. Chỉ cần cắm 1 đầu que đồ màu đỏ và thử từng dây, nếu là dây nóng ( Live Wire ) thì nó sẽ phát ra tiếng kêu. Khi dùng chức năng này cần để ý đến mức độ tiếng kêu của nó khi chạm vào dây Live. Nếu đúng là dây nóng thì nó sẽ kêu full vạch có hiển thị thêm led đỏ ( ngoài xanh ). Ví dụ đơn giản nhất là cắm điện vào, dò thử xem trên thiết bị có chỗ nào dòng bị rò hay không để mà biết sử dụng cho an toàn Non Contact Voltage:Kiểm tra có điện áp trong đường dây một cách không tiếp xúc, để ý thì sẽ thấy ở trên đầu có cái đầu như núm vặn NCV ( nhưng không vặn được ), bật qua chế độ NCV, đưa lại gần các loại dây thì nếu có điện áp trên 2 đầu dây đó nó sẽ phát ra tiếng kêu. 2 cái lõm nhỏ 2 bên ở mặt sau của DVOM này là nơi để đầu que đo, bạn có thể gắn cố định 1 đầu và cầm 1 đầu còn lại cắm vào chân đo. Đo dòng điện và điện áp chỉ cần chủ ý đến thang đo: đo ra số âm dương A, V Đo thông mạch và đo diode:quay đến kí hiệu đo 2 cái này, đọc datasheet nó sẽ chỉ rõ trong trường hợp thông mạch, điện trở ở mức nào thì nó sẽ kêu. Để chuyển qua mode đo diode, bấm nút SEL ( màu đỏ ), nếu khi đó đúng cực âm dương của diode nó sẽ hiển thị điện áp ~1.7V IV. Tự cấp nguồn cho USB Hub giá rẻBài hướng dẫn chi tiết và dễ hiểu: https://www.instructables.com/id/Adding-an-external-power-supply-to-a-cheap-USB-hub/ Khi mua cái USB Hub giá rẻ về mà không có kèm nguồn phụ, thì có thể cái Hub đó nó chỉ nhận được 2, 3 thiết bị để điều khiển. Đôi khi nó còn bị chập chờn ngắt tín hiệu, lý do là dòng tiêu thụ của 1 cổng USB trên máy tính thường giới hạn tối đa 2 thiết bị, cho nên khi ta cắm Hub vào nó sẽ phải chia sẻ băng thông và dòng cho tất cả các thiết bị USB cắm vào 1 cổng USB trên máy tính của bạn. Do đó, có thể tự thêm nguồn vào nó để nó có đủ dòng cung cấp cho nhiều thiết bị hơn. Link cái USB 7 cổng cùi của mình Chuẩn bị: + Adapter 220v -> 5V, dòng cấp cỡ >=2Ampere. Tùy thuộc vào nhu cầu sử dụng của bạn + Dây nối điện, mỏ hàn… Cách để mà làm sao nó gắn lại và chạy được là tùy mỗi cổng USB Hub. Nhưng ý tưởng chung là:
Đối với cổng USB trên máy tính: Hiện nay đa phần đều có cơ chế bảo vệ cổng USB nếu nó bị chập nguồn, tuy nhiên đối với các máy không bảo vệ thì có thể gây nên hư hỏng cổng USB trên máy của bạn đấy nhé. VI. HC-05 Bluetooth Test communication tutorialHow to implement Bluetooth communication into your project? First you need to ensure the communication work well to perform the next steps you want. I will guild you ….Bluetooth HC-05 module test using computer’s software Hercules.Note that the module’s pins you have may differs mine. STATE, RX, TX, GND, +5V, EN and a small button. Pinout: [su_table] HC-05 PL2303 RX TX TX RX GND,+5V GND,+5V [/su_table] and the two pins are left floating. ( Now we don’t use that ) + Connect the PL2303 to PC to power HC-05 module. Enter the Hercules. Configure Serial communication as following: ( connected ) + You should perform some AT commands for testing. Read all AT commands in datasheet. The small button must be pressed and hold to receive AT command (AT command mode ). If not its default is in the Data mode. Then I recommend the Android’s app: Bluetooth Terminal for serial communication. You can send whatever you like to make sure the module works perfectly. So depends on your needs to build your own Bluetooth application! VII. Advanced Control Theory ( for USV ) and …Advanced Control Theory. Don’t be stuck. Know when you got stuck and handle it. Basic Control Theory: PID controller. Control signal ( which is calculated and then output to the system ). >> +( Reference Model Control: Diophantine …. ) When designing a control system for real application, one inevitably meets problems such as: …. Therefore, We must consider “Self-Tuning Regulator”, STR is a system designed to resolve simultaneously 2 things:
A gyrocompass is a type of non-magnetic compass which is based on a fast-spinning disc and the rotation of the Earth (or another planetary body if used elsewhere in the universe) to find geographical direction automatically VIII. Module P3X GNSS Module boardModule GNSS receiver trong bài này lấy từ con Phantom 3 Professional. NEO-M8 Các hệ thống GNSS: GPS, Galileo, GLONASS, BeiDou. Và cả augmentation systems. Để đọc dữ liệu từ module GPS này, kết nối như sau: Để xác định pin 0 bạn nhìn hình sau: Do module sử dụng chuẩn giao tiếp UART, nên ta chỉ cần dùng 1 module UART to USB là PL2303 rồi cắm vào máy tính. Dùng phần mềm đọc cổng COM là được ( ở đây mình dùng Terminal ). Dữ liệu trả về trong trường hợp không nhận được tín hiệu từ vệ tinh. Đọc dữ liệu.Chúng ta sẽ đọc tọa độ hiện tại, và tốc độ. $GPRMC và $GPGSA được gọi là một loại NMEA sentence! Ví dụ: Để có thể hiểu rõ và tận dụng đầy đủ chức năng, cũng như cách để sử dụng module này thì ta cần đọc kỹ datasheet và xem các bài hướng dẫn trên mạng. $GNRMC,080813.00,A,1046.45364,N,10639.28801,E,0.022,,090318,,,A*62 080813.00: đọc là giờ UTC 08 giờ 08 phút 13 giây. Vì Việt Nam ở múi giờ UTC+7, nên giờ địa phương sẽ là: 15 giờ 08 phút 13 giây. 1046.45359,N: đọc là 10 độ 46.45359 phút vĩ Bắc 10639.28801,E: đọc là 106 độ 39.28801 phút kinh Đông Mỗi dữ liệu trả về bắt đầu bằng ký tự “$” và kết thúc bằng ký từ “*”. References: Main: https://www.u-blox.com/en/product/neo-m8-series NEO-M8-FW3_DataSheet_(UBX-15031086) u-blox M8 Receiver Description Including Protocol Specification Others: monocilindro.com/2016/03/28/reading-gps-data-using-arduino-and-a-u-blox-neo-6m-gps-receiver/ http://www.toptechboy.com/arduino/lesson-24-understanding-gps-nmea-sentences/ https://github.com/o-gs/dji-firmware-tools/wiki/P3X-GPS-Module-board https://www.semiconductorstore.com/blog/2015/What-is-the-Difference-Between-GNSS-and-GPS/1550 Phần mềm u-center. Note: để có thể nhận dữ liệu GNSS trả về module chính xác, module phải được đặt ngoài trời, nơi không gian thoáng và không có vật cản. Đợi khoảng 30-60s tín hiệu sẽ trả về ổn định. http://forum.sodaq.com/t/strange-output-from-gps-on-nb-iot-shield/1224/14 IX. My linux Terminal referencescan storage: $ df -h shutdown $sudo shutdown -h now download: $ wget https://abc.com/efg.zip scan available WiFi networks $ sudo iwlist wlan0 scan $ ls: list all contents command color meaning: $ ls -l: list and view permissions Blue: Directory Documents Green: Executable or recognized data file Sky Blue: Linked file Yellow with black background: Device Pink: Graphic image file Red: Archive file file.tar.gz … and a lot more Install packageshttp://www.familug.org/2013/09/cli-cac-lenh-quan-ly-package-tren.html After downloading a .tar.gr file to install something, extract that file , follow README inside to install. If you fail to install something, some packages, try different ways to install it by using Google! $ sudo apt-get install <package> $ sudo apt install vlc $ sudo apt-get remove <package> $ sudo apt-get –purge remove <programname> –purge: remove all configuration file of the program also $ sudo apt-get update $ sudo apt-get upgrade install via PPA / ppa: personal package archives $ sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder $ sudo apt-get update $ sudo apt-get install simplescreenrecorder \>Download, update, install install via PIP: you have to install pip … $ pip install beautifulsoup4 List all installed package in Ubuntu: lapt list –installed Application, install software:In the working directory: cd bcm2835-1.XX Run the configure exe ./configure Execute the makefile $make Then $ sudo make check Then $ sudo make install The library is now ready to use. https://robots.thoughtbot.com/the-magic-behind-configure-make-make-install Linux command for compress and extract file:.zip: first, install unzip $ unzip file.zip -d destination_folder .tar or .tar.gz $ tar -xvzf tenfile $ tar zxvf bcm2835-1.XX.tar.gz Read for more: http://www.familug.org/2012/09/nen-giai-nen-bang-command-line-trong.html useful links: X. Quá trình biên dịch, compiler and gccCompilerCompiler hay còn gọi là trình biên dịch có thể được hiểu là công việc dịch chuỗi câu lệnh được viết từ một ngôn ngữ lập trình thành chương trình tương đương dưới dạng ngôn ngữ máy tính, thường là ngôn ngữ ở cấp thấp hơn, ngôn ngữ máy. Đơn giản dễ hiểu thì có thể tạm nói là nhờ Complier này mà file .c chúng ta viết mới được dịch thành file .hex .bin để nạp được xuống một MCU bất kỳ. Chúng ta có thể xem sơ đồ chi tiết các bước từ Code/Build/Run ở hình sau Các quá trình sau: 1_Preprocessor (tiền xử lý): chương trình sẽ copy nội dung của các file được include vào file mã nguồn chính, thực hiện xử lý các lệnh macro như ifelse và chọn code tương ứng theo điều kiện, và thực hiện các thay thế các macro được define trong chương trình.Để buộc quá trình biên dịch dừng lại ở bước tiền xử lý, ta thêm option -E vào câu lệnh. 2_Biên dịch mã nguồn C/C++ thành mã Assembly tương ứng ISA của vi xử lý được chọn. Ta sẽ có file .s. Mỗi câu lệnh, đoạn mã nguồn trong C đều sẽ được chuyển sang mã Assembly. Để buộc quá trình biên dịch dừng lại ở bước này, ta thêm option -S vào câu lệnh. 3_Biên dịch thành các object code file. Để buộc quá trình biên dịch dừng lại ở bước này, ta thêm option -c vào câu lệnh. 4_Linking Kết hợp giữa các object file mã nguồn từ code của người dùng viết lên, đồng thời nó cũng sẽ tìm trong các đường dẫn được cài đặt để tìm các thư viện cần thiết (library object files). Kết hợp với linker script để tạo ra một file binary/hex hoàn chỉnh mà vi xử lý có thể chạy được. GCC là gìGCC = GNU Compiler Collection là một tập hợp trình biên dịch cho nhiều ngôn ngữ khác nhau, như tên của nó đã chỉ ra ý nghĩa này. Một sản phẩm của GNU Project GCC là trình dịch chính thức của hệ thống GNU, và được hầu hết các hệ điều hành giống Unix, bao gồm Linux, dòng hệ điều hành BSD, và Mac OS X chọn làm trình dịch tiêu chuẩn. GCC đã tương thích với rất nhiều nền tảng kiến trúc máy tính đa dạng, và được sử dụng rộng rãi như một công cụ làm môi trường phát triển các phần mềm thương mại, có bản quyền và nguồn đóng. GCC cũng có thể dùng trong hầu hết các nền tảng nhúng GCC là một cross-compiler, dùng để tạo file thực thi trên một platform khác. Bộ GNU C và C compiler tương ứng là gcc và g. GNU nhân vật quan trọng: Richard Stallman, Linus Tovalds Trang web: http://gcc.gnu.org/ Trình biên dịch thì sẽ thực hiện dịch sang ngôn ngữ máy, và tạo ra một file có thể thực hiện được.
gcc -o hello hello.c Lúc này gcc đã biên dịch ra một file excutable tên là hello. Để chạy : ./hello Có một vấn đề, đó là nếu như bạn có một project, có nhiều file liên kết lại với nhau để có thể build 1 chương trình cuối cùng để thực thi. Thì làm thế nào để có thể cho gcc hiểu để biên dịch thành công file excutable cuối cùng. Xin giới thiệu make file Tại sao phải học về Compiler, GCC và Makefile làm gì, Khi đã có IDE chỉ cần setting và chạy là xong? OK nếu bạn không cần dùng, không có lý do lại đi học nó cả, có thể dành một chút thời gian nhỏ để đọc qua để biết nó tồn tại, mở rộng kiến thức. [su_table] [/su_table] References. https://en.wikipedia.org/wiki/GNU_Compiler_Collection https://vi.wikipedia.org/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU http://icviet.vn/gcc-compiler/ hocarm.org/tim-hieu-compiler/ vi-du-voi-gcc-compilerhttp://faculty.cs.niu.edu/~mcmahon/CS241/Notes/compile.html https://www.freelancer.com/community/articles/how-c-works-understanding-compilation XII. Biên dịch tự động với waf buildVới một project source code lớn thì việc quản lý các file trong dự án và quản lý để nó biên dịch, sắp xếp tài liệu, cập nhật các tool mà project cần, theo ý muốn quả thực không phải là một công việc dễ dàng. Việc đưa ra giải pháp cho build source code tự động này cần có một giải pháp. Hiện nay có rất nhiều phần mềm hỗ trọ cho việc build tự động này. Ví dụ như make, cmake, SCons, MSBuild. Với Waf, quá trình build sẽ được chia ra thành quá trình riêng biệt: Configure ( cấu hình ), và build. Khi đó việc cấu hình chỉ diễn ra một lần duy nhất. Waf được viết bằng Python, không như các phần mềm tự động build khác như: cmake cần phải cài đặt như một phần mềm. Chúng ta chỉ cần download vào trong thư mục cần sử dụng waf, sau đó viết ra file để chạy. Biên dịch và link của một chương trình C đơn giản.Ta sẽ tạo 3 file có tên là main.c, data.c và show.c. Hai hàm data() và show() nằm trong 2 file có tên tương ứng. Và hàm main() tại main.c sẽ gọi 2 hàm này. Nội dung của data.c chứa hàm data( ). include <stdio.h>void data( ) { printf(“nLet us learn about Wafn”); } Nội dung của show.c chứa hàm show( ). include <stdio.h>void show( ) { printf(“nWaf is a build automation tooln”); } Chúng ta có thể biên dịch và link cả 3 file này cùng một lúc bằng dòng lệnh dưới đây. Kết quả cho ra một file thực thi hello $gcc main.c data.c show.c –o hello Vấn đề ở đây là nếu dùng dòng lệnh trên, thì các 3 file C trên đều được biên dịch cho dù chúng cho bị thay đổi nội dung hay không. Vì vậy thông thường chúng ta sẽ biên dịch từng file và link lại như bên dưới $gcc –c main.c $gcc –c data.c $gcc –c show.c $gcc main.o data.o fun.o –o hello Một ví dụ tạo Waf script đơn giảnTạo một file tên wscript đặt trong thư mục có chứa waf. Với nội dung của wscript như sau: top = ‘.’ out = ‘.’ def options(opt): opt.load(‘compiler_c’) def configure(conf): conf.load(‘compiler_c’) def build(bld): bld.program(source=’main.c’, target=’hello’, use=’data show’) bld.objects(source=’data.c’, target=’data’) bld.objects(source=’show.c’, target=’show’) def test(tst):
Sau đó tại thư mục này chúng ta chạy 2 lệnh sau trên Terminal:$./waf configure $./waf Kết quả Đối với một chương trình lớn, chúng ta rất khó để có thể biên dịch từng file và link lại như ví dụ ở trên. Cho nên các hệ thống build tự động được ra đời. Configure được dùng để cấu hình các đường dẫn, và những yêu cầu cần thiết cho việc build hoàn thành. Và các tham số được dùng cho các lệnh kế tiếp. opt.load(‘compiler_c’) được waf dùng để nó tìm trình biên dịch ngôn ngữ C có trong hệ thống, nó có thể là: gcc, hoặc là LLVM,… Tương tự để tìm trình biên dịch cho ngôn ngữ C++ thì lệnh tương ứng sẽ là opt.load(‘compiler_cxx’) Build Sau khi chạy lệnh $./waf configure. Để thực hiện build ta sẽ dùng $./waf hoặc $./waf build. Khi đó waf sẽ thực hiện các lệnh trong hàm build(bld) của wscript. Một project có thể chứa nhiều file wscript trong mỗi các thư mục con của nó. opensourceforu.com/2017/02/waf-excellent-build-automation-tool/ Sau khi build xong. Nếu ta không cung cấp cho wscript dòng lệnh out=’./a_dir’ để chứa tất cả kết quả build thì Waf sẽ tự động tạo một thư mục có tên build để lưu trữ kết quả build. Waf hoạt động theo nguyên tắc: “chỉ biên dịch khi có sự thay đổi” . Tuy nhiên chúng ta có thể buộc chúng thực hiện lại tất cả quá trình bằng dòng lệnh.
Một số hàm thông dụng trong Waf build system bld.env.PYTHONPATH=os.getcwd() : set biến môi trường PYTHONPATH. bld.recurse(‘src’) : nó sẽ vào thư mục con tên src. Tìm file có tên wscript và thực thi hàm build được định nghĩa ở đó. XIII. Using J Link to flash/read program to STM32In this tutorial: I use a J-Link v9 and a STM32F407 Discovery Kit. Note that on STM32F407 Discovery Kit, an on board ST-LINK is already integrated so:
Interface wiring: connect the target chip using J-Link by one of two interfaces below For example to connect STM32F4 with the debugger by SWD interface, the wiring is as the following: JLink <-> STM32
2. SWDIO <-> PA13 3. SWCLK <-> PA14 4. Power line Thông tin về mạch program/debug J Link: XIV. Simmechanics trong MatlabLà một tool rất hữu ích trong việc mô phỏng các robot. Liên kết mô hình được vẽ Simulink qua Matlab, để có thể kết hợp với toolbox dùng cho mô phỏng và điều khiển của matlab. Link chính: https://www.mathworks.com/help/physmod/smlink/ug/installing-and-linking-simmechanics-link-software.html Đăng nhập vào trang web: https://www.mathworks.com/products/simmechanics/download_smlink.html Nhập thông tin của mình để matlab biết người dùng, không yêu cầu gì thêm. Sau đó bạn sẽ được chuyển hướng tới trang download. Chọn bản cần download tương ứng với phiên bản matlab đang dùng. Down cả 2 file cho option đã chọn.
Vào solidworks, bật add-in Simmechanics mới thêm vào Đó là SimMechanics Link Sau khi hoàn tất cài đặt. Ta tiến hành đưa 1 project từ Solidworks qua bên Matlab Simulink để mô phỏng. Bước 1: Xuất file từ Solidworks ra một file mà matlab có thể hiểu. Vào Project cần xuất, bấm tool -> SimMechanics Link -> Export -> SimMechanics First Generation. Đợi 1 chút để nó xuất ra file. Bước 2: Chọn thư mục làm việc của matlab là thư mục vừa xuất file từ bên Solidworks ra. Trên command prompt, gõ và enter mech_import, trở tới file xml và nhấn Open -> OK cho nó build lên model Cần chú ý với một số người mới làm lần đầu, thì việc tốt nhất đó là lên mạng đọc + xem videos Youtube cách người ta làm, hiểu rõ nếu không sẽ mắc rất nhiều sai lầm. Như việc đặt hệ trục tọa độ, cài đặt thông số,… XV. Tụ điện vuiKhi bạn dùng multimeter để đo điện áp đã được nạp lên tụ, ta có thể thấy rằng điện áp dần dần tụt xuống rất chậm. ( 47uF – 5V nó tụt cỡ 0.01V/second ), chứng tỏ một phần hoạt động của multimeter để đo nó sẽ tiêu tốn một phần năng lượng rất nhỏ. Tính toán năng lượng tích trữ trên tụ: E=1/2*CU^2. quan hệ giữa dòng điện và điện áp trên tụ: i=C*du/dt. -> u. Một ví dụ về ultracapacitor: C=650F. Nếu ta nạp điện cho đến khi điện áp trên tụ lên đến 10V. Thì năng lượng tích trữ trên nó là: E=32.5 kJ. Tính toán thời gian để nạp tụ điện lên một điện áp Vo nhất định. Điện áp này là điện áp cấp vào 2 đầu tụ để nạp I/C=du/dt nhờ công thức này ta có thể tính ra tỷ số k=du/dt với đơn vị Volt/sec. ( cần đo dòng điện mà ta cấp để nạp cho tụ ) Lấy Vo/k ta sẽ ra thời gian để nạp điện áp trên tụ lên Vo volt Sự khác biệt giữa tụ điện và pin là gì nếu như chúng nó đều dự trữ năng lượng và giải phóng năng lương? sử dụng càng nhiều thì năng lượng dần mất đi và giảm xuống?? Xét về các cách mắc của tụ điện -> điện dung và điện áp định mức tương ứng thay đổi ntn Video tham khảo: Khi làm việc với các dòng vi điều khiển ARM, thông thường chúng ta sẽ sử dụng IDE và làm theo các hướng dẫn trên mạng và chỉ cần cấu hình một số tùy chọn đơn giản là có thể phát triển ứng dụng cho target chip. Tuy nhiên, để có cái nhìn rộng và sâu hơn về hệ thống thì ta sẽ cần phải hiểu các công cụ và thành phần của quá trình biên dịch, nó giúp ích rất nhiều cho việc tùy biến theo ý thích của bản thân, hiểu được source code các project lớn (như FreeRTOS), và debug chương trình. Ở bài viết này sẽ chỉ dừng lại ở mức độ cơ bản về khái niệm các công cụ. Cho nên việc đi sâu vào từng công cụ, cách lập trình thì trên mạng đã có khá nhiều bài viết (nên sử dụng tiếng Anh để tra cứu và học) các bạn tự tìm hiểu nhé. Mình có để một số link hữu ích ở cuối bài viết. [GNU toolchain]GNU toolchains bao gồm các công cụ (programs) như: GCC, GNU Make, Linker, GDB, Assembler … Chúng ta sẽ sử dụng các công cụ này để làm việc với các file mã nguồn, với mục đích cuối cùng là từ các file mã nguồn sinh ra file .hex (hoặc .bin cũng được) để nạp vào vi điều khiển hoặc là debug chương trình. Điểm mạnh nhất mà người dùng nhân được khi sử dụng GNU toolchain để phát triển ứng dụng đó là nó miễn phí, do đó tiết kiệm khoản chi phí đáng kể cho dự án. Hơn nữa là nó đều có thể được sử dụng trên 3 hệ điều hành phổ biến hiện nay (ví dụ bất tiện là nếu bạn quen dùng Keil IDE, nhưng trên Linux OSes thì hiện tại không có Keil C nha) [Compiler]Nhiệm vụ của chương trình biên dịch đó là chuyển mã nguồn từ ngôn ngữ bậc cao hơn sang chương trình tương đương ở ngôn ngữ cấp thấp hơn ( assembly code). Trong thực tế, khi chúng ta compile bằng chương trình gcc thì nó sẽ chuyển từ source code -> assembly source code -> object file luôn. Và nếu muốn xem mã assembly của source code thì người ta sẽ dùng chương trình objdump (disassembler) Đối với mỗi kiến trúc vi điều khiển khác nhau thì có một trình biên dịch khác nhau (vì kiến trúc tập lệnh của chúng khác nhau). Thí dụ như nếu dùng GCC thì ta sẽ lựa chọn target bằng cách thêm option $-mcpu=cortex-m4 trong chương trình gcc. Khi làm việc với dòng chip STM32Fxx (Cortex M), thì có các trình biên dịch phổ biến nhất, đó là: ARM compiler (được sử dụng trong Keil IDE), IAR compiler và GNU compiler. Có một video rất hay giải thích về cách người ta sẽ lập trình để chuyển mã C sang mã Assembly như thế nào, bạn nào muốn tìm hiểu kỹ hơn thì vào xem nhé: Youtube – How do computers read code? https://www.youtube.com/watch?v=QXjU9qTsYCc [Assembler]Assembler có nhiệm vụ chuyển mã assembly sang các object file (mã máy dạng nhị phân). Nếu bạn đã từng học lập trình LC3 ISA, hay kiến trúc khác thì đều biết rằng mã Assembly có thể chuyển đổi ngay sang mã nhị phân bằng cách tra Instruction Set, Assembler sẽ làm điều này một cách tự động cho chúng ta. [Make và Makefile]Make là một chương trình máy tính được viết bằng ngôn ngữ C, nó sẽ đọc các file Makefiles và thực thi các rules trong đó. Makefile quy định các rules, với mục đích biên dịch tự động cho project. Tuy rằng hiện nay có một số công cụ khác cho build automation như CMake, waf,… Phần lớn mọi người vẫn sử dụng Makefile từ dự án nhỏ cho đến dự án lớn. Ví dụ các dự án dùng Makefile như: betaflight, valgrind, github.com/PX4/Flow,… Một rule được viết trong Makefile có định dạng như sau: <target> … : <prerequisites> … <recipe> … … <target>: là tên của file mong muốn được tạo ra từ một lệnh nào đó, nó cũng có thể là lệnh của action cần được thực thi (như clean, hoặc flash). <prerequisite>: là các files, hoặc action cần có để có thể thực hiện các lệnh được viết ở <recipe>, make sẽ kiểm tra các <prerequisite> trước khi thực hiện các lệnh được viết ở <recipe>, nếu không có thì nó sẽ tìm và thực thi các rule để đạt được prerequisite (nếu có). <recipe>: các lệnh được thực hiện, (thông thường sẽ chạy trên shell như bash). Đối với nhiều người mới học, khi nhìn vào Makefile thường sẽ cảm thấy rất rối và dễ bỏ cuộc, thực ra việc học Makefile không quá khó, bạn chỉ cần nhớ được công thức trên, và cần tìm hiểu thêm một số thứ sau: + Hiểu phony target là gì + Một số kiến thức lập trình cơ bản (về biến) + Cách include Makefiles + Biết các lệnh chương trình trên shell Nếu có phức tạp thì có lẽ là do Makefiles có nhiều code bởi vì hệ thống lớn (nhiều source code fjles) và cần tương thích nhiều target khác nhau, do đó hơi khó để bao quát và kiểm soát khi chỉ nhìn qua vài lần! [Link và Linker Script]Sau khi compiler đã biên dịch được tất cả các file mã nguồn, tại bước cuối ta cần có file `stm32_flash.ld` (đuôi là .ld), là linker script tương ứng với MCU STM32F407xx. Tại bước link các file object lại với nhau, Linker sẽ dùng file này để đặt các dữ liệu phù hợp vào trong bộ nhớ Flash của MCU để cho ra file .hex nạp được vào vi điều khiển. Ví dụ như trong chương trình chính, ta có sử dụng một biến global (toàn cục) với giá trị khởi tạo khác 0, thì trong Flash sẽ có vùng nhớ để lưu các biến này, vì khi MCU được cấp nguồn thì chương trình trong file startup.s sẽ có nhiệm vụ là khởi tạo biến này trên vùng nhớ RAM và gán giá trị ban đầu cho biến đó, để sử dụng trong chương trình. Để biết thêm về Linker script thì bạn cần hiểu về memory map của chương trình, đọc các linker script và hiểu ý nghĩa các memory sections. + Bạn có thể kiếm linker script cho MCU của mình bằng cách lên github và gõ keyword phù hợp. + Và trong blog này cũng đã có một bài nói về Linker Script, bạn đọc thử tham khảo nhé! [GNU Debugger (aka GDB)]GDB được bắt đầu viết bởi Richard Stallman vào năm 1986 như là một phần của GNU system, hiện nay được duy trì và phát triển với GDB Steering Committee. Ta sử dụng trình debug để có thể thực thi các lệnh từng dòng code, đặt breakpoints, theo dõi các thanh ghi, biến,… của chương trình. Tuy nhiên, nhược điểm đó là GDB chỉ hỗ trợ làm việc trên command-line interface, và nó không biết cách để giao tiếp với MCU, OpenOCD sẽ là thành phần hỗ trợ làm những việc này. [OpenOCD (Open On-chip Debugger)]OpenOCD là một phần mềm máy tính, có mục đích là cung cấp các tính năng như: debugging, in-system programming, và boundary-scan testing cho các thiết bị nhúng. Như chúng ta đã biết hardware như ST-Link hoặc J-Link dùng giao tiếp SWO hoặc JTAG để giao tiếp với target chip. Qua đó cho phép chúng ta nạp code, xóa, thay đổi bộ nhớ Flash thông qua phần mềm như ST-Link Utility. ST-Link, J-Link được gọi là Debug Adapter OpenOCD nó sẽ làm việc với vi điều khiển gián tiếp qua Debug Adapter, và giao tiếp với Debug Adapter thông qua chuẩn USB. Như hình trên minh họa các thành phần của hệ thống, OpenOCD sẽ tạo GBD server để IDE như Eclipse – là GBD client có thể nạp code vào chip ngay trên các nút trên thanh công cụ, và debug ngay trên Eclipse GUI. [References]hocarm.org/tim-hieu-compiler/ hocarm.org/makefile-la-gi/ b4050n.wordpress.com/2016/12/24/stm8s-3-gpio-va-bien-dich-voi-make/ embedds.com/programming-stm32-discovery-using-gnu-tools-linker-script/ stackoverflow.com/questions/41365110/why-need-linker-script-and-startup-code hertaville.com/a-sample-linker-script.html thunderbench-Linker-Script-guide.pdf https://github.com/ntfreak/openocd Goals of this projectLearn typical code structure of professional level project Build ardupilot with minimal files and folders (for Arducopter). Learn build management: build tools, GNU toolchain commands, and build options,… Static and dynamic library in C/C++, archive library (.a extension) A lot of tools are added into the repository for more features, if you just want to study the code they can be removed, just keep all the necessary things for building the completed .hex file. Some philosophies to keep in mindUnderstand that Ardupilot abstracts a lot of steps, the higher the abstraction is, the more easy for users to use. Most of the scripts are: shell scripts and python scripts. The build system can be written in Makefile, but a lot more complex, and more code, so Ardupilot uses waf build system. Hardware schematicshttps://github.com/proficnc/ProfiCNC_Hardware https://github.com/proficnc?tab=repositories https://github.com/ArduPilot/Schematics — 13 May 2019 Ardupilot is large, and it’s written by experienced developers from all over the world. It takes time and effort for understanding the whole system. You may want to start off learning Ardupilot by modifying the code, add a new flight mode or enable/disable a feature, or maybe running the example sketches. Consult other programmers. — 15 May 2019 Good way to learn how to make changes to Ardupilot codebase is studying how did others do it. We can compare the code by using compare tools. Implement new sensors. Schedule a new task. Run example sketches. Run and study old ardupilot code, and compare them. — 16 May 2019 Now, you must have a new way to see the code. What Ardupilot wants to achieve when doing so, is that you always see that the board is all set up, everything such as sensors checking and initialization, object initialization and are all done (you should take them for granted) to you point of view if. Try imagine that you power up the computer, close your eyes and open when the computer as the time you open your eyes again. This part of Ardupilot is just like that. example sketches code, what you do there is just like you doing something with your computer when the computer has done booting, and in operating system GUI ready for you to use. 16 May 2019 Now you should go for sensor drivers code, hardware code, to see how Ardupilot abstracts this layer! 21 May 2019 Để hiểu hơn về cách mà Ardupilot được port lên board Raspberry/BBB, tạm thời không quan tâm đến waf, ta cần hiểu được cách nào mà nó có thể giao tiếp với các ngoại vi, cảm biến (PWM, uBlox GPS, MS5611, AHRS algorithm) được! NAVIO shield for Ardupilot có code sẵn trên mạng để ví dụ giao tiếp với các module cho máy bay viết bằng ngôn ngữ C++, cần đọc nó! Cũng như biết được nó sẽ dùng hàm nào cho việc delay, POSIX, multi threading …., giao tiếp thông qua /dev/…., networking!! Các thư viện sử dụng trong code! ChibiOS KHÔNG dùng với các board Linux 24 May 2019 Càng đọc càng hiểu hơn về hệ thống Ardupilot, thứ nhất cơ chế nó gọi các hàm, setup() và loop(), để mình có thể áp dụng theo cách riêng của mình vào code C cũng ok. loop() sẽ chạy trong vòng lặp vô hạn như while() của chương trình C bình thường. Ở đầu chương trình loop là đợi lấy mẫu dữ liệu INS lần tiếp theo (ta không nhất thiết đợi hết tất cả các cảm biến có dữ liệu mới), mà chỉ cần đợi những dữ liệu cảm biến mà sẽ cho chúng ta thông tin để tính toán IMU cho cân bằng quadcopter. I.e `AP::ins().wait_for_sample();` function while(1) { collect_sensor_data(); main_loop(); // calculate AHRS, PID, update motor scheduler_tasks(); } — Ủa hình như nó hoạt động kiểu như một vòng lặp mà, cái Ardupilot ấy, rõ ràng cái thread backend nó chạy đầu ở vòng loop main, tại sao nó lại nói là multi threads??? Khó hiểu đoạn này, xem lại phần code `void AP_InertialSensor::wait_for_sample(void)` để hiểu mình đang nói cái gì. Khi đã hiểu rồi có thể port và tự làm lại một autopilot dựa trên kiến trúc của Ardupilot, không ngờ nó lại đơn giản vậy, cái quan trọng là port code C++ qua C, ví dụ port bộ tính toán AHRS, INS từ cảm biến. Cách nó filter data, implement algorithm! Có thể áp dụng thêm FreeRTOS, các chức năng của RTOS + Ardupilot system architecture. Open source project for embedded engineers?? Ví dụ như GUI để đọc dữ liệu cảm biến 23 June 2019 *Reading Ardupilot fast_loop(). The calling structure is kind of weird, because it’s not similar to my old quadcopter code. You can see that here: My first guess is that: actually, in some case you can call them in any orders and it makes almost no difference in performance, but when you look at this line again, check it again.Why is Ardupilot codebase so large? Because it’s necessary for a big project as Ardupilot to be large! And it’s also the case for any popular open source projects, as well as in company-level projects. Minimal Ardupilot code only for building CubeBlack board option.$./waf configure –board CubeBlack $./waf copter General folders Remove folders: AntennaTracker, APMrover2, ArduPlane, ArduSub, docs mk folder test folder Files: deleted: BUILD.md deleted: COPYING.txt deleted: Dockerfile deleted: Doxyfile.in deleted: Makefile deleted: README.md deleted: Vagrantfile deleted: appveyor.yml deleted: reformat.sh deleted: uncrustify_cpp.cfg deleted: uncrustify_headers.cfg Ardupilot/Tools Tools/environment_install, Pozyx, Replay, LogAnalyzer, GIT_Test, CodeStyle After build all source files: File “/mnt/c/Users/Admin/Desktop/ardupilot_minimal/ardupilot/modules/waf/waflib/Task.py”, line 338, in process ret = self.run() File “Tools/ardupilotwaf/chibios.py”, line 76, in run env.APJ_TOOL = srcpath(‘Tools/scripts/apj_tool.py’) so you can’t delete some folders in Tools directory. Ardupilot/modules can be deleted: gbenchmark, gtest You can’t delete other directories in modules folder, because waf will check them before building. Ardupilot/libraries This is the most interesting part to clean up Ardupilot project, as the Ardupilot’s waf build system will use build option for deciding what files to be compiled. Some files in this folder can be removed if we only want to build with CubeBlack target. Cleaning up this folder can be easily messed up, because some necessary folders won’t listed in compiled files terminal, but they can’t be removed (such as AP_HAL, AP_HAL_Empty). Or it will put error message in the terminal when you execute build command. $ap_library: AP_HAL not found Folders can be removed: AP_HAL_SITL APM_Control AP_HAL_Linux AP_Navigation AP_Soaring AP_TECS AP_TemperatureSensor AP_SpdHgtControl 10 August 2019Embedded computers running Ardupilot: _https://github.com/mirkix/BBBMINI _Navio and Navio2 project Với sự phát triển không ngừng trong ngành công nghiệp máy tính, hệ thống nhúng, máy tính cá nhân (PC) và laptop hiện nay đã lược bỏ đi nhiều các chuẩn kết nối cũ, ví dụ như là: PS/2, DE-9, rãnh cắm ISA… Thay vào đó là các chuẩn kết nối hiện đại như: USB, HDMI, RJ-45,… Bo mạch chủ máy tính Trong bài này chỉ giới thiệu ngắn gọn các chuẩn giao tiếp trên máy tính để người đọc có cái nhìn bao quát về các chuẩn kết nối mà chúng ta thường gặp hàng ngày. HDMIHDMI (High-Definition Multimedia Interface) nghĩa là giao diện đa phương tiện có độ phân giải cao. HDMI là giao diện kỹ thuật số để kết nối các thiết bị có độ nét cao và siêu nét như màn hình máy tính, HDTV, đầu đĩa Blu-Ray, các thiết bị chơi game hay máy ảnh độ nét cao, v.v. Cổng HDMI Đầu cáp HDMI được cấu tạo bao gồm 19 chân, mỗi chân đảm nhiệm một nhiệm vụ khác nhau và trong quá trình truyền dữ liệu thì sẽ phải tuân thủ theo nguyên tắc nhất định. Cáp HDMI thường được hỗ trợ chất lượng âm thanh chuẩn của phòng thu, nên người dùng hoàn toàn yên tâm khi sử dụng nó để chuyển sang một thiết bị khác. Phiên bản HDMI mới nhất, tức là HDMI 2.0 có thể mang tín hiệu video kỹ thuật số có độ phân giải lên đến 4096 × 2160 và 32 kênh âm thanh. Ngoài ra, HDMI có thể được sử dụng để truyền tải tín hiệu video không nén và tín hiệu âm thanh cả nén hoặc không nén. Cổng HDMI loại A được minh họa ở hình bên dưới. Cổng VGACùng chức năng như cổng HDMI, chúng ta sử dụng cổng VGA hoặc cổng HDMI để kết nối laptop với các thiết bị có khả năng trình chiếu (như máy chiếu, màn hình,…) Analog VGA port to connect the monitor to the graphics card closeupVGA (Video Graphics Array) là một chuẩn hiển thị được giới thiệu năm 1987 từ hãng IBM cùng loại máy tính PS/2. Nó dùng để hỗ trợ việc kết nối từ laptop tới các thiết bị trình chiếu (máy chiếu, màn hình ngoài…) thông qua dây cáp. Dây cáp VGA có 15 chân kết nối, hỗ trợ nhiều chuẩn độ phân giải 640x400px, 1280x1024px, hiện nay có thể lên đến 1920×1080 px (FullHD), 2048x1536px. RJ-45Như chúng ta đều biết, Ethernet là một công nghệ mạng được sử dụng để kết nối máy tính của bạn với Internet và giao tiếp với các máy tính hoặc thiết bị mạng khác. Giao diện kết nối được sử dụng cho mạng máy tính và trong viễn thông được gọi là Registered Jack (RJ) và cổng RJ-45 nói riêng được sử dụng cho Ethernet thông qua cáp. Đầu nối RJ-45 là đầu nối kiểu mô-đun 8 chân 8 (8P – 8C). Công nghệ Ethernet mới nhất được gọi là Gigabit Ethernet và hỗ trợ tốc độ truyền dữ liệu trên 10Gigabits mỗi giây. Ethernet hoặc cổng LAN có đầu nối loại 8P – 8C cùng với cáp RJ-45 male được hiển thị ở hình ảnh bên dưới. Đầu nối mô-đun 8P – 8C không có khóa thường được gọi là Ethernet RJ-45. Thông thường, các cổng RJ-45 được trang bị hai đèn LED thông báo phát hiện truyền dữ liệu và gói lưu lượng. Như đã đề cập trước đó, một cổng Ethernet RJ-45 có 8 chân kết nối và hình dưới đây mô tả sơ đồ kết nối trong một cổng RJ-45. e-SATAe-SATA là một đầu nối Serial AT Attachment gắn rời, được sử dụng như một giao diện để kết nối các thiết bị lưu trữ khối (mass storage devices). Kết nối e-SATA hiện đại được gọi là e-SATAp và là viết tắt của cổng Power e-SATA. Chúng là các cổng lai có khả năng hỗ trợ cả e-SATA và USB. Cả tổ chức SATA và tổ chức USB đều không chính thức phê duyệt cổng e-SATAp và người dùng sẽ phải sử dụng bất chấp những rủi ro. Hình ảnh trên là một cổng e-SATAp. Nó cho thấy rằng cả hai thiết bị e-SATA và USB đều có thể kết nối được. Được sử dụng để kết nối các ổ đĩa có dung lượng lớn như HDD hay SSD. Cần chú ý khi mua ổ đĩa cứng ở trên thị trường bởi vì nếu không tìm hiểu kỹ trước thì có thể mua về mà không sử dụng được. Cổng USBUSB (Universal Serial Bus) là một chuẩn kết nối có dây trong máy tính. USB sử dụng với mục đích là để kết nối các thiết bị như điện thoại, máy tính bảng, máy chụp ảnh, máy quay phim, máy nghe nhạc với máy tính. Cho đến thời điểm hiện nay thì USB có 2 loại chính đó là cổng USB 2.0 và cổng USB 3.0, đại khái đây là 2 phiên bản công nghệ trước và sau thôi. Về lí thuyết thì tốc độ ghi chép dữ liệu của USB 2.0 là 60 MB/s, còn USB 3.0 là 600 – 625 MB/s. Nhìn thông số trên thì có thề thấy tốc độ trên lệch nhau gấp 10 lần, nhưng trong thực tế khi sử dụng thì con số này khiêm tốn hơn, có nghĩa là chỉ nhanh hơn khoảng 3 lần thôi. Ví dụ thực tế khi chép một file video thì tốc độ truyền cùa USB 2.0 thường là 19 – 20 MB/s, còn tốc độ của USB 3.0 thường là 59 – 60 MB/s (còn phụ thuộc vào độ tương thích giữa các thiết bị kết nối). Khe cắm RAMRAM (Random Access Memory) là bộ nhớ truy xuất ngẫu nhiên. RAM là nơi mà hệ điều hành, chương trình ứng dụng lưu trữ dữ liệu tạm thời để CPU có thể nhanh chóng truy xuất để hệ điều hành/ứng dụng chạy nhanh và mượt. Khe cắm RAM trên bo mạch chủ máy tính PCCác thông số phổ biến khi sử dụng RAM máy tính là: dung lượng RAM, sự tương thích, và đời RAM sử dụng. Một số đời RAM phổ biến trên thị thường là: DDR 1, DDR 2, DDR 3 và DDR 4. Trong đó RAM DDR 4 thì tuy là rất mạnh mẽ và là đời mới nhất. Thanh RAM DDR3 của Kingston Đối với RAM trên máy tính bạn có thể tự nâng cấp, thay thế khi nó bị hỏng một cách dễ dàng nhờ các hướng dẫn trên mạng. Cổng PCIePCIe (Peripheral Component Interconnect Express) là một chuẩn giao tiếp dùng cho kết nối giữa các thiết bị bên trong máy tính, được ra đời vào năm 2004, version chuẩn lúc đó của PCI Express (PCIe) là 1.1. PCIe là một cổng giao tiếp nhanh hơn nhiều so với các chuẩn cổng giao tiếp đời cũ trước nó như là PCI, PCI-X và AGP. Nó được dùng kết nối với các card mở rộng và card đồ họa (GPU card). PCIe ra đời để đáp ứng yêu cầu tốc độ truyền dữ liệu ngày một tăng trong khi đó cách đây không lâu, PCI còn là chuẩn tốt nhất để máy tính giao tiếp với các card mở rộng như sound, modem,… qua các khe cắm trên mainboard. Nhờ ưu điểm vượt trội về tốc độ, tính năng của PCIe, hiện nay có nhiều hãng đã sản xuất các card thiết bị khác với kết nối PCIe như ethernet PCIe card, SSD card, USB card,… Nên PCIe hầu như hỗ trợ tất cả kết nối hiện nay trên máy tính, do đó đã có một số motherboard được sản xuất với chỉ các khe cắm PCIe. PCIe ethernet card Kết bàiTất nhiên là không một bài viết nào có thể giới thiệu được hết cho bạn các chuẩn kết nối được, vì còn rất rất nhiều loại cổng và chuẩn kết nối đang tồn tại hiện nay ví dụ như cổng đa năng lightning của Apple, hay cổng là DisplayPort cho việc hiển thị màn hình. Do vậy, tốt nhất là các bạn nên dần dần tìm hiểu từng cái, khi nào gặp sử dụng rồi biết là ok rồi, mục đích trước mặt là tận dụng đến sức mạnh mà hệ thống của bạn có thể đáp ứng. Ví dụ như cổng USB 3.0 có tốc độ truyền rất cao thì nên dùng nó cho việc copy dữ liệu, hoặc là cổng USB Type-C trên Macbook có thể vừa dùng để làm cổng sạc pin, vừa làm cổng trung gian cho tất cả giao tiếp (USB, HDMI, Audio 3.5mm, …) ở trên Macbook. Không đến mức ôm trọm gói như thợ sửa máy tính, hoặc là kỹ sư thiết kế ra CPU. Nói thật ra là mấy người kỹ sư design chip phải đọc tài liệu và hiểu mấy các chuẩn này kỹ thì mới có thể hoàn thành được công việc của mình, hoặc là kỹ sư embedded Linux cũng phải hiểu để còn lập trình device driver. |