changeset 190:2d9b1d69862d

doc: RF calibration documents/notes moved into RF-cal subdir
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 23 Apr 2017 16:47:50 +0000
parents 425f16556e69
children 80bd2c652c46
files doc/CMU200-notes doc/RF-cal/CMU200-notes doc/RF-cal/VCXO-notes doc/VCXO_calibration
diffstat 4 files changed, 265 insertions(+), 265 deletions(-) [+]
line wrap: on
line diff
--- a/doc/CMU200-notes	Sun Apr 23 16:42:43 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-R&S CMU200 is the RF tester used for production RF calibration of FreeCalypso
-GSM devices.  The CMU200 can be operated in three ways: manually via the front
-panel, programmatically via GPIB and programmatically via SCPI commands over
-RS-232.  GPIB is the industry standard, but for FreeCalypso the Mother has
-adopted the RS-232 control interface method instead in order to avoid the
-exotic hardware and equally exotic drivers and libraries required for GPIB:
-using the RS-232 interface requires absolutely no special hardware or drivers
-or libraries, just userspace C code without any dependencies talking to a
-serial port just like we do when communicating with Calypso target serial ports.
-
-Initialization commands
-=======================
-
-Our Test System Interface Daemon for the CMU200 will issue the following SCPI
-commands to the instrument on start-up:
-
-*SEC 0
-*RST;*OPC?
-SYST:NONV:DIS
-SYST:REM:ADDR:SEC 1,"RF_NSig"
-SYST:REM:ADDR:SEC 2,"GSM900MS_NSig"
-SYST:REM:ADDR:SEC 3,"GSM1800MS_NSig"
-SYST:REM:ADDR:SEC 4,"GSM1900MS_NSig"
-SYST:REM:ADDR:SEC 5,"GSM850MS_NSig"
-
-VCXO calibration
-================
-
-When commanded to prepare for VCXO calibration, our TSID will command the
-CMU200 as follows:
-
-*SEC 2
-RFAN:CHAN 40CH
-RFAN:TSEQ GSM5
-
-Command to read frequency offset:
-
-READ:MOD?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/RF-cal/CMU200-notes	Sun Apr 23 16:47:50 2017 +0000
@@ -0,0 +1,38 @@
+R&S CMU200 is the RF tester used for production RF calibration of FreeCalypso
+GSM devices.  The CMU200 can be operated in three ways: manually via the front
+panel, programmatically via GPIB and programmatically via SCPI commands over
+RS-232.  GPIB is the industry standard, but for FreeCalypso the Mother has
+adopted the RS-232 control interface method instead in order to avoid the
+exotic hardware and equally exotic drivers and libraries required for GPIB:
+using the RS-232 interface requires absolutely no special hardware or drivers
+or libraries, just userspace C code without any dependencies talking to a
+serial port just like we do when communicating with Calypso target serial ports.
+
+Initialization commands
+=======================
+
+Our Test System Interface Daemon for the CMU200 will issue the following SCPI
+commands to the instrument on start-up:
+
+*SEC 0
+*RST;*OPC?
+SYST:NONV:DIS
+SYST:REM:ADDR:SEC 1,"RF_NSig"
+SYST:REM:ADDR:SEC 2,"GSM900MS_NSig"
+SYST:REM:ADDR:SEC 3,"GSM1800MS_NSig"
+SYST:REM:ADDR:SEC 4,"GSM1900MS_NSig"
+SYST:REM:ADDR:SEC 5,"GSM850MS_NSig"
+
+VCXO calibration
+================
+
+When commanded to prepare for VCXO calibration, our TSID will command the
+CMU200 as follows:
+
+*SEC 2
+RFAN:CHAN 40CH
+RFAN:TSEQ GSM5
+
+Command to read frequency offset:
+
+READ:MOD?
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/RF-cal/VCXO-notes	Sun Apr 23 16:47:50 2017 +0000
@@ -0,0 +1,227 @@
+How to calibrate the VCXO on your FreeCalypso development board
+===============================================================
+
+The process of calibrating the VCXO on a Calypso+Iota+Rita GSM MS consists of
+the following fundamental parts:
+
+* The antenna needs to be disconnected and the FreeCalypso device's RF output
+  (SMA on the FCDEV3B) needs to be connected to an RF test station such as an
+  R&S CMU200.
+
+* The DUT is commanded to transmit semi-continuously as if it were transmitting
+  on TCH: Tx in one timeslot out of 8, but with the DUT running its own notion
+  of the TDMA frame not synchronized to anything, and keep transmitting
+  endlessly in 1/8 out of every 4.615 ms.
+
+* The RF test station connected to the DUT is used in the RF analyzer mode to
+  measure the frequency offset of the DUT's signal, relative to the ideal uplink
+  frequency corresponding to the selected ARFCN.
+
+* The above frequency offset measurement is performed with the AFC DAC on the
+  Calypso device set to different values, the results of the initial
+  measurements are used to guide some additional measurements, some computations
+  are made from these results, and the computed values are written into the
+  FreeCalypso device's FFS.
+
+This procedure is meant to be automated by way of a program that talks both to
+the FreeCalypso DUT and to the RF test station and orchestrates all of the
+measurement and computation steps, but until this program gets written (we
+weren't able to get a hold of TI's original, hence we have to develop our own),
+use the following instructions to perform the VCXO calibration procedure
+manually.  You still need a CMU200 or equivalent, though - it is not possible
+to do any kind of calibration on a Calypso device by itself, without connecting
+it to some appropriate RF test equipment.
+
+Reference documentation
+=======================
+
+We have the following two TI documents which describe some of the RF calibration
+procedures including the one for the VCXO:
+
+ftp://ftp.freecalypso.org/pub/GSM/Calypso/rf_calibration.pdf
+
+https://www.freecalypso.org/LoCosto-docs/Production%20test%20and%20calibration/i_sample_rf_test_and_calibration_13_03_04_01991%20-%20v026.pdf
+
+Unfortunately neither of them corresponds to the exact evolutionary time point
+of interest to us: the first one corresponds to some chipset much earlier than
+the one we are working with, and to firmware versions much earlier than ours,
+whereas the second one is for TI's later LoCosto chipset.
+
+Commanding the DUT to transmit semi-continuously
+================================================
+
+There is only one VCXO calibration that is subsequently used for all bands in
+normal MS operation.  Both of the calibration instruction documents above
+instruct the operator to run the Tx in GSM900 mode on ARFCN 40, hence we shall
+do likewise until and unless we find some good reason to do differently.
+
+Issue the following commands through fc-tmsh to start the semi-continuous Tx:
+
+tms 1		# enter RF Test Mode
+rfpw 7 6 0	# select GSM 900+1800 band pair, GSM900 band within the pair
+rfpw 2 40	# set ARFCN to 40
+rfpw 8 0	# disable AFC algorithm, i.e., control the AFC DAC manually
+txpw 1 12	# Tx power level
+rfe 3		# start Rx & Tx without network sync
+
+WARNING: Before issuing the above commands, ensure that the antenna is
+disconnected and that the RF output will be going into your test equipment,
+not on the air!  Do not EVER issue these commands with a real antenna connected,
+unless your intent is to operate a rogue transmitter or jammer.
+
+At this point your CMU200 or equivalent should detect the uplink signal
+generated by the DUT (on the CMU200 one needs to set TSC to 5, dunno about
+other test equipment), and you should see some frequency offset.
+
+The actual calibration procedure
+================================
+
+1. Set the AFC DAC to -2048:
+
+   rfpw 9 -2048
+
+   and measure the frequency offset.  Note it down.
+
+2. Set the AFC DAC to +2048:
+
+   rfpw 9 2048
+
+   and again measure the frequency offset.  Note it down.
+
+Now you need to create an ASCII text file with your frequency offset
+measurements.  Each line represents one measurement and consists of two fields:
+the first field is the DAC value and the second field is the measured frequency
+offset in Hz.  On my FCDEV3B S/N 001 the first two measurements were:
+
+-2048	-30008
++2048	+21394
+
+Next you need to apply a linear model to the VCXO frequency offset as a function
+of the DAC input: if x is the DAC value and F is the resulting frequency offset,
+then the linear model is F = ax + b, where a and b need to be determined from
+two measured points (x1, F1) and (x2, F2).  Then once you have a and b, find the
+x value that should produce F = 0.  The fc-vcxo-linear utility will do this math
+for you: run it with the name of your text file with measurements as its only
+argument.
+
+With my measurements, the DAC_CENTER value computed by fc-vcxo-linear is 343.
+However, the linear model is not perfect, thus when you write this computed
+value into the DAC with the rfpw 9 command, the resulting frequency offset on
+the CMU200 screen may be quite far from 0.
+
+TI's instructions in the LoCosto document direct the calibration operator to do
+two more measurements at DAC_CENTER-100 and DAC_CENTER+100, where DAC_CENTER is
+the value we just computed by applying the linear model to the first two
+measurements.  However, in my case the frequency offset at DAC=343 (DAC_CENTER)
+was so negative that at DAC=443 (DAC_CENTER+100) it was still negative - and I
+assume that TI's intent was to capture a close range around the zero crossing.
+
+Therefore, when I get to writing the automated calibration program, I intend to
+change this part of the algorithm as follows: instead of adding or subtracting
+100 right now, first do an rfpw 9 with the DAC_CENTER value as computed from
+the linear model, make a frequency offset measurement, and see if it is negative
+or positive.  Then step the DAC value in the appropriate direction by some
+reasonable increment (e.g., 100) until the frequency offset changes sign.  Then
+take the two DAC values closest to the output frequency offset sign change.
+
+After doing the above, my measurement notes file became:
+
+-2048	-30008
++2048	+21394
+443	-669
+543	634
+
+This file needs to contain all four measurements, with the first two being at
+the extreme DAC values and with the second two hugging the empirically located
+zero crossing, when you feed it to the next step:
+
+fc-vcxo-param myvcxo.meas
+
+The fc-vcxo-param utility will compute the final math steps to produce the
+actual calibration values which will need to be uploaded to the FreeCalypso
+device and stored in its FFS.  With my measurements above, I got the following
+output:
+
+rf_table afcparams
+
+      3434	# Psi_sta_inv
+        15	# Psi_st
+   1000341	# Psi_st_32
+      4293	# Psi_st_inv
+
+      3954	# DAC_INIT * 8
+     -5860	# DAC_MIN * 8
+     11351	# DAC_MAX * 8
+      2560	# snr_thr
+
+# DAC_INIT: rfpw 10 494
+
+The output from fc-vcxo-param is in the rf_table format which our implementation
+of the rftw command takes as input, and the latter is the fc-tmsh command which
+you will need to issue in order to send this table to the FreeCalypso firmware
+in the DUT.
+
+Explanation of the numbers:
+
+* The Psi constants are computed from the slope of the VCXO, and are
+  subsequently used for the steering: when the DSP reports a particular
+  frequency offset (in the form of an angle in radians), by how much should the
+  DAC value be adjusted?  The slope I use for computing these Psi constants is
+  the one from the first two measurements at the extreme DAC values, as the
+  LoCosto document seems to indicate.
+
+* DAC_INIT is the DAC value at which the resulting frequency offset should be 0;
+  it is computed per the linear model from the second pair of measurements.
+
+* DAC_MIN and DAC_MAX are the DAC values which should produce frequency offsets
+  of -15 and +15 ppm, respectively, according to the LoCosto document.  I
+  compute them per the linear model from the first pair of measurements (the
+  extreme DAC ones), as that is what the LoCosto document says.
+
+* The SNR threshold is a constant that never needs to change.
+
+The 3 dac_* values in the afcparams structure are stored in the times 8 form.
+Examination of the afcparams values read out of several Openmoko-made GTA02
+units shows that the low 3 bits aren't necessarily zeros, indicating that TI's
+calibration program probably multiplied by 8 before converting from floating
+point to integer; I do likewise in fc-vcxo-param.
+
+Examination of the same afcparams values read out of Openmoko-made units also
+shows that the center, min and max DAC values do vary quite a bit from one unit
+to the next, whereas the Psi constants change very little.  The Psi constants
+which my program computed from my manual measurements on FCDEV3B S/N 001 are in
+the same range as those read out of Openmoko-made units, which is definitely a
+reassuring sign.
+
+Writing your VCXO calibration into FFS
+======================================
+
+Save the fc-vcxo-param output in a file, e.g.:
+
+fc-vcxo-param myvcxo.meas myvcxo.param
+
+Upload the generated afcparams table to your FreeCalypso device:
+
+rftw 9 myvcxo.param
+
+There is one more variable in the firmware, outside of the afcparams structure,
+which also holds the DAC_INIT value.  Set it with an rfpw 10 command as
+instructed in the last comment line emitted by fc-vcxo-param; in my case it was:
+
+rfpw 10 494
+
+Now save all of these values in the non-volatile flash file system:
+
+me 102
+me 103
+
+Cleaning up
+===========
+
+To shut off the transmitter you started earlier, issue this command:
+
+rfe 0
+
+Now power off your FreeCalypso device, disconnect the RF test setup, connect the
+antenna back, insert a SIM, do a fresh boot and see if you can connect to a real
+live GSM network with your VCXO calibration!
--- a/doc/VCXO_calibration	Sun Apr 23 16:42:43 2017 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,227 +0,0 @@
-How to calibrate the VCXO on your FreeCalypso development board
-===============================================================
-
-The process of calibrating the VCXO on a Calypso+Iota+Rita GSM MS consists of
-the following fundamental parts:
-
-* The antenna needs to be disconnected and the FreeCalypso device's RF output
-  (SMA on the FCDEV3B) needs to be connected to an RF test station such as an
-  R&S CMU200.
-
-* The DUT is commanded to transmit semi-continuously as if it were transmitting
-  on TCH: Tx in one timeslot out of 8, but with the DUT running its own notion
-  of the TDMA frame not synchronized to anything, and keep transmitting
-  endlessly in 1/8 out of every 4.615 ms.
-
-* The RF test station connected to the DUT is used in the RF analyzer mode to
-  measure the frequency offset of the DUT's signal, relative to the ideal uplink
-  frequency corresponding to the selected ARFCN.
-
-* The above frequency offset measurement is performed with the AFC DAC on the
-  Calypso device set to different values, the results of the initial
-  measurements are used to guide some additional measurements, some computations
-  are made from these results, and the computed values are written into the
-  FreeCalypso device's FFS.
-
-This procedure is meant to be automated by way of a program that talks both to
-the FreeCalypso DUT and to the RF test station and orchestrates all of the
-measurement and computation steps, but until this program gets written (we
-weren't able to get a hold of TI's original, hence we have to develop our own),
-use the following instructions to perform the VCXO calibration procedure
-manually.  You still need a CMU200 or equivalent, though - it is not possible
-to do any kind of calibration on a Calypso device by itself, without connecting
-it to some appropriate RF test equipment.
-
-Reference documentation
-=======================
-
-We have the following two TI documents which describe some of the RF calibration
-procedures including the one for the VCXO:
-
-ftp://ftp.freecalypso.org/pub/GSM/Calypso/rf_calibration.pdf
-
-https://www.freecalypso.org/LoCosto-docs/Production%20test%20and%20calibration/i_sample_rf_test_and_calibration_13_03_04_01991%20-%20v026.pdf
-
-Unfortunately neither of them corresponds to the exact evolutionary time point
-of interest to us: the first one corresponds to some chipset much earlier than
-the one we are working with, and to firmware versions much earlier than ours,
-whereas the second one is for TI's later LoCosto chipset.
-
-Commanding the DUT to transmit semi-continuously
-================================================
-
-There is only one VCXO calibration that is subsequently used for all bands in
-normal MS operation.  Both of the calibration instruction documents above
-instruct the operator to run the Tx in GSM900 mode on ARFCN 40, hence we shall
-do likewise until and unless we find some good reason to do differently.
-
-Issue the following commands through fc-tmsh to start the semi-continuous Tx:
-
-tms 1		# enter RF Test Mode
-rfpw 7 6 0	# select GSM 900+1800 band pair, GSM900 band within the pair
-rfpw 2 40	# set ARFCN to 40
-rfpw 8 0	# disable AFC algorithm, i.e., control the AFC DAC manually
-txpw 1 12	# Tx power level
-rfe 3		# start Rx & Tx without network sync
-
-WARNING: Before issuing the above commands, ensure that the antenna is
-disconnected and that the RF output will be going into your test equipment,
-not on the air!  Do not EVER issue these commands with a real antenna connected,
-unless your intent is to operate a rogue transmitter or jammer.
-
-At this point your CMU200 or equivalent should detect the uplink signal
-generated by the DUT (on the CMU200 one needs to set TSC to 5, dunno about
-other test equipment), and you should see some frequency offset.
-
-The actual calibration procedure
-================================
-
-1. Set the AFC DAC to -2048:
-
-   rfpw 9 -2048
-
-   and measure the frequency offset.  Note it down.
-
-2. Set the AFC DAC to +2048:
-
-   rfpw 9 2048
-
-   and again measure the frequency offset.  Note it down.
-
-Now you need to create an ASCII text file with your frequency offset
-measurements.  Each line represents one measurement and consists of two fields:
-the first field is the DAC value and the second field is the measured frequency
-offset in Hz.  On my FCDEV3B S/N 001 the first two measurements were:
-
--2048	-30008
-+2048	+21394
-
-Next you need to apply a linear model to the VCXO frequency offset as a function
-of the DAC input: if x is the DAC value and F is the resulting frequency offset,
-then the linear model is F = ax + b, where a and b need to be determined from
-two measured points (x1, F1) and (x2, F2).  Then once you have a and b, find the
-x value that should produce F = 0.  The fc-vcxo-linear utility will do this math
-for you: run it with the name of your text file with measurements as its only
-argument.
-
-With my measurements, the DAC_CENTER value computed by fc-vcxo-linear is 343.
-However, the linear model is not perfect, thus when you write this computed
-value into the DAC with the rfpw 9 command, the resulting frequency offset on
-the CMU200 screen may be quite far from 0.
-
-TI's instructions in the LoCosto document direct the calibration operator to do
-two more measurements at DAC_CENTER-100 and DAC_CENTER+100, where DAC_CENTER is
-the value we just computed by applying the linear model to the first two
-measurements.  However, in my case the frequency offset at DAC=343 (DAC_CENTER)
-was so negative that at DAC=443 (DAC_CENTER+100) it was still negative - and I
-assume that TI's intent was to capture a close range around the zero crossing.
-
-Therefore, when I get to writing the automated calibration program, I intend to
-change this part of the algorithm as follows: instead of adding or subtracting
-100 right now, first do an rfpw 9 with the DAC_CENTER value as computed from
-the linear model, make a frequency offset measurement, and see if it is negative
-or positive.  Then step the DAC value in the appropriate direction by some
-reasonable increment (e.g., 100) until the frequency offset changes sign.  Then
-take the two DAC values closest to the output frequency offset sign change.
-
-After doing the above, my measurement notes file became:
-
--2048	-30008
-+2048	+21394
-443	-669
-543	634
-
-This file needs to contain all four measurements, with the first two being at
-the extreme DAC values and with the second two hugging the empirically located
-zero crossing, when you feed it to the next step:
-
-fc-vcxo-param myvcxo.meas
-
-The fc-vcxo-param utility will compute the final math steps to produce the
-actual calibration values which will need to be uploaded to the FreeCalypso
-device and stored in its FFS.  With my measurements above, I got the following
-output:
-
-rf_table afcparams
-
-      3434	# Psi_sta_inv
-        15	# Psi_st
-   1000341	# Psi_st_32
-      4293	# Psi_st_inv
-
-      3954	# DAC_INIT * 8
-     -5860	# DAC_MIN * 8
-     11351	# DAC_MAX * 8
-      2560	# snr_thr
-
-# DAC_INIT: rfpw 10 494
-
-The output from fc-vcxo-param is in the rf_table format which our implementation
-of the rftw command takes as input, and the latter is the fc-tmsh command which
-you will need to issue in order to send this table to the FreeCalypso firmware
-in the DUT.
-
-Explanation of the numbers:
-
-* The Psi constants are computed from the slope of the VCXO, and are
-  subsequently used for the steering: when the DSP reports a particular
-  frequency offset (in the form of an angle in radians), by how much should the
-  DAC value be adjusted?  The slope I use for computing these Psi constants is
-  the one from the first two measurements at the extreme DAC values, as the
-  LoCosto document seems to indicate.
-
-* DAC_INIT is the DAC value at which the resulting frequency offset should be 0;
-  it is computed per the linear model from the second pair of measurements.
-
-* DAC_MIN and DAC_MAX are the DAC values which should produce frequency offsets
-  of -15 and +15 ppm, respectively, according to the LoCosto document.  I
-  compute them per the linear model from the first pair of measurements (the
-  extreme DAC ones), as that is what the LoCosto document says.
-
-* The SNR threshold is a constant that never needs to change.
-
-The 3 dac_* values in the afcparams structure are stored in the times 8 form.
-Examination of the afcparams values read out of several Openmoko-made GTA02
-units shows that the low 3 bits aren't necessarily zeros, indicating that TI's
-calibration program probably multiplied by 8 before converting from floating
-point to integer; I do likewise in fc-vcxo-param.
-
-Examination of the same afcparams values read out of Openmoko-made units also
-shows that the center, min and max DAC values do vary quite a bit from one unit
-to the next, whereas the Psi constants change very little.  The Psi constants
-which my program computed from my manual measurements on FCDEV3B S/N 001 are in
-the same range as those read out of Openmoko-made units, which is definitely a
-reassuring sign.
-
-Writing your VCXO calibration into FFS
-======================================
-
-Save the fc-vcxo-param output in a file, e.g.:
-
-fc-vcxo-param myvcxo.meas myvcxo.param
-
-Upload the generated afcparams table to your FreeCalypso device:
-
-rftw 9 myvcxo.param
-
-There is one more variable in the firmware, outside of the afcparams structure,
-which also holds the DAC_INIT value.  Set it with an rfpw 10 command as
-instructed in the last comment line emitted by fc-vcxo-param; in my case it was:
-
-rfpw 10 494
-
-Now save all of these values in the non-volatile flash file system:
-
-me 102
-me 103
-
-Cleaning up
-===========
-
-To shut off the transmitter you started earlier, issue this command:
-
-rfe 0
-
-Now power off your FreeCalypso device, disconnect the RF test setup, connect the
-antenna back, insert a SIM, do a fresh boot and see if you can connect to a real
-live GSM network with your VCXO calibration!