Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Updating numbered headings

...

Bluetooth is widely used when it is necessary to provide a wireless access to the devices located in short distances. In this application note we will show how to organize a wireless FTP access to the NXP i.MX RT1170 EVK running Linux using a USB Bluetooth adapter. In practical embedded applications such a wireless channel may be used to retrieve data collected by the i.MX RT1170 via the standard FTP protocol. The most obvious use case scenario for this need is a technician visiting an embedded device residing at a remote site in order to retrieve data collected and stored locally by the i.MX RT1170 board locally (e.g. the i.MX RT1170 may store data on a EXT2 partition in the SD Card or on a connected USB Flash). Being able to access the i.MX RT1170 over Bluetooth from a notebook or a smartphone, with no need to connect to the i.MX RT1170 with any physical cables, comes in very hand, especially for devices with limited physical access.

1. Hardware Platform

The hardware platform used in this application note is the NXP i.MX RT1170 EVK board with a USB Bluetooth adapter plugged into the USB 2 J10 connector. The generic Linux kernel device driver for the USB transport HCI layer (CONFIG_BT_HCIBTUSB) is used in this configuration so other USB Bluetooth adapters should work as described below too.

2. Software Platform

Support for the Bluetooth FTP server is implemented by the obexftp package:
http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp.

...

The functionality described below is available from the rootfs.uImage project provided by Emcraft for the NXP i.MX RT1170 EVK board.

3. Test Setup

We will use the following terminology below:

  • Target: NXP i.MX RT1170 EVK board with the Bluetooth adapter plugged into the USB HS port.
    The Bluetooth <Target address> in the examples below is 04:7F:0E:31:B7:94;

  • Host: Any computer with a Bluetooth interface, running Linux with the Bluetooth tools (bluez-utils, openobex, and obexftp) installed.
    The Bluetooth <Host address> in the examples below is BC:77:37:5C:32:57.

4. Bluetooth FTP Server on i.MX RT1170

  1. Power-on the NXP i.MX RT1170 EVK board and wait for the Linux to boot on the Target. Run the Bluetooth daemons in the background:

    Code Block
    ...
    
    / # hcid -n&
    hcid[96]: Bluetooth HCI daemon
    / # sdpd -n&
    [2] 97 sdpd -n
    
    
  2. Plug-in the Bluetooth adapter to the USB HS interface of the NXP i.MX RT1170 EVK board. Observe the messages similar to the following in the Target console:

    Code Block
    usb 1-1: new full-speed USB device number 2 using ci_hdrc
    usb 1-1: Duplicate descriptor for config 1 interface 1 altsetting 5, skipping
    hcid[96]: HCI dev 0 registered
    Bluetooth: hci0: CSR: Unbranded CSR clone detected; adding workarounds and force-suspending once...
    Bluetooth: hci0: CSR: Failed to suspend the device for our Barrot 8041a02 receive-issue workaround
    hcid[96]: HCI dev 0 up
    hcid[101]: Can't set encrypt on hci0: Invalid request code (56)
    hcid[96]: Starting security manager 0
  3. Get the <Target address> Bluetooth address of the adapter just plugged-in:

    Code Block
    / # hcitool dev
    Devices:
    hci0 04:7F:0E:31:B7:94
    / #
  4. Create a test file in the root/ directory, which will be exported over FTP from the Target:

    Code Block
    / # cd /root/
    /root # ln -s /bin/busybox .
  5. Run the FTP server daemon specifying the Bluetooth port to listen upon, and the exported root directory. In the example below the channel number is 2, an FTP root directory is /root:

    Code Block
    / # obexftpd -c /root -b2 &
    Waiting for connection...
    / #
  6. List the names of files exported by the Target over Bluetooth by executing the following command on the Host:

    Code Block
    $ sudo obexftp -b 04:7F:0E:31:B7:94 -B 2 -l
    Connecting..\done
    
    Receiving "(null)"...|<?xml version="1.0"?>
    <!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
    <folder-listing version="1.0">
    <file name="busybox" size="12" user-perm="RWD" modified="19700101T000426Z" created="19700101T000426Z" accessed="19700101T000426Z" />
    </folder-listing>
    done
    Disconnecting../done
    
    
  7. Download the test file from the Target over Bluetooth by executing the following commands on the Host:

    Code Block
    $ sudo obexftp -b 04:7F:0E:31:B7:94 -B 2 -g busybox
    Connecting..\done
    Receiving "busybox"...-done
    Disconnecting..\done
    $
    $ ls -l busybox
    -rw-r--r-- 1 root root 377384 окт 12 15:49 busybox
  8. Upload the test file to the Target over Bluetooth by executing the following commands on the Host:

    Code Block
    $ dd if=/dev/zero of=512kB.host bs=1024 count=512
    512+0 records in
    512+0 records out
    524288 bytes (524 kB, 512 KiB) copied, 0,00793397 s, 66,1 MB/s
    $ $ sudo obexftp -b 04:7F:0E:31:B7:94 -B 2 -p 512kB.host
    Connecting..\done
    Sending "512kB.host"...|done
    Disconnecting../done
  9. Validate the uploaded file:

    Code Block
    /root # ls -lt /root
    -rw-r--r-- 1 root root 524288 Jan 1 00:09 512kB.host
    lrwxrwxrwx 1 root root 12 Jan 1 00:00 busybox -> /bin/busybox

5. Bluetooth FTP Client on i.MX RT1170

The Target may also implement the FTP Client functionality and connect to the FTP servers exported over Bluetooth by other devices. The obexftp utility is integrated into the rootfs project and may be used for this purpose. See the commands executed on the Host above in this application note: similar commands may be run on the Target side if we want it to perform the FTP Client role.