1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

Tutorial Hỗ trợ các bạn làm Án Về Lập Trình Nhúng Board KM9260

Thảo luận trong 'Khoa học máy tính' bắt đầu bởi thanhmai, 14 Tháng chín 2011.

  1. thanhmai Member

    Số bài viết: 606
    Đã được thích: 5
    Điểm thành tích: 18
    //-----------------------------------------------------------------------------------------------------------
    - Mục đích mình lập topic này là nhằm hỗ trợ các bạn sinh viên khóa sau muốn tìm hiểu về lập trình nhúng và Kits nhúng
    - thực tế thì có rất nhiều bạn mail cho mình và hỏi tài liệu,... nhiều thứ nhưng do mình bận quá không có thời gian nên có thể là không trả lời được
    - vậy nay mình lập topic này để có thể hỗ trợ các bạn về các vấn đề về nhúng + về kits ARM KM9260 + kits ARM mini 2440 và các kits khác nữa
    - Nguồn tài liệu post lên đây được mình sưu tầm nhiều diễn đàn + tự viết + đả kiểm tra + test rồi
    //----------------------------------------------------------------------------------------------------------





    [IMG]
    Đầu tiên chúng ta cần biết về kits này + thông tin + tài liệu + ứng dụng :
    Board Nhúng Linux KM9260
    Board KM9260 là một máy tính bảng đơn bo (Single Board Computer) được tích hợp cao trên nền vi điều khiển ARM9. Board có kích thước nhỏ gọn và tính năng mạnh mẽ của họ vi điều khiển AT91SAM9 do ATMEL sản xuất. Board hỗ trợ chạy với các hệ điều hành Linux, WinCE và µC/OS-II RTOS với mục tiêu chạy các ứng dụng xử lý hình ảnh như point – of – sale terminals, Ethernet-based IP cameras hoặc đọc bar code. Ngoài ra, board có thể chạy chương trình ứng dụng standalone như các hệ thống vi điều khiển thông thường.
    Tính năng:
    • Bộ vi điều khiển (MCU): AT91SAM9260 16/32 bit ARM926EJ 180MHz
    • Connector theo chuẩn JTAG 20 pin cho phép lập trình và debug hệ thống.
    • 32 MB SDRAM
    • Bộ nhớ 256MB NAND Flash
    • 512kB SPI serial dataflash
    • Ethernet 10/100 base RJ45 connector
    • USB host, device connectors
    • RS232 connector
    • MicroSD card slot
    • Nút nhấn và LED hiển thị
    • Bộ ổn áp nguồn tích hợp 3.3V, dòng 800mA
    • Nguồn cung cấp: 5V DC
    • Connector mở rộng
    • PCB: 1.5 mm (0,062"), phủ xanh, mạ vàng, in hình linh kiện
    • Kích thước: 105 x 75 mm
    Một số ứng dụng:

    Embedded webserver,
    Giám sát, đo lường, điều khiển từ xa qua mạng,
    Board evaluation, giúp nâng cao kỹ năng, kiến thức lập trình nhúng (trong giáo dục),
    Các thiết bị giải trí, Internet Radio solution,
    Xử lý hình ảnh như point – of – sale terminals, Ethernet-based IP cameras hoặc đọc bar code,
    SmartCard System solutions,
    Tài liệu:
    Phần mềm:

    AT91BootStrap-1.1.3 (binary).
    1. u-boot-1.3.4 (binary).
    2. kernel-2.6.27 và patch file.
    3. Angstrom, Debian rootf
    s.
    Ứng dụng:

    KM9260 (Single Board Computer)
    KM9260 Apps áp dụng cho kiểm soát và điều khiển thiết bị qua mạng


    Down Tài Liệu Ở Đây :
    Ứng dụng
    DATASHEEET
    BIN
    Tài Liệu Hướng Dẫn
    Ứng Dụng Điều Khiển Động Cơ

    Cơ Chế và trình tự BOOT

    TÌM HIỂU CƠ CHẾ BOOT CỦA AT91SAM9

    Cơ chế boot giữ vai trò khá quan trọng trong hệ thống nhúng, chúng ta cần phải nghiên cứu kỹ phần này trước khi có quyết định xây dựng sản phẩm ưng ý cho mình. Quá trình boot Linux của AT91SAM9260 trong hệ thống trải qua 3 tầng: ROM boot, AT91BootStrap và u-boot. Sau đây ta sẽ xem xét qua trình tự boot cho từng tầng.
    [IMG]




    - Tầng 1: Mã chương trình được thực thi ở ROM, thông qua các bước kiểm tra (được trình bày chi tiết dưới đây) CPU biết được file ảnh (boot image của tầng tiếp theo) nằm ở thiết bị nào, copy file ảnh vào SRAM (4kB), remap và thực hiện lệnh nhảy chương trình để thực thi tầng boot tiếp theo.

    - Tầng 2: Đây là chương trình do hãng ATMEL cung cấp (AT91BootStrap), mã chương trình được thực thi ở SRAM, bắt đầu ở địa chỉ 0x0 (sau khi remap). Nhiệm vụ của boot tầng 2 chép u-boot image vào SDRAM, thực hiện lệnh nhảy đến SDRAM để thực thi chương trình u-boot.

    - Tầng 3: u-boot được thiết kế cho việc boot Linux kernel (big project), dung lượng mã chương trình hơi lớn nên thông thường nó được thực thi ở bộ nhớ chính (SDRAM). u-boot cung cấp cho ta 1 tập hợp các phương thức boot Linux kernel thông qua: ethernet, usb, mmc, uart ...


    TRÌNH TỰ BOOT CHO TẦNG 1 (ROM boot):

    NGUỒN XUNG CLOCK CHO AT91SAM9260:
    [IMG]



    - Internal RC Oscillator.

    - RTC Crystal (32.768 kHz).

    - External Crystal (Dùng cho Main Oscillator).

    - External Clock (Nguồn cung cấp xung clock ngoài).

    CHÚ THÍCH:

    - SLCK: slow clock : Internal RC, RTC Crystal (32.768 kHz)

    - MAINCLK: Tần số bộ dao động thạch anh ngoài hoặc xung clock ngoài (XIN).

    - PLLACK: Xung lock PLLA.

    - PPLBCK: Xung clock PLLB.

    - PCK: Processor clock.

    - MCK: Master clock : Xung clock cho bộ nhớ ngoài SDRAM...

    CÁC PLL:

    - PLL A : Thiết lập xung clock cho nhánh CPU...

    - PLL B: Thiết lập xung clock cho nhánh USB controller ...

    BOOT MODE SELECT (BMS):

    - BMS = 0 : Boot từ EBI Chip Select 0 (NOR FLASH)

    - BMS = 1 : Boot từ ROM (on chip).

    TRÌNH TỰ BOOT (BMS = 1):

    [IMG]

    Khi khởi động, MPU thực thi chương trình boot trong trong ROM, trình tự theo các bước sau:

    1> Khởi động FIQ.

    2> Setup stack cho ARM supervisor mode.

    3> External Clock Detection.

    4> Swith Master Clock on Main Oscilator.

    5> Khởi động biến C.

    6> Detect tần số Main oscilator nếu không có tín hiệu clock ngoài đưa vào (chân XIN).

    7> Cấu hình PLL, PLLB được cấu hình tạo xung 48MHz cung cấp cho USB controller nhằm phục vụ cho chương trình SAMBA boot.

    Bảng chi tiết về tần số mà chương trình boot hỗ trợ tùy vào từng điều kiện cụ thể:

    a> Bảng tần số "Reduce Crystal Table" được hỗ trợ bởi chương trình boot khi pin OSCSEL = 0 (use internal RC oscilator) và Main Oscilator được active.

    [IMG]

    b> Bảng tần số "Input Frequency Table" được hỗ trợ bởi chương trình boot khi pin OSCSEL = 0 (use internal RC oscilator) và Main Oscilator bypassed

    [IMG]

    c> Bảng tần số "Input Frequency Table" được hỗ trợ bởi chương trình boot khi pin OSCSEL = 1 (use RTC crystal 32.768 kHz)

    [IMG]

    8> Khởi động cổng serial DBGU (115200, 8, N, 1) cho trường hợp OSCSEL = 1

    9> Enable user reset (sau bước này ta có thể reset CPU thông qua nút nhấn reset).

    10> Nếu chương trình boot (tầng thứ 2) hiện diện ở SPI Dataflash (NPCS0) thực hiện download boot image từ Dataflash vào SRAM, remap và nhảy đến chỉ chương trình 0x0.

    11> Nếu chương trình boot (tầng thứ 2) hiện diện ở SPI Dataflash (NPCS1) thực hiện download boot image từ Dataflash vào SRAM, remap và nhảy đến chỉ chương trình 0x0.

    12> Nếu chương trình boot (tầng thứ 2) hiện diện ở NAND Flash thực hiện download boot image từ NAND Flash vào SRAM, remap và nhảy đến chỉ chương trình 0x0.

    13> Tích cực Instruction cache.

    14> Nếu không có chương trình boot (tầng thứ 2) hiện diện ở phần trên, chương trình rẽ nhánh vào phần SAMBA boot sequence.

    15> Disable WatchDog timer.

    16> Khởi động cổng USB (device).

    REMAP:

    Vùng boot của AT91SAM9260 (bắt đầu từ địa chỉ 0x0) có thể cấu hình cứng và mềm theo bảng sau:

    [IMG]

    - Cấu hình mềm:

    + Bit REMAP = 1 : Vùng boot sẽ được map vào vùng SRAM0 (4 kB).

    + Bit REMAP = 0: Vùng boot sẽ được map vào ROM hoặc là EBI_NCS0 tùy vào cách cấu hình cứng sau đây:

    - Cấu hình cứng :

    + BMS = 1 : Vùng boot sẽ được map vào vùng ROM (internal ROM boot)

    + BMS = 0: Vùng boot sẽ được map vào không gian bộ nhớ ngoài EBI_NCS0 (thích hợp với các bộ nhớ tuyến tính như NOR FLASH, EEPROM ngoài....)


    [IMG]
    NHẬN XÉT:

    Tầng boot 1 thực thi mã chương trình trong vùng nhỏ hẹp 4kB, vì thế kích thước file ảnh của tầng boot thứ 2 không được vượt quá giới hạn này.

    MỘT SỐ VÍ DU VỀ KẾT NỐI PHẦN CỨNG:

    1> Sử dụng SPI serial dataflash:

    [IMG]

    - Sử dụng bộ nhớ SPI serial data flash của ATMEL : AT45DBxxx

    - Boot qua đường SPI0: CS0 or CS1.

    2> Sử dụng NAND Flash:
    [IMG]

    - Kết nối thông qua bus bộ nhớ ngoài (SRAMC), một số đường tín hiệu được điều khiển thông qua GPIO bao gồm CE và RB.

    - Độ rộng bus data có thể là 16 bit hoặc 8 bit.

    TRÌNH TỰ BOOT CHO TẦNG 2 (AT91Bootstrap):

    - Tầng Bootstrap thực thi trên SRAM (4kB) ngay sau tầng ROM boot. Sau đây ta tìm hiểu cấu trúc source, nguyên lý hoạt động của tầng này.

    CẤU TRÚC SOURCE AT91BOOTSTRAP:
    [IMG]


    - board : Đây là phần source được port cho từng loại board khác nhau ( thay đổi theo cấu hình hardware của board).

    - doc : Tài liệu hướng dẫn chức năng 1 số hàm trong source.

    - driver : Driver điều khiển các thiết bị trên board: sys, dataflash, nand flash...

    - include: Bao gồm các header file, các khai báo macro cho các hàm.

    - lib: Thư viện dùng chung.

    NGUYÊN LÝ HOẠT ĐỘNG CỦA AT91BOOTSTRAP:

    Sau đây ta sẽ điểm qua cách hoạt động của AT91Bootstrap cho board at91sam9260ek:

    - Trong thư mục Bootstrap bao gồm:

    + File main.c : Chương trình boot được bắt đầu từ đây (không kể startup crt0_gnu.S).

    + Một số file và thư mục khác : Được giới thiệu ở phần trên.

    - Trong thư mục at91sam9260ek bao gồm:

    + Thư mục dataflash : Port cho nhánh boot từ SPI serial dataflash (AT45DBXX)

    + Thư mục nandflash: Port cho nhánh boot từ Nand Flash.

    + File at91sam9260ek.c: Tập hợp các hàm khởi động cho hardware resource của board at91sam9260ek.

    BOOT TỪ DATAFLASH:

    Sau đây ta sẽ đi sâu vào nhánh boot từ SPI serial dataflash (nhánh Nand flash hoàn toàn tương tự):

    - Trong thư mục Bootstrap/board/at91sam9260ek/dataflash bao gồm:

    + at91sam9260ek.h : Định nghĩa các tham số của board.

    + Makefile : Make file cho nhánh dataflash boot.

    1> main.c :

    /* ================== 1st step: Hardware Initialization ================= */

    /* Performs the hardware initialization */

    #ifdef CFG_HW_INIT

    hw_init();

    #endif



    A> Trước tiên chương trình boot thực hiện việc khởi động các tài nguyên trên trên board bao gồm:


    + Cấu hình cổng UART (DBGU) phục vụ cho việc debug.

    + Disable watchdog timer.

    + Cấu hình xung clock hệ thống, PLLA, PLLB...

    + Cấu hình EBI bus.

    + Cấu hình SDRAMC.

    + Cấu hình dataflash (SPI)

    + Cấu hình NAND Flash.

    - Chi tiết có thể tham khảo file at91sam9260ek.c

    - Việc cấu hình SDRAMC phụ thuộc vào đặc tính SDRAM trên board, ví dụ như board hỗ trợ 1 chíp hay 2 chíp, bus with 8,16, hay 32...

    - Ý nghĩa của các tham số:

    + AT91C_SDRAMC_NC_9 : Số colum là 9

    + AT91C_SDRAMC_NR_13 : Số row là 13

    + T91C_SDRAMC_CAS_2 : CAS latency là 2 chu kỳ (Master clock MCK).

    + AT91C_SDRAMC_NB_4_BANKS : Số bank là 4

    + AT91C_SDRAMC_DBW_32_BITS: Độ rộng bus data là 32 bit.

    .....

    - Các thông số timming có thể tìm thấy trong datasheet của SDRAM của từng hãng sản xuất (ns). Vì thế chúng ta cần quy đổi tham số thời gian sang số chu kỳ xung MCK (làm tròn theo số nguyên + để đảm bảo yêu cầu về timming). AT91Boostrap thiết lập MCK mặc định cho board at91sam9260ek là 98MHz.



    B> Load file ảnh u-boot từ dataflash vào SDRAM, sau đó thực hiện lệnh nhảy và thực thi u-boot:

    - AT91Bootstrap load file ảnh (u-boot) từ địa chỉ MG_ADDRESS (trong dataflash) sang địa chỉ JUMP_ADDR (SDRAM) và cuối cùng thực hiện lệnh nhảy để chạy chương trình u-boot.

    - Các tham số này được định nghĩa trong file /board/at91sam9260ek/at91sam9260ek.h:


    - Ý nghĩa các tham số:

    + MG_ADDRESS (0x8400) : Địa chỉ (offset) lưu trữ file ảnh u-boot trong dataflash.

    + IMG_SIZE (0x33900) : Kich thước cần load cho file ảnh (đủ lớn để đảm bảo chép đầy đủ).

    + MACH_TYPE (0x44B): Machine ID cho board at19sam9260ek (sẽ được trình bày ở phần sau).

    + JUMP_ADDR (0x23F00000) : Địa chỉ (tuyến tính) cần load file ảnh lên SDRAM.

    - Board at91sam9260ek sử dụng 2 chip SDRAM 32MB (16bit) có tầm địa chỉ từ: 0x20000000-0x24000000.

    - JUMP_ADDR được thiết kế nằm phía cuối vùng SDRAM nhằm đảm bảo chừa đủ khoảng trống cho việc load file ảnh linux kernel.



    MÔI TRƯỜNG BUILD AT91BOOSTRAP:

    - Source AT91Bootstrap sử dụng trình biên dịch gcc, có nhiều loại gcc chạy trên Linux kể cả Windows. Tuy nhiên, gcc compiler khác nhau cho kích thước build image khác nhau. Theo kết quả thực nghiệm thì gói WinArm build với kích thước nhỏ hơn so với các loại khác. Một điều chúng ta cần lưu ý rằng: kích thước file ảnh không vượt quá 4kB, vì thế chúng ta cần phải tối ưu source nhỏ đến mức có thể, ví dụ: bỏ config debug, giảm kích thước các biến mảng, struct trong source driver bằng cách thêm vào các #define derective phụ thuộc cho phần cứng... thêm phần tối ưu code size cho trình biên dịch vào cờ CCFLAGS (-Os)...



    1> Cài đặt WinArm trên Windows:

    + Download gói WinARM-20060606.zip

    + Giải nén và set biến môi trường cho đường dẫn đến các thư mục : ...\WinARM\bin và ...\WinARM\utils\bin

    + Download phiên bản mới của make.exe (3.81) và chép vào thư mục ...\WinARM\utils\bin



    2> Sau khi cài xong gói Winarm, có thể kiểm tra lại bằng cách gọi lệnh sau (DOS Shell):


    3> Có thể chỉnh sửa cross compiler mặc định cho Makefile (nằm trong thư mục /board/at91sam9260ek/dataflash) như sau:



    4> Build source:

    - Di chuyển đến thư mục /board/at91sam9260ek/dataflash và thực hiện lệnh make:

    - Kết quả ta có được file ảnh "dataflash_at91sam9260ek.bin" nằm trong thư mục .../dataflash



    MỘT SỐ VÍ DỤ VỀ KẾT NỐI SDRAM:

    1> Bus Width 16 bit ( 1 chíp):
    [IMG]


    2> Bus Width 32 bit (2 chíp):
    [IMG]
  2. thanhmai Member

    Số bài viết: 606
    Đã được thích: 5
    Điểm thành tích: 18
    Phần 2: giới thiệu một số tool hữu ích
    Putty.exe (WinXP):
    [IMG]
    Chương trình chạy cho console của hệ thống nhúng hỗ trợ theo 2 kiểu kết nối RS232 và qua đường ethernet.



    Connection type: Raw, Telnet, Rlogin, SSH, Serial.
    Có thể sử dụng putty làm terminal cho console chính của board KM9260. Ở đây,
    baudrate của cổng COM được set ở 115200. Nếu máy Linux đang chạy ssh server và
    được nối trong mạng LAN, ta có thể sử dụng console của máy Linux đó thông qua putty
    bằng cách sử dụng kiểu kết nối SSH như hình trên.

    WinSCP.exe (WinXP):
    Chương trình cho phép ta dễ dàng thao tác file của máy Linux trên máy WinXP, giao
    diện tương tự WinCommander, ta có thể chép file ra-vào từ máy WinXP với máy Linux.
    Để sử dụng chương trình này, trên máy Linux cần phải có ssh server.
    [IMG]


    Thông tin đăng nhập:
    Host name : Địa chỉ IP của máy Linux : 192.168.3.29
    User name : root
    Password : km9260
    Sau khi điền thông tin, ấn nút "Save" và thực hiện kết nối.
    [IMG]


    Ta có thể drop, drap file vào-ra từ màn hình destop WinXP để thực hiện sao lưu file với máy Linux.

    Cross Toolchians (Linux):
    Là trình biên dịch cho AT91SAM, chạy trên môi trường Linux. Gói tarball được đính
    kèm theo đĩa CD với tên "arm-2007q3.tar.bz2". Phần sau hướng dẫn cách cài đặt
    toolchains trên máy host Linux PC:
    Trước tiên ta tạo thư mục làm việc như sau:
    Code:
    Mã:
    $ mkdir -p /home/km9260-project/tool
    Chép file arm-2007q3.tar.bz2 vào thư mục vừa tạo ở trên và thực hiện giải nén gói tarball
    của toolchains:
    Code:
    Mã:
    $ cd /home/km9260-project/tool
    $ tar –jcvf arm-2007q3.tar.bz2
    Để có thể sử dụng toolchains, ta khai báo biến môi trường như lệnh sau:
    Code:
    Mã:
    $ export PATH=$PATH:/home/km9260-project/tool/arm-2007q3/bin
    Để ý rằng trong thư mục “arm-2007q3/bin” chứa những file cần thiết phục vụ cho việc biên dịch cho KM9260, có thể xem tên các file này bằng cách dùng lệnh “ls”. Các file này được đặt tên theo quy luật. Prefix bao gồm chuỗi ký tự “arm-none-linux-gnueabi-“ Và các suffix bao gồm: gcc, ld, as …
    Ta có thể kiểm tra việc export biến môi trường PATH thành công hay không bằng cách type lệnh shell như sau:
    Code:
    Mã:
    $ arm-none-linux-gnueabi-gcc
    $ arm-none-linux-gnueabi-gcc: no input files
    Nếu có xuất hiện thông báo “no input files” thì thao tác export trên thành công, nếu có thông báo “command not found” có nghĩa là ta chưa export đúng đường dẫn. Chú ý rằng bước export PATH rất quan trọng, mỗi lần khởi động máy Linux hoặc sử dụng console khác ta bắt buộc phải export lại để đảm bảo toochains có thể hoạt động được.

    VIẾT CHƯƠNG TRÌNH ỨNG DỤNG CHO KM9260:
    Chương trình hello:

    Phần giới thiệu cách tạo chương trình đơn giản in dòng chữ “Hello” ra console.
    Chương trình có thể tạo và biên dịch trên máy tính hoặc tạo và biên dịch trực tiếp trên KM9260 (dùng Debian rootfs).
    Dùng nano editor tạo ra file hello.c với nội dung như sau:
    Code:
    Mã:
    #include <stdio.h>
    int main (int argc, char *argv[])
    {
    printf (“Hello\r\n”);
    return 0;
    }
    Dịch chương trình hello.c theo lệnh sau:
    Code:
    Mã:
    $ arm-none-linux-gnueabi-gcc –o hello hello.c
    Sau khi biên dịch xong, gcc tạo ra file thực thi “hello”, để chạy file này trên KM9260. Ta có thể dùng tool WinSCP chép file này từ máy tính PC Linux vào board KM9260. Lệnh chạy chương trình hello trên console KM9260 như sau :
    Code:
    Mã:
    $ chmod 777 hello
    $ ./hello
    hello
    Hoặc có thể tạo file Hello.c và biên dịch trực tiếp trên board KM9260, lúc đó lệnh dịch chương trình sẽ thành:
    Code:
    Mã:
    $ gcc –o hello hello.c
    $ ./hello
    hello
    Down load các tool ở đây::

    Putty
    WinSCP
  3. mrquicuong New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
    Chào anh, a có thể hướng dẫn giúp em về kit mini2440 được không ạ?
    Hoặc anh có tài liệu nào hướng dẫn người mới bắt đầu vọc nhúng như em, xin anh up lên đây, để em và các bạn khác có thể cùng sử dụng.
    Cảm ơn anh nhiều. Chúc anh sức khỏe và thành công.
  4. thanhmai Member

    Số bài viết: 606
    Đã được thích: 5
    Điểm thành tích: 18
  5. mrquicuong New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
    chào anh, đây là mô hình em tính làm: [IMG]
    nếu không xem được hình, vui lòng xem trong link này: http://www.flickr.com/photos/37016703@N05/6315652226/lightbox/

    Anh xem giúp em dùng trực tiếp các chân GPIO trên kit để nhận và xuất tín hiệu điều khiển động cơ như thế có được không hay em nên dùng cổng COm để giao tiếp với 1 module khác (vd: PIC) rồi dùng module này điều khiển ạ?

    À, nếu a có thời gian xin anh hướng dẫn em cách tiếp cận với KIT này, e chưa biết nên bắt đầu như thế nào.? Viết giao diện GUI trên C sharp và code trên 1 phần mèm gì đó (ngôn ngữ C) rồi nạp cho kit là chạy được hay sao ạ?
    Cảm ơn anh nhiều. Chúc a sức khỏe.
  6. thanhmai Member

    Số bài viết: 606
    Đã được thích: 5
    Điểm thành tích: 18
  7. ngoc2211 New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 1
    bạn ơi
    bạn có tài liệu về đề tài xứ lý âm thanh (nén- giải nén mp3 hoặc nhận dạng tiếng nói ) trên kit nhúng KM9261 không bạn ?
    bạn cho mình xin với.thanks
  8. tuandung Member

    Số bài viết: 66
    Đã được thích: 1
    Điểm thành tích: 8

Chia sẻ trang này