Sjur Braendeland | edc7616 | 2010-03-30 13:56:29 +0000 | [diff] [blame] | 1 | Copyright (C) ST-Ericsson AB 2010 |
| 2 | Author: Sjur Brendeland/ sjur.brandeland@stericsson.com |
| 3 | License terms: GNU General Public License (GPL) version 2 |
| 4 | --------------------------------------------------------- |
| 5 | |
| 6 | === Start === |
| 7 | If you have compiled CAIF for modules do: |
| 8 | |
| 9 | $modprobe crc_ccitt |
| 10 | $modprobe caif |
| 11 | $modprobe caif_socket |
| 12 | $modprobe chnl_net |
| 13 | |
| 14 | |
| 15 | === Preparing the setup with a STE modem === |
| 16 | |
| 17 | If you are working on integration of CAIF you should make sure |
| 18 | that the kernel is built with module support. |
| 19 | |
| 20 | There are some things that need to be tweaked to get the host TTY correctly |
| 21 | set up to talk to the modem. |
| 22 | Since the CAIF stack is running in the kernel and we want to use the existing |
| 23 | TTY, we are installing our physical serial driver as a line discipline above |
| 24 | the TTY device. |
| 25 | |
| 26 | To achieve this we need to install the N_CAIF ldisc from user space. |
| 27 | The benefit is that we can hook up to any TTY. |
| 28 | |
| 29 | The use of Start-of-frame-extension (STX) must also be set as |
| 30 | module parameter "ser_use_stx". |
| 31 | |
| 32 | Normally Frame Checksum is always used on UART, but this is also provided as a |
| 33 | module parameter "ser_use_fcs". |
| 34 | |
| 35 | $ modprobe caif_serial ser_ttyname=/dev/ttyS0 ser_use_stx=yes |
| 36 | $ ifconfig caif_ttyS0 up |
| 37 | |
| 38 | PLEASE NOTE: There is a limitation in Android shell. |
| 39 | It only accepts one argument to insmod/modprobe! |
| 40 | |
| 41 | === Trouble shooting === |
| 42 | |
| 43 | There are debugfs parameters provided for serial communication. |
| 44 | /sys/kernel/debug/caif_serial/<tty-name>/ |
| 45 | |
| 46 | * ser_state: Prints the bit-mask status where |
| 47 | - 0x02 means SENDING, this is a transient state. |
| 48 | - 0x10 means FLOW_OFF_SENT, i.e. the previous frame has not been sent |
| 49 | and is blocking further send operation. Flow OFF has been propagated |
| 50 | to all CAIF Channels using this TTY. |
| 51 | |
| 52 | * tty_status: Prints the bit-mask tty status information |
| 53 | - 0x01 - tty->warned is on. |
| 54 | - 0x02 - tty->low_latency is on. |
| 55 | - 0x04 - tty->packed is on. |
| 56 | - 0x08 - tty->flow_stopped is on. |
| 57 | - 0x10 - tty->hw_stopped is on. |
| 58 | - 0x20 - tty->stopped is on. |
| 59 | |
| 60 | * last_tx_msg: Binary blob Prints the last transmitted frame. |
| 61 | This can be printed with |
| 62 | $od --format=x1 /sys/kernel/debug/caif_serial/<tty>/last_rx_msg. |
| 63 | The first two tx messages sent look like this. Note: The initial |
| 64 | byte 02 is start of frame extension (STX) used for re-syncing |
| 65 | upon errors. |
| 66 | |
| 67 | - Enumeration: |
| 68 | 0000000 02 05 00 00 03 01 d2 02 |
| 69 | | | | | | | |
| 70 | STX(1) | | | | |
| 71 | Length(2)| | | |
| 72 | Control Channel(1) |
| 73 | Command:Enumeration(1) |
| 74 | Link-ID(1) |
| 75 | Checksum(2) |
| 76 | - Channel Setup: |
| 77 | 0000000 02 07 00 00 00 21 a1 00 48 df |
| 78 | | | | | | | | | |
| 79 | STX(1) | | | | | | |
| 80 | Length(2)| | | | | |
| 81 | Control Channel(1) |
| 82 | Command:Channel Setup(1) |
| 83 | Channel Type(1) |
| 84 | Priority and Link-ID(1) |
| 85 | Endpoint(1) |
| 86 | Checksum(2) |
| 87 | |
| 88 | * last_rx_msg: Prints the last transmitted frame. |
| 89 | The RX messages for LinkSetup look almost identical but they have the |
| 90 | bit 0x20 set in the command bit, and Channel Setup has added one byte |
| 91 | before Checksum containing Channel ID. |
| 92 | NOTE: Several CAIF Messages might be concatenated. The maximum debug |
| 93 | buffer size is 128 bytes. |
| 94 | |
| 95 | == Error Scenarios: |
| 96 | - last_tx_msg contains channel setup message and last_rx_msg is empty -> |
| 97 | The host seems to be able to send over the UART, at least the CAIF ldisc get |
| 98 | notified that sending is completed. |
| 99 | |
| 100 | - last_tx_msg contains enumeration message and last_rx_msg is empty -> |
| 101 | The host is not able to send the message from UART, the tty has not been |
| 102 | able to complete the transmit operation. |
| 103 | |
| 104 | - if /sys/kernel/debug/caif_serial/<tty>/tty_status is non-zero there |
| 105 | might be problems transmitting over UART. |
| 106 | E.g. host and modem wiring is not correct you will typically see |
| 107 | tty_status = 0x10 (hw_stopped) and ser_state = 0x10 (FLOW_OFF_SENT). |
| 108 | You will probably see the enumeration message in last_tx_message |
| 109 | and empty last_rx_message. |