<p>pespin <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/14998">View Change</a></p><div style="white-space:pre-wrap">Approvals:
Jenkins Builder: Verified
laforge: Looks good to me, approved
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move inband-signaling-usb documentation to UserManual<br><br>Change-Id: I4d6ef1f54f3d6c5a73ce00dc4640bd698f96842b<br>---<br>D Transceiver52M/inband-signaling-usb<br>A doc/manuals/chapters/device-usrp-inband-signaling-usb.adoc<br>M doc/manuals/chapters/trx-devices.adoc<br>3 files changed, 305 insertions(+), 314 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/Transceiver52M/inband-signaling-usb b/Transceiver52M/inband-signaling-usb</span><br><span>deleted file mode 100644</span><br><span>index 14f8347..0000000</span><br><span>--- a/Transceiver52M/inband-signaling-usb</span><br><span>+++ /dev/null</span><br><span>@@ -1,314 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-This file specifies the format of USB packets used for in-band data</span><br><span style="color: hsl(0, 100%, 40%);">-transmission and signaling on the USRP. All packets are 512-byte long,</span><br><span style="color: hsl(0, 100%, 40%);">-and are transfered using USB "bulk" transfers.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-IN packets are sent towards the host.</span><br><span style="color: hsl(0, 100%, 40%);">-OUT packets are sent away from the host.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-The layout is 32-bits wide. All data is transmitted in little-endian</span><br><span style="color: hsl(0, 100%, 40%);">-format across the USB.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- |O|U|D|S|E| RSSI | Chan | mbz | Tag | Payload Len |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Timestamp |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | |</span><br><span style="color: hsl(0, 100%, 40%);">- + +</span><br><span style="color: hsl(0, 100%, 40%);">- | Payload |</span><br><span style="color: hsl(0, 100%, 40%);">- . .</span><br><span style="color: hsl(0, 100%, 40%);">- . .</span><br><span style="color: hsl(0, 100%, 40%);">- . .</span><br><span style="color: hsl(0, 100%, 40%);">- | |</span><br><span style="color: hsl(0, 100%, 40%);">- + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | ... | .</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+ .</span><br><span style="color: hsl(0, 100%, 40%);">- . .</span><br><span style="color: hsl(0, 100%, 40%);">- . Padding .</span><br><span style="color: hsl(0, 100%, 40%);">- . .</span><br><span style="color: hsl(0, 100%, 40%);">- | |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- mbz Must be Zero: these bits must be zero in both IN and OUT packets.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- O Overrun Flag: set in an IN packet if an overrun condition was</span><br><span style="color: hsl(0, 100%, 40%);">- detected. Must be zero in OUT packets. Overrun occurs when</span><br><span style="color: hsl(0, 100%, 40%);">- the FPGA has data to transmit to the host and there is no</span><br><span style="color: hsl(0, 100%, 40%);">- buffer space available. This generally indicates a problem on</span><br><span style="color: hsl(0, 100%, 40%);">- the host. Either it is not keeping up, or it has configured</span><br><span style="color: hsl(0, 100%, 40%);">- the FPGA to transmit data at a higher rate than the transport</span><br><span style="color: hsl(0, 100%, 40%);">- (USB) can support.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- U Underrun Flag: set in an IN packet if an underrun condition</span><br><span style="color: hsl(0, 100%, 40%);">- was detected. Must be zero in OUT packets. Underrun occurs</span><br><span style="color: hsl(0, 100%, 40%);">- when the FPGA runs out of samples, and it's not between</span><br><span style="color: hsl(0, 100%, 40%);">- bursts. See the "End of Burst flag" below.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- D Dropped Packet Flag: Set in an IN packet if the FPGA</span><br><span style="color: hsl(0, 100%, 40%);">- discarded an OUT packet because its timestamp had already</span><br><span style="color: hsl(0, 100%, 40%);">- passed.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- S Start of Burst Flag: Set in an OUT packet if the data is the</span><br><span style="color: hsl(0, 100%, 40%);">- first segment of what is logically a continuous burst of data.</span><br><span style="color: hsl(0, 100%, 40%);">- Must be zero in IN packets.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- E End of Burst Flag: Set in an OUT packet if the data is the</span><br><span style="color: hsl(0, 100%, 40%);">- last segment of what is logically a continuous burst of data.</span><br><span style="color: hsl(0, 100%, 40%);">- Must be zero in IN packets. Underruns are not reported</span><br><span style="color: hsl(0, 100%, 40%);">- when the FPGA runs out of samples between bursts.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- RSSI 6-bit Received Strength Signal Indicator: Must be zero in OUT</span><br><span style="color: hsl(0, 100%, 40%);">- packets. In IN packets, indicates RSSI as reported by front end.</span><br><span style="color: hsl(0, 100%, 40%);">- FIXME The format and interpretation are to be determined.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Chan 5-bit logical channel number. Channel number 0x1f is reserved</span><br><span style="color: hsl(0, 100%, 40%);">- for control information. See "Control Channel" below. Other</span><br><span style="color: hsl(0, 100%, 40%);">- channels are "data channels." Each data channel is logically</span><br><span style="color: hsl(0, 100%, 40%);">- independent of the others. A data channel payload field</span><br><span style="color: hsl(0, 100%, 40%);">- contains a sequence of homogeneous samples. The format of the</span><br><span style="color: hsl(0, 100%, 40%);">- samples is determined by the configuration associated with the</span><br><span style="color: hsl(0, 100%, 40%);">- given channel. It is often the case that the payload field</span><br><span style="color: hsl(0, 100%, 40%);">- contains 32-bit complex samples, each containing 16-bit real</span><br><span style="color: hsl(0, 100%, 40%);">- and imaginary components.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Tag 4-bit tag for matching IN packets with OUT packets.</span><br><span style="color: hsl(0, 100%, 40%);">- [FIXME, write more...]</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Payload Len: 9-bit field that specifies the length of the payload</span><br><span style="color: hsl(0, 100%, 40%);">- field in bytes. Must be in the range 0 to 504 inclusive.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Timestamp: 32-bit timestamp.</span><br><span style="color: hsl(0, 100%, 40%);">- On IN packets, the timestamp indicates the time at which the</span><br><span style="color: hsl(0, 100%, 40%);">- first sample of the packet was produced by the A/D converter(s)</span><br><span style="color: hsl(0, 100%, 40%);">- for that channel. On OUT packets, the timestamp specifies the</span><br><span style="color: hsl(0, 100%, 40%);">- time at which the first sample in the packet should go out the</span><br><span style="color: hsl(0, 100%, 40%);">- D/A converter(s) for that channel. If a packet reaches the</span><br><span style="color: hsl(0, 100%, 40%);">- head of the transmit queue, and the current time is later than</span><br><span style="color: hsl(0, 100%, 40%);">- the timestamp, an error is assumed to have occurred and the</span><br><span style="color: hsl(0, 100%, 40%);">- packet is discarded. As a special case, the timestamp</span><br><span style="color: hsl(0, 100%, 40%);">- 0xffffffff is interpreted as "Now".</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- The time base is a free running 32-bit counter that is</span><br><span style="color: hsl(0, 100%, 40%);">- incremented by the A/D sample-clock.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Payload: Variable length field. Length is specified by the</span><br><span style="color: hsl(0, 100%, 40%);">- Payload Len field.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Padding: This field is 504 - Payload Len bytes long, and its content</span><br><span style="color: hsl(0, 100%, 40%);">- is unspecified. This field pads the packet out to a constant</span><br><span style="color: hsl(0, 100%, 40%);">- 512 bytes.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-"Data Channel" payload format:</span><br><span>--------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-If Chan != 0x1f, the packet is a "data packet" and the payload is a</span><br><span style="color: hsl(0, 100%, 40%);">-sequence of homogeneous samples. The format of the samples is</span><br><span style="color: hsl(0, 100%, 40%);">-determined by the configuration associated with the given channel. </span><br><span style="color: hsl(0, 100%, 40%);">-It is often the case that the payload field contains 32-bit complex</span><br><span style="color: hsl(0, 100%, 40%);">-samples, each containing 16-bit real and imaginary components.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-"Control Channel" payload format:</span><br><span>----------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-If Chan == 0x1f, the packet is a "control packet". The control channel</span><br><span style="color: hsl(0, 100%, 40%);">-payload consists of a sequence of 0 or more sub-packets.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Each sub-packet starts on a 32-bit boundary, and consists of an 8-bit</span><br><span style="color: hsl(0, 100%, 40%);">-Opcode field, an 8-bit Length field, Length bytes of arguments, and 0,</span><br><span style="color: hsl(0, 100%, 40%);">-1, 2 or 3 bytes of padding to align the tail of the sub-packet to</span><br><span style="color: hsl(0, 100%, 40%);">-a 32-bit boundary.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Control channel packets shall be processed at the head of the queue,</span><br><span style="color: hsl(0, 100%, 40%);">-and shall observe the timestamp semantics described above.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-General sub-packet format:</span><br><span>---------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-//-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | Length | <length bytes> ... |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-//-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Specific sub-packet formats:</span><br><span>-----------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- RID: 6-bit Request-ID. Copied from request sub-packet into corresponding</span><br><span style="color: hsl(0, 100%, 40%);">- reply sub-packet. RID allows the host to match requests and replies.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Reg Number: 10-bit Register Number.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Ping Fixed Length:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_PING_FIXED</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 2 | RID | Ping Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Ping Fixed Length Reply:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_PING_FIXED_REPLY</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 2 | RID | Ping Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Write Register:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_WRITE_REG</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 6 | mbz | Reg Number |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Register Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Write Register Masked:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_WRITE_REG_MASKED</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- REG[Num] = (REG[Num] & ~Mask) | (Value & Mask)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- That is, only the register bits that correspond to 1's in the</span><br><span style="color: hsl(0, 100%, 40%);">- mask are written with the new value.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 10 | mbz | Reg Number |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Register Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Mask Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Read Register:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_READ_REG</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 2 | RID | Reg Number |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Read Register Reply:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_READ_REG_REPLY</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 6 | RID | Reg Number |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Register Value |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-I2C Write:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_I2C_WRITE</span><br><span style="color: hsl(0, 100%, 40%);">- I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(0, 100%, 40%);">- Data: The bytes to write to the I2C bus</span><br><span style="color: hsl(0, 100%, 40%);">- Length: Length of Data + 2</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | Length | mbz | I2C Addr |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Data ... .</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-I2C Read:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_I2C_READ</span><br><span style="color: hsl(0, 100%, 40%);">- I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(0, 100%, 40%);">- Nbytes: Number of bytes to read from I2C bus</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 3 | RID | mbz | I2C Addr |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Nbytes | unspecified padding |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-I2C Read Reply:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_I2C_READ_REPLY</span><br><span style="color: hsl(0, 100%, 40%);">- I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(0, 100%, 40%);">- Data: Length - 2 bytes of data read from I2C bus.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | Length | RID | mbz | I2C Addr |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Data ... .</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SPI Write:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_SPI_WRITE</span><br><span style="color: hsl(0, 100%, 40%);">- Enables: Which SPI enables to assert (mask)</span><br><span style="color: hsl(0, 100%, 40%);">- Format: Specifies format of SPI data and Opt Header Bytes</span><br><span style="color: hsl(0, 100%, 40%);">- Opt Header Bytes: 2-byte field containing optional Tx bytes; see Format</span><br><span style="color: hsl(0, 100%, 40%);">- Data: The bytes to write to the SPI bus</span><br><span style="color: hsl(0, 100%, 40%);">- Length: Length of Data + 6</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | Length | mbz |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Enables | Format | Opt Header Bytes |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Data ... .</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SPI Read:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_SPI_READ</span><br><span style="color: hsl(0, 100%, 40%);">- Enables: Which SPI enables to assert (mask)</span><br><span style="color: hsl(0, 100%, 40%);">- Format: Specifies format of SPI data and Opt Header Bytes</span><br><span style="color: hsl(0, 100%, 40%);">- Opt Header Bytes: 2-byte field containing optional Tx bytes; see Format</span><br><span style="color: hsl(0, 100%, 40%);">- Nbytes: Number of bytes to read from SPI bus.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 7 | RID | mbz |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Enables | Format | Opt Header Bytes |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Nbytes | unspecified padding |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SPI Read Reply:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_SPI_READ_REPLY</span><br><span style="color: hsl(0, 100%, 40%);">- Data: Length - 2 bytes of data read from SPI bus.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | Length | RID | mbz |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Data ... .</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-Delay:</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Opcode: OP_DELAY</span><br><span style="color: hsl(0, 100%, 40%);">- Ticks: 16-bit unsigned delay count</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- Delay Ticks clock ticks before executing next operation.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">- | Opcode | 2 | Ticks |</span><br><span style="color: hsl(0, 100%, 40%);">- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/doc/manuals/chapters/device-usrp-inband-signaling-usb.adoc b/doc/manuals/chapters/device-usrp-inband-signaling-usb.adoc</span><br><span>new file mode 100644</span><br><span>index 0000000..dac77e0</span><br><span>--- /dev/null</span><br><span>+++ b/doc/manuals/chapters/device-usrp-inband-signaling-usb.adoc</span><br><span>@@ -0,0 +1,303 @@</span><br><span style="color: hsl(120, 100%, 40%);">+[[dev_USRP1_inband_signaling_usb]]</span><br><span style="color: hsl(120, 100%, 40%);">+==== USRP1 in-band USB protocol</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+This section specifies the format of USB packets used for in-band data</span><br><span style="color: hsl(120, 100%, 40%);">+transmission and signaling on the USRP1. All packets are 512-byte long, and are</span><br><span style="color: hsl(120, 100%, 40%);">+transfered using USB "bulk" transfers.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+IN packets are sent towards the host. OUT packets are sent away from the host.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The layout is 32-bits wide. All data is transmitted in little-endian format</span><br><span style="color: hsl(120, 100%, 40%);">+across the USB.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+|O|U|D|S|E| RSSI | Chan | mbz | Tag | Payload Len |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Timestamp |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| |</span><br><span style="color: hsl(120, 100%, 40%);">++ +</span><br><span style="color: hsl(120, 100%, 40%);">+| Payload |</span><br><span style="color: hsl(120, 100%, 40%);">+. .</span><br><span style="color: hsl(120, 100%, 40%);">+. .</span><br><span style="color: hsl(120, 100%, 40%);">+. .</span><br><span style="color: hsl(120, 100%, 40%);">+| |</span><br><span style="color: hsl(120, 100%, 40%);">++ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| ... | .</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+ .</span><br><span style="color: hsl(120, 100%, 40%);">+. .</span><br><span style="color: hsl(120, 100%, 40%);">+. Padding .</span><br><span style="color: hsl(120, 100%, 40%);">+. .</span><br><span style="color: hsl(120, 100%, 40%);">+| |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+mbz: Must be Zero::</span><br><span style="color: hsl(120, 100%, 40%);">+These bits must be zero in both IN and OUT packets.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+O: Overrun Flag::</span><br><span style="color: hsl(120, 100%, 40%);">+Set in an IN packet if an overrun condition was detected. Must be zero in OUT</span><br><span style="color: hsl(120, 100%, 40%);">+packets. Overrun occurs when the FPGA has data to transmit to the host and there</span><br><span style="color: hsl(120, 100%, 40%);">+is no buffer space available. This generally indicates a problem on the host.</span><br><span style="color: hsl(120, 100%, 40%);">+Either it is not keeping up, or it has configured the FPGA to transmit data at a</span><br><span style="color: hsl(120, 100%, 40%);">+higher rate than the transport (USB) can support.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+U: Underrun Flag::</span><br><span style="color: hsl(120, 100%, 40%);">+Set in an IN packet if an underrun condition was detected. Must be zero in OUT</span><br><span style="color: hsl(120, 100%, 40%);">+packets. Underrun occurs when the FPGA runs out of samples, and it's not between</span><br><span style="color: hsl(120, 100%, 40%);">+bursts. See the "End of Burst flag" below.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+D: Dropped Packet Flag::</span><br><span style="color: hsl(120, 100%, 40%);">+Set in an IN packet if the FPGA discarded an OUT packet because its timestamp</span><br><span style="color: hsl(120, 100%, 40%);">+had already passed.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+S: Start of Burst Flag::</span><br><span style="color: hsl(120, 100%, 40%);">+Set in an OUT packet if the data is the first segment of what is logically a</span><br><span style="color: hsl(120, 100%, 40%);">+continuous burst of data. Must be zero in IN packets.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+E: End of Burst Flag::</span><br><span style="color: hsl(120, 100%, 40%);">+Set in an OUT packet if the data is the last segment of what is logically a</span><br><span style="color: hsl(120, 100%, 40%);">+continuous burst of data. Must be zero in IN packets. Underruns are not</span><br><span style="color: hsl(120, 100%, 40%);">+reported when the FPGA runs out of samples between bursts.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+RSSI: 6-bit Received Strength Signal Indicator::</span><br><span style="color: hsl(120, 100%, 40%);">+Must be zero in OUT packets. In IN packets, indicates RSSI as reported by front</span><br><span style="color: hsl(120, 100%, 40%);">+end. FIXME The format and interpretation are to be determined.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Chan: 5-bit logical channel number::</span><br><span style="color: hsl(120, 100%, 40%);">+Channel number 0x1f is reserved for control information. See "Control Channel"</span><br><span style="color: hsl(120, 100%, 40%);">+below. Other channels are "data channels". Each data channel is logically</span><br><span style="color: hsl(120, 100%, 40%);">+independent of the others. A data channel payload field contains a sequence of</span><br><span style="color: hsl(120, 100%, 40%);">+homogeneous samples. The format of the samples is determined by the</span><br><span style="color: hsl(120, 100%, 40%);">+configuration associated with the given channel. It is often the case that the</span><br><span style="color: hsl(120, 100%, 40%);">+payload field contains 32-bit complex samples, each containing 16-bit real and</span><br><span style="color: hsl(120, 100%, 40%);">+imaginary components.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Tag::</span><br><span style="color: hsl(120, 100%, 40%);">+4-bit tag for matching IN packets with OUT packets.</span><br><span style="color: hsl(120, 100%, 40%);">+//FIXME, write more...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Payload Len::</span><br><span style="color: hsl(120, 100%, 40%);">+9-bit field that specifies the length of the payload field in bytes. Must be in</span><br><span style="color: hsl(120, 100%, 40%);">+the range 0 to 504 inclusive.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Timestamp: 32-bit timestamp::</span><br><span style="color: hsl(120, 100%, 40%);">+On IN packets, the timestamp indicates the time at which the first sample of the</span><br><span style="color: hsl(120, 100%, 40%);">+packet was produced by the A/D converter(s) for that channel. On OUT packets,</span><br><span style="color: hsl(120, 100%, 40%);">+the timestamp specifies the time at which the first sample in the packet should</span><br><span style="color: hsl(120, 100%, 40%);">+go out the D/A converter(s) for that channel. If a packet reaches the head of</span><br><span style="color: hsl(120, 100%, 40%);">+the transmit queue, and the current time is later than the timestamp, an error</span><br><span style="color: hsl(120, 100%, 40%);">+is assumed to have occurred and the packet is discarded. As a special case, the</span><br><span style="color: hsl(120, 100%, 40%);">+timestamp 0xffffffff is interpreted as "Now".</span><br><span style="color: hsl(120, 100%, 40%);">+The time base is a free running 32-bit counter that is incremented by the A/D</span><br><span style="color: hsl(120, 100%, 40%);">+sample-clock.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Payload::</span><br><span style="color: hsl(120, 100%, 40%);">+Variable length field Length is specified by the Payload Len field.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Padding::</span><br><span style="color: hsl(120, 100%, 40%);">+This field is 504 - Payload Len bytes long, and its content is unspecified.</span><br><span style="color: hsl(120, 100%, 40%);">+This field pads the packet out to a constant 512 bytes.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+===== "Data Channel" payload format</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If `Chan != 0x1f`, the packet is a "data packet" and the payload is a sequence of</span><br><span style="color: hsl(120, 100%, 40%);">+homogeneous samples. The format of the samples is determined by the</span><br><span style="color: hsl(120, 100%, 40%);">+configuration associated with the given channel. It is often the case that the</span><br><span style="color: hsl(120, 100%, 40%);">+payload field contains 32-bit complex samples, each containing 16-bit real and</span><br><span style="color: hsl(120, 100%, 40%);">+imaginary components.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+===== "Control Channel" payload format</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+If `Chan == 0x1f`, the packet is a "control packet". The control channel payload</span><br><span style="color: hsl(120, 100%, 40%);">+consists of a sequence of 0 or more sub-packets.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Each sub-packet starts on a 32-bit boundary, and consists of an 8-bit Opcode</span><br><span style="color: hsl(120, 100%, 40%);">+field, an 8-bit Length field, Length bytes of arguments, and 0, 1, 2 or 3 bytes</span><br><span style="color: hsl(120, 100%, 40%);">+of padding to align the tail of the sub-packet to a 32-bit boundary.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Control channel packets shall be processed at the head of the queue, and shall</span><br><span style="color: hsl(120, 100%, 40%);">+observe the timestamp semantics described above.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+===== General sub-packet format</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-//-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | Length | <length bytes> ... |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-//-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+===== Specific sub-packet formats</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+RID: 6-bit Request-ID::</span><br><span style="color: hsl(120, 100%, 40%);">+Copied from request sub-packet into corresponding reply sub-packet. RID allows</span><br><span style="color: hsl(120, 100%, 40%);">+the host to match requests and replies.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Reg Number::</span><br><span style="color: hsl(120, 100%, 40%);">+10-bit Register Number.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Ping Fixed Length::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_PING_FIXED</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 2 | RID | Ping Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Ping Fixed Length Reply::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_PING_FIXED_REPLY</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 2 | RID | Ping Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Write Register::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_WRITE_REG</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 6 | mbz | Reg Number |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Register Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Write Register Masked::</span><br><span style="color: hsl(120, 100%, 40%);">+Only the register bits that correspond to 1's in the mask are written</span><br><span style="color: hsl(120, 100%, 40%);">+with the new value. `REG[Num] = (REG[Num] & ~Mask) | (Value & Mask)`</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_WRITE_REG_MASKED</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 10 | mbz | Reg Number |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Register Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Mask Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Read Register::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_READ_REG</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 2 | RID | Reg Number |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Read Register Reply::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_READ_REG_REPLY</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 6 | RID | Reg Number |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Register Value |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+I2C Write::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_I2C_WRITE</span><br><span style="color: hsl(120, 100%, 40%);">+* I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(120, 100%, 40%);">+* Data: The bytes to write to the I2C bus</span><br><span style="color: hsl(120, 100%, 40%);">+* Length: Length of Data + 2</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | Length | mbz | I2C Addr |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Data ... .</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+I2C Read::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_I2C_READ</span><br><span style="color: hsl(120, 100%, 40%);">+* I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(120, 100%, 40%);">+* Nbytes: Number of bytes to read from I2C bus</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 3 | RID | mbz | I2C Addr |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Nbytes | unspecified padding |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+I2C Read Reply::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_I2C_READ_REPLY</span><br><span style="color: hsl(120, 100%, 40%);">+* I2C Addr: 7-bit I2C address</span><br><span style="color: hsl(120, 100%, 40%);">+* Data: Length - 2 bytes of data read from I2C bus.</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | Length | RID | mbz | I2C Addr |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Data ... .</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SPI Write::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_SPI_WRITE</span><br><span style="color: hsl(120, 100%, 40%);">+* Enables: Which SPI enables to assert (mask)</span><br><span style="color: hsl(120, 100%, 40%);">+* Format: Specifies format of SPI data and Opt Header Bytes</span><br><span style="color: hsl(120, 100%, 40%);">+* Opt Header Bytes: 2-byte field containing optional Tx bytes; see Format</span><br><span style="color: hsl(120, 100%, 40%);">+* Data: The bytes to write to the SPI bus</span><br><span style="color: hsl(120, 100%, 40%);">+* Length: Length of Data + 6</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | Length | mbz |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Enables | Format | Opt Header Bytes |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Data ... .</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SPI Read::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_SPI_READ</span><br><span style="color: hsl(120, 100%, 40%);">+* Enables: Which SPI enables to assert (mask)</span><br><span style="color: hsl(120, 100%, 40%);">+* Format: Specifies format of SPI data and Opt Header Bytes</span><br><span style="color: hsl(120, 100%, 40%);">+* Opt Header Bytes: 2-byte field containing optional Tx bytes; see Format</span><br><span style="color: hsl(120, 100%, 40%);">+* Nbytes: Number of bytes to read from SPI bus.</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 7 | RID | mbz |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Enables | Format | Opt Header Bytes |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Nbytes | unspecified padding |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SPI Read Reply::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_SPI_READ_REPLY</span><br><span style="color: hsl(120, 100%, 40%);">+* Data: Length - 2 bytes of data read from SPI bus.</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | Length | RID | mbz |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Data ... .</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Delay::</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* Opcode: OP_DELAY</span><br><span style="color: hsl(120, 100%, 40%);">+* Ticks: 16-bit unsigned delay count</span><br><span style="color: hsl(120, 100%, 40%);">+* Delay Ticks clock ticks before executing next operation.</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+| Opcode | 2 | Ticks |</span><br><span style="color: hsl(120, 100%, 40%);">++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span>diff --git a/doc/manuals/chapters/trx-devices.adoc b/doc/manuals/chapters/trx-devices.adoc</span><br><span>index 10c8529..3c21e59 100644</span><br><span>--- a/doc/manuals/chapters/trx-devices.adoc</span><br><span>+++ b/doc/manuals/chapters/trx-devices.adoc</span><br><span>@@ -29,6 +29,8 @@</span><br><span> </span><br><span> The binary _osmo-trx-usrp1_ is used to drive this device, see <<backend_usrp1>>.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+include::./device-usrp-inband-signaling-usb.adoc[]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> [[dev_ettus_b200]]</span><br><span> === Ettus B200</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/14998">change 14998</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-trx/+/14998"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4d6ef1f54f3d6c5a73ce00dc4640bd698f96842b </div>
<div style="display:none"> Gerrit-Change-Number: 14998 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>