FW410

From FreeBoB

The very first BridgeCo product. Therefore it is no supprise it has some differences to the later products.

  • The AV/C model differs heavily from a BeBoB firmware.
    • 3 oPCR, 3 iPCR
      • oPCR[0]: I2S, 2 channels
      • oPCR[1]: I2S, 2 channels
      • oPCR[2]: MIDI, 2 channels, but only one channel is used for midi
      • iPCR[0]: I10S, 10 channels (Could also be a I8S, docu is not clear -> check the log file)
      • iPCR[1]: I2S, AC3
      • iPCR[2]: MIDI, 2 channels, but only one channel is used for midi

FW410 Startup ASYN only (Windows Driver) (http://freebob.sourceforge.net/download/fw410-startup-only-asyn-traffic.txt). Note this recording was done with a broken firespy. So most errors are not really errors.

Simple config rom read looks like this (http://freebob.sourceforge.net/download/fw410-configrom_access.png). Not again the same broken firespy has produced this recording. I'll do another with another firespy.

All 100ms there some status from the device on channel 31 to be seen.

PCR connection order

The order in which the windows driver connects to the pcr is

 oPCR[0] -> iso channel 2
 oPCR[1] -> iso channel 4
 iPCR[0] -> iso channel 1
 iPCR[2] -> iso channel 3

Bandwith allocation (Windows Driver)

The Windows driver does following bandwith allocation:

 0x1333 - 0x11eb = 0x148
 0x11eb - 0x1163 = 0x88
 0x1163 - 0x110b = 0x58
 0x110b - 0x10ff = 0xc
 0x10ff - 0x10f3 = 0xc
 0x10f3 - 0x10ab = 0x48

According the formula in 7.7 IEC61883-1 Ed.2 the smalles possible allocation is 1 * 32 + (0 + 3) * 4 = 44 bandwith allocation units (BWU).

 BWU = overhead_ID * C + (payload + K) * DR

where

 overhead_ID = 0b0001 for 32 BWU
 C = 32  
 K = 3
 DR = data rate coefficient, 16 for S100, 8 for S200, 4 for S400

It is not clear to me if those values make sense at all. They just look plain wrong.

test_fw410

Simple test program which tries to do just cmp. I'm not able to get any useful sequence to establish all connections (leaving the midi away)

 wagi@newton:~/src/libfreebob/tests$ ./test-fw410 1
 local node id 0
 remote node id 1
 libiec61883 warning: iec61883_cmp_calc_bandwidth: Failed to get the oMPR plug for node 0.
 libiec61883 warning: Established connection on channel 0.
 You may need to manually set the channel on the transmitting node.
  0 ->  1 iPCR[ 0]: bw = 2608, ch =  0
 libiec61883 warning: iec61883_cmp_calc_bandwidth: Failed to get the oMPR plug for node 0.
 libiec61883 warning: Failed to allocate bandwidth.
  0 ->  1 iPCR[ 1]: bw = 2608, ch = -1
 libiec61883 warning: Established connection on channel 1.
 You may need to manually set the channel on the receiving node.
  1 ->  0 oPCR[ 0]: bw = 1036, ch =  1
 libiec61883 warning: Established connection on channel 2.
 You may need to manually set the channel on the receiving node.
  1 ->  0 oPCR[ 1]: bw = 1036, ch =  2

PCR[2] cannot be used for cmp

 wagi@newton:~/src/libfreebob/tests$ ./test-fw410 1
 local node id 0
 remote node id 1
 libiec61883 warning: Established connection on channel 0.
 You may need to manually set the channel on the receiving node.
  1 ->  0 oPCR[ 0]: bw = 1036, ch =  0
 libiec61883 warning: Established connection on channel 1.
 You may need to manually set the channel on the receiving node.
  1 ->  0 oPCR[ 1]: bw = 1036, ch =  1
 libiec61883 error: Failed to get plug 2 for output node
  1 ->  0 oPCR[ 2]: bw =    0, ch = -1
 libiec61883 warning: iec61883_cmp_calc_bandwidth: Failed to get the oMPR plug for node 0.
 libiec61883 warning: Established connection on channel 2.
 You may need to manually set the channel on the transmitting node.
  0 ->  1 iPCR[ 0]: bw = 1036, ch =  2
 libiec61883 warning: iec61883_cmp_calc_bandwidth: Failed to get the oMPR plug for node 0.
 libiec61883 warning: Established connection on channel 3.
 You may need to manually set the channel on the transmitting node.
  0 ->  1 iPCR[ 1]: bw = 1036, ch =  3
 libiec61883 warning: iec61883_cmp_calc_bandwidth: Failed to get the oMPR plug for node 0.
 libiec61883 warning: Failed to calculate bandwidth.
  0 ->  1 iPCR[ 2]: bw =   -1, ch = -1

Without the bandwith calculation (iec61883_cmp_calc_bandwith) and using the max value seen with the windows driver (0x148) for all plugs I see following:

 wagi@newton:~/src/libfreebob/tests$ ./test-fw410 2
 local node id 1
 remote node id 2
 libiec61883 warning: Established connection on channel 0.
 You may need to manually set the channel on the receiving node.
  2 ->  1 oPCR[ 0]: bw = 1036, ch =  0
 libiec61883 warning: Established connection on channel 1.
 You may need to manually set the channel on the receiving node.
  2 ->  1 oPCR[ 1]: bw = 1036, ch =  1
 libiec61883 warning: Established connection on channel 2.
 You may need to manually set the channel on the transmitting node.
  1 ->  2 iPCR[ 0]: bw = 1036, ch =  2
 libiec61883 warning: Established connection on channel 3.
 You may need to manually set the channel on the transmitting node.
  1 ->  2 iPCR[ 1]: bw = 1036, ch =  3

This looks much better, we get a channel, but I don't see any iso packets for channel 0 and channel 1 on the bus.