Auteursrecht c 2009, Michael Van den Broeck, Cypress Semiconductor ° De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopiëren voor persoonlijk gebruik. Elk ander gebruik valt onder de strikte beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van tekstdelen uit deze scriptie. Versie: 5 Mei 2009
ii
Auteursrecht
Voorwoord Om mijn opleiding van Industrieel Ingenieur Elektronica-ICT met optie ICT te vervolledigen heb ik deze masterproef geschreven. Deze masterproef kon slechts tot stand komen dankzij de medewerking van vele mensen, maar vooral dankzij de rma Cypress Semiconductor die het onderwerp voor deze proef voorstelde. Daarom wil ik ook in eerste plaats mijn bedrijfspromotor, ing. Dirk Van Aken, uitdrukkelijk bedanken voor de professionele steun gedurende het volledige academiejaar. Eveneens zijn collega's, in bijzonder ing. Ken Vermeulen en ing. Floris Lambrechts. Uiteraard dank ik mijn hogeschoolpromotor ir. Jan Meel voor zijn wetenschappelijke ondersteuning en tips. Last but not least een dankjewel aan Jessica Van den Broeck voor het nalezen van de masterproef en mijn familie voor de mentale ondersteuning. Van den Broeck Michael
iv
Voorwoord
Abstract in het Nederlands Titel: Ontwerp van een LCMS demo camera met SpaceWire interfacing.
Situering Masterproef: Bij Cypress Semiconductor ontwikkelen ze CMOS-beeldsensoren die aan de behoeften van de klant worden aangepast. Het ontwerp van actieve pixelsensoren voor specieke toepassingen helpt de klant om unieke producten met state-of-the-art prestaties te creëren. Ons product is de LCMS (Low Cost and low Mass Startracker) CMOS-beeldsensor, ontworpen voor navigatie doeleinden in de ruimtevaartindustrie. De sensor wordt gebruikt als StarTracker, een instrument dat instaat voor de oriëntatiebepaling van de satelliet. De masterproef bestaat erin een PCB ontwerp te maken voor de demo camera en een software driver in C# te programmeren. Deze driver maakt een communicatie via het SpaceWire protocol tussen de demo camera en de PC. Daarnaast bezit deze driver controle software om de camera aan te sturen en te evalueren in BenchTools, een grasche user interface (GUI) van Cypress.
Doel Masterproef, uitwerking en resultaten: Het doel van de masterproef is het ontwerpen van een demo opstelling zodat klanten kunnen experimenteren met de sensor beschreven in de datasheet. Als theoretische achtergrond werd een literatuurstudie gedaan over CMOS-beeldsensoren en het communicatieprotocol SpaceWire. Ons startpunt bestond uit een bestaand PCB ontwerp met LCMS camera controle software dat in Java is geschreven. Er werd gevraagd de PCB te optimaliseren naar Cypress eisen welk resulteerde in 70 x 70 mm prototype. Na een revisie van het prototype ontstond v1.1 en lieten we deze nale versie fabriceren. Bij Cypress Semiconductor werkt men met Microsoft .NET framework. Daar de Java code hierin niet wordt ondersteund, moest de code geport worden naar C#. Voor de Java applicatie is er een driver voorzien die communiceert met SpaceWire. In C# is er een testprogramma geschreven om de functionaliteit te gebruiken. Nadat de communicatie gelegd is, bestond de opdracht erin de Java code, om de sensor aan te sturen, in te bouwen. De LCMS driver die hieruit ontstaat kan gebruikt worden in BenchTools, een software applicatie van Cypress dat als platform dient om sensoren te evalueren. Het resultaat is een Windows-based software applicatie waarin de LCMS demo camera geprogrammeerd en getest kan worden.
vi
Abstract in het Nederlands
Abstract in het Engels Title: Design of a LCMS demo camera with SpaceWire interfacing.
Thesis Location: Cypress Semiconductor develops custom CMOS image sensors designed to the needs of their customers. Application specic active pixel image sensor designs helps their customers to create unique products with state-of-the-art performance. Our product is the LCMS (Low Cost low Mass StarTracker) CMOS image sensor that is designed for navigation purposes in space environments. It is used as StarTracker, an instrument used in satellites to determine the position of the satellite in orbit. The master thesis includes a PCB design of the demo camera and programming a software driver in C#. This driver enables the communication between the demo camera and the PC by using the SpaceWire protocol. Next to this, this driver has control software to access the camera and to evaluate this in BenchTools, a graphical user interface (GUI) of Cypress.
Thesis goal, procedure and results: The purpose of this thesis is to design a standalone demo camera which will allow customers to evaluate the sensor as described in the datasheet. As theoretical background a literature study was done with respect to CMOS image sensor and the SpaceWire communication protocol. As starting point there was an existing PCB design with LCMS camera control software that is written in Java. The goal is to optimize this PCB to Cypress requirements which resulted in 70 x 70 mm prototype. After a revision of the prototype, v1.1 existed and we requested to manufacture this nal version. Cypress Semiconductor is supported by a Microsoft .NET framework. As .NET does not support the Java code, it needs to be proceeded in C#. In Java applications there is a driver provided to communicate with SpaceWire. In C# we have to build a test program to use this feature. The purpose existed into using the Java code to access the sensor after the connection was build. The LCMS driver can now be loaded into BenchTools, a software application developed by Cypress that serves as a platform to evaluate sensors. The result is a Windows-based software application where the LCMS demo camera can be programmed and tested.
viii
Abstract in het Engels
Short Summary Introduction The purpose of this thesis is to design a standalone demo camera with SpaceWire interfacing. This can be used in the future as demonstrator which will allow customers to evaluate the sensor as described in the datasheet. The LCMS is a technology demonstrator for a future low cost, low mass StarTracker characterized by very high levels of integration and therefore demanded a high level of on-chip functionality to reduce the StarTracker component count in space applications. A datasheet [1] is available that serves as a detailed specication of performance and functionality of the technology demonstration LCMS star tracker sensor. StarTrackers are used to measure the direction towards selected stars. This can be used in a satellite, for example to determine the orientation of the space vehicle. The satellite uses the SpaceWire communication protocol to communicate with the dierent parts on board. A demo will be established and this application will be simulated on the PC by using the SpaceWire-USB Brick. The result is available in Window-based software application that is presented by BenchTools.
CMOS imaging sensors The LCMS standalone demo camera holds a LCMS CMOS Active Pixel image Sensor (CMOS APS). It is developed as prototype in order to experiment with it. Afterwards the LCMS CMOS APS will be integrated on a StarTracker instead of a CCD image sensor. The sensor is a technology demonstrator for future highly-integrated sensor heads that enables StarTrackers to be built with smaller dimensions, lower mass, reduced system complexity, and lower power, while maintaining a minimal standard of performance. Active pixel sensor (APS) imagers have several advantages compared to CCD's. They can be produced more cost eectively, are smaller and use less power. The main properties that lead to benets for APS imagers are derived from the fact that APS imagers are manufactured on a less complicated and less expensive CMOS process and have an architecture that enables easier addressing of individual pixels, which is very attractive for StarTrackers in space applications.
x
Short Summary
Other major advantages of APS technology are a cheaper production process; they run on a single supply voltage or at least a low number of voltages; analog and digital signal processing can be included on the same chip (ampliers, A/D conversion, individual pixel or pixelgroup addressing ). Lower capacitive loading is needed on the driving lines and therefore less power consumption. If required, windowed readout (of a selected region of interest) can be applied, allowing further power reduction or higher speed readout. No blooming around saturated pixels. All the advantages facilitates a better performance of simultaneous detection in the FOV (eld of view) of objects with dierent brightness. Moreover APS images have better resistance to (cosmic) particle radiation. Though APS imagers also have disadvantages, such as a lower llfactor, lower quantum eciency, less UV response. Low UV response and low quantum eciency are disadvantages associated with the top layers on the chip which are there to provide interconnections. These layers tend to block and/or lter some of the incident light. The lower llfactor has mainly to do with the surface area required to give room for the CMOS read-out circuitry. The CMOS APS is a relatively young device and one may expect that for the technological disadvantages future technological solutions will be found.
SpaceWire SpaceWire is a communication network that is used onboard a spacecraft. It is designed to connect high data-rate sensors, large solid-state memories, processing units and the downlink telemetry subsystem providing an integrated onboard data-handling network. SpaceWire links are serial, high-speed (2 Mbits/sec to 400 Mbits/sec), bi-directional, fullduplex, point-to-pointdata-links, which connect together SpaceWire equipment. It is based on the DS-DE part of the IEEE-1355 standard combined with the TIA/EIA-644 Low Voltage Dierential Signalling (LVDS) standard. The SpaceWire standard covers the following protocol levels. Physical Level denes connectors, cables and EMC specications. Signal Level denes signal encoding, voltage levels, noise margins and data rates. Character Level denes the data and control characters used to manage the ow of data across a link. Exchange Level denes the protocol for link initialisation, ow control, fault detection and link restart. Packet Level denes how data is transmitted via a SpaceWire link is split up into packets. The following informative protocol levels are also provided. Network Level denes the form of routing switches used to build a network from SpaceWire links and how packets are transferred from a source node to a destination node across a network. Error Recovery Scheme provides recommendations for error detection, error recovery and error reporting. Application level denes his use onboard a spacecraft and other applications. The LCMS demo camera oers the SpaceWire interface for data output interface. The interface is fully SpaceWire-compliant but is restricted to a point-to-point use. The LCMS strictly serves as a slave device, operated at 10Mbps or 20Mbps, i.e. considerably lower than the SpaceWire standard's 400Mbps maximum. The LCMS's SpaceWire link can sustain full frame readout at
xi 5 frames per second, using data packing techniques to fold 12 bit pixel data into SpaceWire's 8 bit transport units.
PCB design The printed circuit board (PCB) is a component made of one or more layers of insulating material with electrical conductors. The insulator is typically made on the base of ber reinforced resins, ceramics, plastic, or some other dielectric materials. During manufacturing the portions of conductors that are not needed are etched o, leaving printed circuits that connect electronic components. The goal is to optimize the PCB to Cypress requirements which resulted in 70 x 70 mm prototype, the LCMS board v1.0. After a revision of the prototype, a nal v1.1 was created and used. PCB design can be challenging, time consuming, and very dicult to gure out how to get started. So we have decided our printed circuit board design into 3 sections: schematic design, PCB footprints and PCB layout. We followed the PCB design process to build our PCB. This design process/workow will give you a birds eye view of each step necessary to build the circuit design through assembly and nal test. For the PCB design we used Altium Designer Summer 2008 as software package. Tutorials [2] were used to build a professional PCB design.
Demo Software The software we wrote for the LCMS demo camera was written in the C# programming language. There Cypress supports only Microsoft .NET framework the existing Java must be ported in C#. The LCMS control software has been developed in Java and requires a native driver to be installed to communicate with SpaceWire. For C# there is not a driver provided so we had to build a test program to use this feature. The purpose existed into using the Java code to access the sensor after the SpaceWire connection was build. The LCMS driver can now be loaded into BenchTools, a software application developed by Cypress that serves as a platform to evaluate sensors. We discuss the demo software by explaining the most important functions of the code and techniques we used through the software design.
xii
Short Summary
Results and conclusion The two last parts of this research include evaluating the PCB and writing the demo software. To build the standalone demo camera, we have optimized the existing 110 x 130 mm PCB design of ESA to a 70 x 70 mm PCB design with Cypress requirements. Before a nal version could be manufactured, we had to made a prototype. Afterwards the PCB was ready to being tested. A few errors were noted. Therefore updates were done from v1.0 to v1.1. The schematic and PCB design was adjusted and this resulted in the LCMS board v 1.1 that can be used as demonstrator in the standalone demo camera. A communication protocol is required to guide the LCMS sensor of the demo software. This is the SpaceWire protocol. The functionality of this protocol is written in C# and is tested afterwards in the test program. This functionality can now be used at Cypress as Spacewire controller next to the two existing Ethernet-based sensor controllers. In this way sensors who communicate with SpaceWire will be recognized automatically in Benchtools and directed. The last assignment implied porting the existing Java code in C#. This is the LCMS driver. This driver is loaded in BenchTools where the sensor was programmed and tested. During the debugging of the LCMS driver an error was received with receiving the pixel data. One of the problems was the fact that the SpaceWire-USB Brick incorrectly worked. After reporting this problem to Star-Dundee and performing an update of the driver and rmware, pixel data could be received and an image could be formed. As the problem was only discovered at a late phase of this thesis, the result of the image recording in BenchTools has been left out. This problem will be examined further and eventually the demo software will be operational by the end of the academic year.
Inhoudsopgave Auteursrecht
i
Voorwoord
iii
Abstract in het Nederlands
v
Abstract in het Engels
vii
Short Summary
ix
Inhoudsopgave
xiii
Lijst met gebruikte afkortingen
xvii
Lijst van guren
xix
1 Inleiding
1
1.1
Algemene situering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
Cypress Semiconductor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
LCMS demo camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3.1
CMOS-beeldsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3.2
PCB ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.3.3
SpaceWire protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.3.4
Demo software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
Verder verloop van masterproeftekst . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.4
2 CMOS-beeldsensoren
7
xiv
INHOUDSOPGAVE
2.1
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2
LCMS CMOS-beeldsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.3
CMOS Active Pixel Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.1
Algemeen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3.2
CMOS-beeldsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.3.3
Het opvangen van licht in een CMOS-beeldsensor . . . . . . . . . . . . . .
12
2.3.4
n-well active pixels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.4
CCD-beeldsensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5
Vergelijking van CMOS en CCD . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5.1
Aan de hand van parameters . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.5.2
Voor -en nadelen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.5.3
Toepassingsgebied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.6
3 SpaceWire protocol
19
3.1
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2
SpaceWire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.1
Toepassingsgebieden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2.2
Geschiedenis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.2.3
De standaard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.2.4
Randeisen in ruimtemissies . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.2.5
Algemene werking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.2.6
Protocol stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.2.7
Fysisch niveau
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.2.8
Signaal niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.2.9
Karakter niveau
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.2.10 Exchange niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.2.11 Pakket niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.2.12 Netwerk niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.2.13 Toepassingsniveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.3
INHOUDSOPGAVE
xv
4 Demo camera ontwikkeling
41
4.1
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.2
Hardware ontwikkeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.2.1
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.2.2
Het PCB ontwerp proces . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.2.2.1
Denkwerk voor het ontwerp . . . . . . . . . . . . . . . . . . . . .
43
4.2.2.2
De voorbereiding . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2.2.3
PCB design setup . . . . . . . . . . . . . . . . . . . . . . . . . .
45
4.2.2.4
Routen van de PCB . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.2.2.5
Uitvoering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.2.2.6
Post Processing
. . . . . . . . . . . . . . . . . . . . . . . . . . .
47
Soldeertechniek voor SMD componenten . . . . . . . . . . . . . . . . . . .
48
Software ontwikkeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.3.1
Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.3.2
C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
4.3.3
Flowchart van de demo software . . . . . . . . . . . . . . . . . . . . . . .
50
4.3.4
Class1.cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
4.3.5
LCMS.cs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.3.5.1
StarDundee Brick . . . . . . . . . . . . . . . . . . . . . . . . . .
52
4.3.5.2
TestExample . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
4.3.5.3
LCMS:Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.3.5.4
CommSpW & Communication . . . . . . . . . . . . . . . . . . .
59
Analyse / Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
4.4.1
Het PCB ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
4.4.1.1
Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
4.4.1.2
Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
4.4.1.3
Revisie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
De demo software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
4.4.2.1
LCMS driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
4.4.2.2
BenchTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
4.2.3 4.3
4.4
4.4.2
xvi 4.5
INHOUDSOPGAVE Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Conclusie
69
71
5.1
Algemene conclusie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
5.2
Bedenkingen voor verder werk . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
A Bill of materials
73
B Schematisch LCMS board
77
C PCB LCMS board
79
D C-sharp functies
83
Bibliograe of Referenties
89
CD
91
Lijst met gebruikte afkortingen ADC Analog to Digital Converter API Application Programming Interface APS Active Pixel Sensor BER Bit Error Rate BOM Bill of Materials CCD Charge Coupled Device CMOS Complementary Metal Oxide Semiconductor DLL Dynamically Linked Library EMC Electromagnetic compatibility ESA European Space Agency ESD Electrostatic Discharge ESTEC European Space Research and Technology Centre FIFO First In First Out FOV Field of View FPGA Field Programmable Gate Array GUI Graphical User Interface
xviii
Lijst met gebruikte afkortingen
IDE Integrated Development Environment IEEE Institute of Electrical and Electronics Engineers IMEC Interuniversitair Micro-electronica Centrum ISO-OSI ISO Reference Model for Open Systems Interconnection JAXA Japan Aerospace Exploration Agency LCMS Low Cost Mass StarTracker LVDS Low Voltage Dierential Signaling LSB Least Signicant Bit MSB Most Signicant Bit NASA National Aeronautics and Space Administration OSI Open Systems Interconnection PCB Printed Circuit Board PECL Positive Emitter Coupled Logic PLCC Plastic Leaded Chip Carrier SLA Search-Less Algorithm SMD Surface-mounted device USB Universal Serial Bus UV Ultra Violet WARC World Administrative Radio Convence
L¼st van guren 1.1
Opstelling van de LCMS demo camera . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Algemene situering van de LCMS demo camera in blokdiagram . . . . . . . . . .
2
1.3
Het logo van Cypress Semiconductor . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.4
Voorstelling van een LCMS CMOS-beeldsensor . . . . . . . . . . . . . . . . . . .
3
1.5
Weergave van het PCB ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.6
Weergave van het C# testprogramma om met SpaceWire te communiceren . . .
5
2.1
LCMS complexiteit op systeem-niveau . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2
Architectuur van de LCMS chip . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Opbouw van een CMOS-beeldsensor . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.4
Flowchart: het nemen van een beeld in een CMOS-beeldsensor . . . . . . . . . .
11
2.5
Het schema en de opbouw van APS . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.6
Signalen in een APS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.7
Principe van een CCD chip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
3.1
StarTracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2
Vereenvoudigd blok van de StarTracker architectuur . . . . . . . . . . . . . . . .
20
3.3
Sterrenhemel (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.4
Sterrenhemel (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.5
SpaceWire interfacekabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.6
Earthcare: een observatiesatelliet . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.7
IEEEE 802.11/SpaceWire netwerk architectuur . . . . . . . . . . . . . . . . . . .
24
3.8
SpaceWire 9-pin D-type connector . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.9
Werkingsprincipe van SpaceWire . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
xx
LST VAN FIGUREN 3.10 Flowchart - tokensprincipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.11 OSI-model links, SpaceWire model rechts . . . . . . . . . . . . . . . . . . . . . .
29
3.12 Doorsnede SpaceWire bekabeling . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.13 Aansluiting van de 9-pin D-type SpaceWire connector . . . . . . . . . . . . . . .
30
3.14 Seriële punt-tot-punt datalink . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.15 LVDS principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.16 LVDS signaalniveaus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.17 LVDS operatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.18 Data-Strobe (DS) principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.19 SpaceWire data karakters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.20 SpaceWire controle karakters . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.21 SpaceWire timecode karakter . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.22 Verloop van een SpaceWire link . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.23 Pariteitsdekking bij foutdetectie (1) . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.24 Pariteitsdekking bij foutdetectie (2) . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.25 State diagram van een SpaceWire link . . . . . . . . . . . . . . . . . . . . . . . .
36
3.26 Herstarten van een SpaceWire link . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.27 SpaceWire netwerkconguratie . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.1
De LCMS demo camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.2
Het bestaande PCB ontwerp van ESA . . . . . . . . . . . . . . . . . . . . . . . .
42
4.3
Instellen van de ADC
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.4
PCB lay-out in 4 lagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.5
Het gemaakte PCB ontwerp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47
4.6
Solderen van een SMD weerstand of capaciteit . . . . . . . . . . . . . . . . . . . .
48
4.7
Flowchart van de demo software . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50
4.8
Debuggen van het PCB ontwerp met oscilloscoop . . . . . . . . . . . . . . . . . .
62
4.9
SpaceWire USB-Brick interface . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
4.10 Command-line-interface om de SpaceWire functionaliteit te testen
. . . . . . . .
64
4.11 GUI based application om SpaceWire pakketten te versturen en te ontvangen . .
65
4.12 Ontvangen van pixelwaarden die het beeld gaan vormen . . . . . . . . . . . . . .
67
LST VAN FIGUREN
xxi
4.13 LCMS sensor evalueren in BenchTools . . . . . . . . . . . . . . . . . . . . . . . .
68
A.1 Bill of materials deel 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
A.2 Bill of materials deel 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
A.3 Bill of materials deel 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
B.1 Schematisch LCMS board . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
C.1 PCB LCMS board voorkant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
C.2 PCB LCMS board achterkant . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
D.1 Flowchart van de LCMS demo software
83
. . . . . . . . . . . . . . . . . . . . . . .
xxii
LST VAN FIGUREN
Hoofdstuk 1
Inleiding Het doel van de masterproef is het ontwerpen van een LCMS1 standalone2 demo camera met SpaceWire interface. Deze kan in de toekomst dienen als demo opstelling zodat klanten kunnen experimenteren met de sensor beschreven in de datasheet. De masterproef is uitgevoerd voor het bedrijf Cypress Semiconductor die het onderwerp had voorgesteld.
Figuur 1.1: Opstelling van de LCMS demo camera. In g. 1.1 wordt de LCMS demo camera voorgesteld. LCMS is een chip ontwikkeld als demo om de ruimtevaart toepassing `StartTracker' ervan te demonstreren. Van de LCMS sensor is er een datasheet [1] beschikbaar die diende als een nadere specicatie van de prestaties en functionaliteit van de technologie. De StarTracker is een instrument dat instaat voor de oriëntatiebepaling van de satelliet welke gebruik maakt van het SpaceWire protocol om te communiceren met de verschillende onderdelen aan boord. We gaan een demo opstelling realiseren en deze toepassing simuleren op de PC door gebruik te maken van de SpaceWire-USB Brick [3]. Het resultaat volgt in een Windows-based Software Application dat gepresenteerd wordt in BenchTools3 . 1
LCMS: Low Cost and low Mass Startracker beeldsensor is een Startracker op chip (Cypress, B). Standalone: op zichzelf staand systeem dat enkel afhankelijk is van het besturingssyteem. 3 BenchTools: software dat ontworpen is door Cypress dat als platform dient om camera's aan te sturen. 2
2
Inleiding
1.1 Algemene situering
Figuur 1.2: Situering van de masterproef. In g. 1.2 is de situering van de LCMS demo camera grasch weergegeven. De demo camera ontwikkeling omvat zowel een hardware als software gedeelte. Om de communicatie tussen de hardware (1) en software (3) te voorzien is er het SpaceWire protocol (2), dat dient als communicatie protocol. Met de SpaceWire interface op de digitale camera kan deze door het gebruik van de SpaceWire-USB Brick verbonden worden met de USB interface op de PC. 1. Als hardware is er een bestaand PCB ontwerp (110 x 130 mm) ter beschikking. Deze PCB werd geoptimaliseerd tot het ontwerpen van een PCB (70 x 70 mm) volgens Cypress eisen. Dit geheel vormt een praktisch PCB dat geschikt is voor de klant als demo. 2. In de literatuurstudie is het communicatieprotocol SpaceWire geanalyseerd. Het vormt de basis om de communicatie in de software te implementeren. 3. De gekozen programmeertaal voor de software is C#4 . Bij Cypress werkt men in een Microsoft .NET framework omgeving.
• Er moest een testprogramma geschreven worden in C# om te kunnen communiceren met de SpaceWire-USB Brick zodat er een verbinding met de demo camera ontstaat. Hierna moest de functionaliteit van de bestaande Java code (camera controle software) omgezet worden in C# code om de sensor aan te sturen. Het resultaat van beiden is de LCMS driver. • Uit de LCMS driver wordt een DLL5 gegenereerd die we in BenchTools kunnen inladen. In BenchTools maken we de connectie en wordt de camera geprogrammeerd. BenchTools doet dienst als Windows-based Application platform, hierin kan men debuggen en de functionaliteit testen. Uit dit project kan er een demonstratiekit geleverd worden naar de klant toe, waarmee men de demo camera kan evalueren.
4 5
C# (uitgesproken als 'C sharp') is een objectgeoriënteerde programmeertaal ontwikkeld door Microsoft. DLL: `Dynamically Linked Library' een verzameling softwareroutines.
1.2 Cypress Semiconductor
3
1.2 Cypress Semiconductor
Figuur 1.3: Cypress Semiconductor.
Cypress Semiconductor (g. 1.3) is een wereldspeler op het gebied van CMOS digitale beeldsensoren voor verschillende applicaties zoals industriële visie, beeldverwerking op hoge snelheid, medische beeldvorming, beveiliging, militaire doeleinden en ruimtevaart. De ruimtevaart applicaties omvatten CMOS-beeldsensoren voor digitale zonnesensoren, StarTrackers, observatie camera's en wetenschappelijke instrumenten. Cypress levert kant en klare oplossingen van design tot manufacturing, test en customer support. De portfolio van Cypress Image Sensors bevat meer dan 50 custom producten en 10 standaard producten. Hiermee worden unieke producten met state-of-the-art6 prestaties afgeleverd.
1.3 LCMS demo camera 1.3.1 CMOS-beeldsensor Op mijn stagebedrijf Cypress Semiconductor was er een uitgebreide trainingscursus over de werking van CMOS-beeldsensoren. De volledige beschrijving en werking van de gebruikte CMOSbeeldsensor (g. 1.4) wordt in hoofdstuk 3.2.1 van de masterproef behandeld.
Figuur 1.4: LCMS CMOS-beeldsensor. 6
State of the art: het hoogste niveau van ontwikkeling, dat op een bepaald tijdstip is bereikt.
4
Inleiding
De markt van beeldsensoren is verdeeld in twee groepen. De ene groep is die van de traditionele CCD-beeldsensoren. Deze zijn al zo'n 30 jaar in ontwikkeling en beheersen het grootste deel van de markt. De andere groep is die van de CMOS-beeldsensoren. Hoewel CMOS-technologie reeds gebruikt werd voor CCD, heeft het tot op heden nog niet kunnen doorbreken. Dit omdat de CMOS-technologie niet aan dezelfde specicaties kon voldoen als CCD. Het ging dan voornamelijk om de beeldkwaliteit. [4] De voordelen die verbonden zijn aan het gebruik van CMOS-technologie zijn de volgende:
• Doordat het mogelijk is controle -en interfacecircuits mee in te bouwen op de chip, kan er heel wat plaats bespaard worden in de randelektronica die de chip aanstuurt. Hierdoor is de randelektronica van een CMOS-beeldsensor veel eenvoudiger dan zijn CCD-tegenhanger. • Het productieproces is vele malen goedkoper dan dat voor CCD. • Het fabriceren van prototypes voor testing gaat veel sneller. • CMOS sensoren geven direct een digitaal of analoog signaal dat vatbaar is voor interpretatie waardoor er minder elektronica nodig is in de rest van de camera. Met elektronica bedoelen we dan de sturing en bewerking van elk sensorsignaal van elke pixel tot een bruikbare elektrische puls met eventueel digitalisatie op de chip. • Bovendien gebruiken CMOS sensoren minder energie dan CCD sensoren. Dit maakt CMOS sensoren onder andere geschikt voor apparaten die niet te groot mogen zijn zoals mobiele telefoons.
1.3.2 PCB ontwerp De Europese ruimtevaartorganisatie ESA stelde Cypress Semiconductor een PCB ontwerp ter beschikking. Dit werd het vertrekpunt tot het ontwerpen en assembleren van een geoptimaliseerd PCB ontwerp, weergegeven in g. 1.5. In hoofdstuk 4.2 van de masterproef zal het volledige ontwerp beschreven worden. Het nieuwe ontwerp is tot stand gekomen met de software Altium Designer Summer 2008. Online tutorials [2] waren beschikbaar.
Figuur 1.5: PCB ontwerp.
1.3 LCMS demo camera
5
1.3.3 SpaceWire protocol Om de LCMS demo camera aan te sturen wordt er gebruik gemaakt van de SpaceWire interface. Hiervoor moet een volledige analyse gedaan worden van het SpaceWire protocol dat we in hoofdstuk 3 bespreken. SpaceWire is gebaseerd op snelle data transfer tussen Data Strobe links, volgens de IEEE Standaard 1355-1995. De SpaceWire standaard is ontwikkeld door ESTEC voor dataverbindingen van apparatuur aan boord van satellieten en toegepast in verscheidende wetenschappelijke ESA programma's.
1.3.4 Demo software De software is geschreven in een Microsoft .NET framework versie 1.1, meer bepaald Visual Studio7 en dit in combinatie met de bestaande applicatie Benchtools. Benchtools kan overweg met beschrijvingen van twee soorten ethernet-gebaseerde sensor controllers. Deze beschrijvingen zijn text les met applicatie-specieke parameters en worden `drivers' genoemd. Hiermee kan dan elke beeldsensor op een gemeenschappelijk netwerk geplaatst worden zodat deze geprogrammeerd en getest kunnen worden. Als eerste instantie voor de demo software moet er een driver gemaakt worden met specieke functies voor SpaceWire communicatie. Hiermee kan dan de basis functionaliteit van de bestaande Java code nagebouwd worden (beelden nemen, settings veranderen, etc.). Dit is de LCMS driver. Fig. 1.6 geeft het C# programma om de communicatie met SpaceWire te testen weer.
Figuur 1.6: SpaceWire-USB Brick tester.
Het volgende doel is om deze support voor SpaceWire in de applicatie BenchTools zelf te integreren, als een derde soort van sensor controller (naast de twee bestaande ethernet controllers). Tenslotte is er ook nog een idee om de parser8 van BenchTools zo uit te breiden dat deze driver les kan accepteren voor SpaceWire controllers.
7 8
Visual Studio is een programmeerontwikkelomgeving van Microsoft. Parser: een programma dat de syntax van een taal / programmeertaal controleert.
6
Inleiding
1.4 Verder verloop van masterproeftekst We beginnen met de theoretische achtergrond te geven over CMOS-beeldsensoren in hoofdstuk 2. Hierin wordt de gebruikte CMOS-beeldsensor van de LCMS demo camera besproken en worden de CCD -en CMOS-beeldsensoren vergeleken. De literatuurstudie van het gebruikte communicatie protocol SpaceWire wordt beschreven in hoofdstuk 3. Hierna volgt de ontwikkeling van de demo camera in hoofdstuk 4. In sectie 4.2 volgt het ontwerpen van het PCB ontwerp en in sectie 4.3 volgt gedetailleerd het ontstaan van de demo software. De eigen verdiensten worden geformuleerd in sectie 4.4 met bespreking van de behaalde resultaten. De masterproef wordt afgesloten in hoofdstuk 5 met het verwoorden van de algemene conclusie en bedenkingen voor verder werk. In de bijlagen kan men de componentenlijst terug vinden alsook de schema's van het gemaakte PCB ontwerp. De bijhorende CD bevat alle datasheets, handleidingen, documentatie en geschreven code die nodig was om de LCMS demo camera te realiseren.
Hoofdstuk 2
CMOS-beeldsensoren 2.1 Inleiding Er zijn twee technologieën op de markt, Complimentary Metal Oxide Semiconductor (CMOS) en Charge-Coupled Device (CCD) sensoren. In dit hoofdstuk leggen we de nadruk op de gebruikte LCMS CMOS Active Pxel image Sensor. Er volgt een beschrijving van deze beeldsensor en de architectuur ervan wordt getoond. Hierna volgt de opbouw, het werkingsprincipe en APS technologie ervan. Om toch het gebruik van CCD niet volledig weg te laten, dat buiten beschouwing van deze masterproef valt, vinden we het belangrijk om dit even aan te halen. Vervolgens gaan we beide beeldsensoren aan de hand van parameters vergelijken en de voor -en nadelen worden toegelicht. Ten slotte volgt een bespreking waar beide beeldsensoren algemeen worden toegepast.
2.2 LCMS CMOS-beeldsensor De LCMS standalone demo camera bezit als beeldsensor een LCMS CMOS Active Pixel image Sensor (CMOS APS). De LCMS StarTracker sensor is ontworpen door FillFactory NV (onderneming overgenomen door Cypress Semiconductor in 2004) onder het ESA contract 17235/03/NL/FM. Het is ontwikkeld als een prototype zodat ermee te geëxperimenteerd kan worden. Hierna kan deze geïntegreerd worden op een StarTracker in plaats van een CCDbeeldsensor te gebruiken. De LCMS is kleiner in afmetingen, heeft een lager gewicht en energieverbruik en de systeem complexiteit werd verminderd, terwijl zijn prestaties behouden moeten blijven. CMOS APS-beeldsensoren zijn een alternatief voor CCD-sensoren, het is nog een jonge technologie die in opmars is, maar heeft het voordeel dat het gebaseerd is op de standaard CMOS-procesow. Eerst en vooral zijn CMOS-beeldsensoren zuinig met energie. Omdat zowel de digitale controle als de logica voor digitale beeldverwerking de CMOS-technologie gebruiken voor implementatie op een microchip, kunnen ze samen met de beeldopnemer op een en dezelfde chip geïntegreerd worden, zodat dit alles in een compacte en lichtgewicht `chip camera' resulteert. Een
8
CMOS-beeldsensoren
toepassing van intelligentie aan boord van een StarTracker is het volgende: het beeld wordt eerst gecomprimeerd vooraleer het doorgestuurd wordt naar de Aarde. Dit is mogelijk gemaakt door on-chip functionaliteit. Vergeleken met CCD's, zijn deze voor ruimtevaarttoepassingen veel beter bestand tegen de kosmische straling. Daarnaast kunnen CMOS-beeldsensoren een logaritmische gevoeligheid hebben die zeer goed te vergelijken is met de lichtgevoeligheid van het menselijk oog. Hierdoor is observatie van details mogelijk tegelijk in lichte en donkere delen van een tafereel. CMOS-technologie laat ook toe om iedere individuele pixel afzonderlijk uit te lezen, waardoor het beeld zeer vlug en exibel verkregen wordt. Om de volledige specicaties te raadplegen over de functionaliteit en prestaties van de sensor verwijzen we naar de LCMS Detailed Specication manual [1].
Figuur 2.1: LCMS complexiteit op systeemniveau. Fig. 2.1 stelt de systeem complexiteit voor van de LCMS. Deze bevat on-chip timing, controle en data verwerkingslogica en een ingebouwde ADC als functionaliteit. Zo is de logica om de uitlezing van de sensor te doen, verplaatst van een FPGA1 naar de chip zelf. Het bevat zowel intelligentie zoals windowing aan boord. Preprocessing is opgenomen voor de berekening van de pixel data en voor het zoeken van gerefereerde sterren. Dit tegenover ruwe beeldgegevens die doorgegeven worden naar de applicatie processor. De conguratie interface is ofwel uitgevoerd als LCMS-L, die enkel SpaceWire voorziet, of als LCMS-C die alle gebruikte interfaces (SpaceWire en parallel synchrone bus) ondersteunt.
1
FPGA (Field-programmable gate array) is een geïntegreerde schakeling bestaande uit programmeerbare logische componenten.
2.3 CMOS Active Pixel Sensor
9
De architectuur van de LCMS chip wordt in g. 2.2 getoond. Het bevat een 512 x 512 pixel array met 3T transistoren (zie g. 2.5 verderop). Voor de volledige specicaties en technieken die de LCMS bezit refereren we naar de datasheet. [1]
Figuur 2.2: Architectuur van de LCMS chip.
2.3 CMOS Active Pixel Sensor 2.3.1 Algemeen Een digitale camera bestaat uit een lichtgevoelige sensor dat het binnenvallende licht vertaald naar een analoog signaal. De sensor is opgebouwd uit lichtgevoelige diodes, ook wel fotodiodes genoemd. Bij de moderne camera wordt het beeld opgenomen op een module die bestaat uit een 2D-matrix van beeldpunten (pixel). Elk beeldpunt is in feite een geïntegreerd circuit (bij CMOS) dat fungeert als capaciteit. Elke capaciteit slaat die lading op in een soort MOS (Metal Oxide Silicon) transistor. Na een bepaalde belichtingstijd worden de pixels uitgelezen door de juiste transistoren te selecteren. Hoe meer licht er op een lichtgevoelige fotodiode invalt hoe groter de lading is die zich opbouwt bij de lichtdiode. Elke fotodiode bepaalt de kleur van 1 pixel in het beeld. Hoe meer fotodiodes op de sensor, hoe meer pixels het beeld zal bevatten dus hoe hoger de resolutie is. [5]
10
CMOS-beeldsensoren
2.3.2 CMOS-beeldsensor
Figuur 2.3: Opbouw van een CMOS-beeldsensor. Aan de hand van g. 2.3 gaan we het werkingsprincipe van de sensor uitleggen. Het hart van de sensor bestaat uit een X Y `active pixel' matrix. De eigenlijke grootte is iets kleiner op de guur. De extra kolom -en rijpixels zijn de zogenaamde dummypixels, die dienen voor de afscherming van de informatieve pixels van de andere in de sensor aanwezige circuits. Er bevinden zich twee schuifregisters naast de pixelmatrix: één in de Y-richting (verticaal) en één in de X-richting (horizontaal). De registers wijzen als een soort pointer naar een zekere rij of kolom: het Y-register selecteert een rij met pixels, waarna het X-register uit deze rij een specieke pixel uitkiest. Het tweede Y-register (aan de linkerzijde) dient om de rij met pixels te selecteren die moet worden gereset. De tijd tussen het activeren van het eerste en het tweede verticale Y-register is de integratietijd: dit is de periode waarover de pixels worden belicht, vandaar dat men spreekt over een `electronic shutter'. Deze tijd kan worden ingesteld (de integratietijd). De registers hebben elk een eigen klok -en synchronisatiesignaal nodig om op te kunnen schuiven. Een synchronisatiesignaal is nodig om de registers terug naar hun beginpositie te brengen. [4] In g. 2.4 is de owchart opgenomen om een beeld te nemen. Bij elk nieuw beeld kan de sensor worden gecongureerd. Met controlesignalen worden alle registers gereset en parameters als de versterking van de uitgangsversterker en de pixel-oset kunnen worden bijgeregeld. Men start met een synchronisatiesignaal (sync_y1). Door het verschuiven van het horizontale register
2.3 CMOS Active Pixel Sensor
11
worden de eerste rij pixels uitgelezen. Deze rij wordt dan gereset opdat ze opnieuw kan integreren. Nu kan de tweede rij geselecteerd, uitgelezen en gereset worden. Zo volgen alle rijen. Wanneer de laatste rij verwerkt is, kan alles weer worden herstart door een volledige reset van de registers. Elke rij ondergaat dezelfde integratietijd, met name de tijd om een beeld te nemen, hoewel ze niet gelijktijdig starten en uitgelezen worden. Het is mogelijk de integratietijd te verkorten door een vroegtijdige reset van de lijnen. Met windowing kan men ook een deel van het beeld uitlezen in plaats van de volledige sensor. [4]
Figuur 2.4: Het nemen van een beeld in een CMOS-beeldsensor.
12
CMOS-beeldsensoren
2.3.3 Het opvangen van licht in een CMOS-beeldsensor Het foto-elektrisch eect is verantwoordelijk voor het detecteren van licht in een halfgeleider: een gebonden elektron wordt geëxciteerd tot een ongebonden elektron door het opnemen van quantum-energie van een elektromagnetische golf (fotonen). Het meest gebruikte halfgeleidermateriaal is Silicium, dat gevoelig is voor elektromagnetische golven met een golengte van 350 tot 1100nm. Het overlapt met het menselijke visuele spectrum (400-700nm), en een stuk van het nabije infrarood (700-1100 nm). Dit maakt het ook geschikt voor camera's voor visueel licht. Doordat Si-oxide glasachtig is, wat het perfect doorzichtig maakt, wordt het invallende licht optimaal opgevangen in het Silicum.
2.3.4 n-well active pixels Wanneer licht invalt op een fotodiode kunnen er elektronen in ongebonden toestand gegenereerd worden. Het aantal elektronen dat vrijkomt is een maat voor de hoeveelheid invallend licht. Dit aantal elektronen moet op de een of de andere manier gemeten worden om het om te zetten naar een verwerkbare grootheid. Dit proces gebeurt in een pixel, welke in feite een gewone fotodiode is. Tegenwoordig gebruikt men het type pixel dat 'active pixel' genoemd wordt. Dit is het enige type dat qua ruis en gevoeligheid de maat van CCD's kan nemen. Het belangrijkste nadeel van zo'n pixel is de slechte 'llfactor'. Wanneer we het schema (g. 2.5) bekijken, zien we dat de fotodiode omringd wordt door drie transistoren. T1 is de resettransistor, welke zorgt voor het ontladen van de fotodiode. Na een bepaalde integratietijd (tijd van belichting) wordt de pixel uitgelezen, via sourcevolger T2 die in feite als buer werkt, door de selectietransistor T3 te activeren.
Figuur 2.5: Bovenaan: het schema van een APS; Onderaan: de opbouw van een APS.
2.3 CMOS Active Pixel Sensor
13
In g. 2.6 zien we enkele relevante signalen in een APS. Het uitgangssignaal is het signaal dat aan de uitgang van de pixel staat (op de drain van transistor 3, meest rechtse). Het resetsignaal zorgt ervoor dat de fotodiode (PD-node) gereset wordt, met andere woorden dat de spanning op de fotodiode terug op VDD staat. Door de lichtinval en de daarbij horende elektronenstroom zakt de spanning van de fotodiode na verloop van tijd. De tijd tussen reset en uitlezing van een pixel noemt men de integratietijd. De helling waarmee de uitgang daalt is afhankelijk van de hoeveelheid licht (hoe sterker de belichting, hoe sneller het signaal zal dalen).
Figuur 2.6: Signalen in een APS. Het signaal wordt reeds in de pixel versterkt en de verwerking gebeurt via actieve componenten, hieraan dankt dit type pixel zijn naam. Er zijn wel nadelen aan gebonden die reeds door onderzoekers zijn weggewerkt. Het probleem was de oset tussen de werkelijke fotodiodespanning en de pixelspanning, en anderzijds dat het lichtgevoelige gedeelte (enkel de fotodiode) erg klein is ten opzichte van de totale grootte. De techniek bestond erin al het invallende licht door de fotodiode te absorberen, met hogere `llfactor' tot gevolg, dit bracht ook nog enkele andere voordelen met zich mee. Door de kleinere afmetingen van de diode, verkleint de capaciteit waardoor de ruis veel lager is. De verkleinde geometrie heeft ook als gevolg dat de donkerstroom veel lager is dan bij conventionele `active pixels'. [4]
14
CMOS-beeldsensoren
2.4 CCD-beeldsensor
Figuur 2.7: CCD chip.
Een CCD bestaat uit een tweedimensionaal rooster van halfgeleider elementen op basis van silicium, ook wel pixels genoemd. Wanneer een foton op een pixel invalt, wordt er met een bepaalde kans een elektronpositron paar gecreëerd in de halfgeleider. Op iedere pixel is een elektrode aangebracht waarop een regelbare spanning kan worden gezet. Door op deze elektrode een positieve spanning te zetten, kunnen de gecreëerde vrije elektronen gevangen worden gehouden in de pixel. Na de opname wordt de lading van pixel naar pixel verschoven, zodat bij de laatste rij de pixels één voor één kunnen worden uitgelezen (zie g. 2.7). Hierna wordt deze lading (het aantal elektronen) omgezet in een spanning. Een volledige rij van pixels wordt uitgelezen en versterkt. De versterker die het signaal vergroot voordat het in de ADC2 wordt uitgelezen, heeft een positieve oset of bias. Op deze manier worden negatieve uitleesgetallen vermeden. De bias kan bepaald worden door een opname te nemen met een belichtingstijd van 0 seconden. Om een goed beeld te bekomen, wordt deze bias achteraf van de ruwe data afgetrokken die verkregen werd uit de Analog-to-Digital Converter. De ADC vertaalt nu de analoge spanning in een digitale waarde.
2.5 Vergelijking van CMOS en CCD 2.5.1 Aan de hand van parameters Aan de hand van de volgende zeven parameters: Quantum eciëntie, Dynamic Range, Speed, Responsivity, Antiblooming, Windowing, Shuttering worden de CMOS -en CCD-beeldsensoren met elkaar vergeleken. [6] 2
ADC: Het elektrische signaal (spanningen) wordt in een analoog/digitaal omzetter (ADC) omgezet in een digitale waarde.
2.5 Vergelijking van CMOS en CCD
15
Quantum eciëntie : Beschrijft de gevoeligheid van de camera bij het vrijkomen van energie bij een invallend foton over de verschillende golengtes van het invallende licht. Er is een onderscheid tussen gelijkvormigheid bij belichting en een gelijkvormigheid als het bijna donker is. Als het donker is trekken de CMOSbeeldsensoren een vele grotere darkcurrent3 dan CCD's.
Dynamic Range : Het dynamisch bereik is de ratio van het saturatieniveau van een pixel in verhouding tot het drempelniveau van het signaal. CCD heeft hier ongeveer een factor twee voordeel in. Het uitwendig verbeteren van de beeldsensor door koelen, betere optica, meer resolutie of aangepaste o-chip elektronica kunnen CMOS sensoren niet gelijkwaardig maken aan CCD's.
Speed : De CMOS-beeldsensor werkt veel sneller dan de CCD-beeldsensor. Dit komt door geïntegreerde on-chip functionaliteit waardoor de kans op vertragingen aanzienlijk verminderd wordt.
Responsivity : Dit is de reactie die de sensor levert in signaalgrootte per eenheid van optische energie die binnenkomt. CMOS-sensor is iets beter dan CCD-sensor over het algemeen. Hun transistors laten low-power en high-gain versterkingen toe terwijl de CCD versterking een aanmerkelijke hoeveelheid energie vraagt.
Antiblooming : Blooming ontstaat door het `overstromen' van de pixels bij overbelichting en wel op de overgang tussen grote helderheidsverschillen. Blooming kan witte vlekken geven rond hele lichte voorwerpen. Antiblooming maakt het mogelijk deze overbelichte delen uit het beeld weg te lteren en is uitgedrukt in vermogen om te sterke blootstelling te verlagen. CMOS-sensoren hebben in het algemeen geen last van blooming en doet dit meestal automatisch; bij de CCDsensor is er specieke techniek nodig om dit vermogen te bereiken.
Windowing : Bij windowing is er de mogelijkheid om een deel van het beeld uit te lezen. Hiermee kan in kleine te onderzoeken gebieden een hoge (tijdelijke) precisie bekomen worden. Het is uniek voor de CMOS technologie, CCD kan dit meestal niet. 3
Dark current: als de sensor wordt afgedekt (in het donker) gaat er door de thermische beweging van elektronen in pixels een elektron soms vrijgemaakt worden, zonder dat er eerst een foton invalt. Dit extra signaal heet dark current.
16
CMOS-beeldsensoren
Shuttering : De sluiter is het vermogen om willekeurig de integratietijd te starten en te beëindigen. Een CCDsensoren kunnen heel goed elektrisch shutteren zonder te moeten inleveren aan zijn llfactor. CMOS-sensoren bevatten twee types, Rolling shutter (1) en Snapshot shutter (2): 1. De pixels zijn lichtgevoelig tijdens hun integratietijd, die begint met het resetten van de fotodiode en eindigt met het uitlezen van de pixel. De pixel van de sensor worden lijn per lijn uitgelezen. 2. De pixels zijn gevoelig aan licht tijdens hun integratietijd, die begint met het resetten van de fotodiode en eindigt met bemonstering van het signaal op een pixel geheugenelement (sample and hold). De integratietijd begint en eindigt op hetzelfde moment voor alle pixels van de sensor. Na bemonstering van het signaal, worden de pixels van de sensor lijn per lijn uitgelezen.
2.5.2 Voor -en nadelen Voordelen CCD : • hoge beeldkwaliteit • grote llfactor4 • weinig ruis • grote uniformiteit (gelijke lichtsterkte) • zeer lage donkerstroom
Nadelen CCD : • hoge kosten (speciek productieproces nodig) • geen extra logica verkrijgbaar op de chip • hoog vermogenverbruik door externe signalen die nodig zijn om de sensor aan te sturen
Voordelen CMOS : • verbruikt minder energie dan CCD-beeldsensoren • On-chip functionaliteit • gemakkelijk te integreren met externe logica • rechtstreekse adressering van elke pixel, om slechts een deel van het beeld uit te lezen • goedkoper om te produceren • fabriceren van prototypes voor testing gaat veel sneller 4
Fillfactor: deze is gedenieerd als de verhouding van het lichtgevoelige gedeelte t.o.v. de totale pixelgrootte.
2.6 Besluit
17
Nadelen CMOS : • mindere beeldkwaliteit, reeds verholpen door APS • minder gevoelig voor licht door elektronica aan boord (lage llfactor), opgelost door gevoeligheidsversterking5 toe te passen • hoge donkerstroom
2.5.3 Toepassingsgebied Algemeen kunnen we besluiten dat de traditionele CMOS-sensoren vooral hun toepassing hebben gevonden in mobiele toepassingen (PDA's, mobiele telefoons en laptops) en systemen voor veiligheid (bewaking). Daar de camera's vele kleiner zijn en minder vermogen verbruiken dan traditionele CCD-sensoren. Dit ten koste van de beeldkwaliteit vinden we CCD-sensoren terug in high-end toepassingen, digitale fotograe, televisie maar ook veel bij wetenschappelijk onderzoek en in de medische wereld.
2.6 Besluit Bij Cypress Semiconductor hebben we een uitgebreide trainingscursus gekregen die een theoretische studie over CMOS-beeldsensoren inhoudt. Dit hoofdstuk is deels een beknopte samenvatting van wat er gezien en relevant is voor de demo camera. Uit de datasheet [1] werd de functionaliteit en werking van de LCMS chip bestudeerd. Om toch de nodige aandacht te geven aan de concurrerende technologie CCD-beeldsensoren, is er een vergelijking tussen beide beeldsensoren opgesteld. De belangrijkste factor die de doorbraak verhinderd bij CMOS-beelsensoren was de beeldkwaliteit. Door de komst van on-chip functionaliteit en vooral Active Pixel Sensor (APS) technologie, is deze kunnen evolueren naar een waardige tegenstander die op dit moment gelijkaardig worden geacht aan low -en medium-end-quality CCD-beeldsensoren.
5
Gevoeligheidsversterking: door licht in de lichtgevoelige diodes te laten convergeren (samenkomen) levert dit een grotere lichtsterkte op het punt waar de lichtstraal `neer komt'.
18
CMOS-beeldsensoren
Hoofdstuk 3
SpaceWire protocol 3.1 Inleiding Het SpaceWire protocol legt de communicatie die we nodig hebben op de LCMS demo camera. Deze standaard is als literatuurstudie opgenomen en geeft een theoretische achtergrond van het protocol dat we in dit hoofdstuk volledig doorgronden.
3.2 SpaceWire 3.2.1 Toepassingsgebieden In 1987 startte IMEC met het ontwerpen van CMOS-beeldsensoren, ook voor de ruimtevaart. Zo werd een CMOS-camera gemaakt, een zogenaamde StarTracker (g. 3.1), die door detectie van sterren de exacte positie en oriëntatie van de satelliet bepaalt. In 1999 richtte IMEC op basis van dit onderzoek het spin-o bedrijf Fillfactory op, heden vandaag geïntegreerd in Cypress Semiconductor Corporation. Na de oprichting van Fillfactory werden nog gezamenlijke onderzoeksprojecten uitgevoerd voor het toevoegen van intelligentie aan CMOS-camera's voor de ruimtevaart. [7]
Figuur 3.1: StarTracker.
20
SpaceWire protocol
StarTracker : De StarTracker [8] is een optisch apparaat met ingebouwd `hemels' referentiesysteem. Hierdoor bepaalt deze de richting van één of meerdere sterpatronen, zoals sterrenbeelden. Er zijn 57 heldere navigatiesterren in gebruik. De helderste en dus meest gebruikte is de Sirius. Echter voor complexe ruimtemissies maakt men gebruik van de zogenaamde 'stareld' databanken om de exacte positie van de satelliet te kennen. StarTrackers zijn uiterst dure sensoren die afhankelijk van de accuraatheid (stabiliteit van 0,3 graden/sec), het gewicht (< 300 gram) en het vermogenverbruik (< 1 Watt) tot een prijskaartje tussen de 50000 en 75000 Amerikaanse dollars kosten.
Werking v/e StarTracker : Een StarTracker bezit een telescoop o.a. dat in een bepaalde richting van de satelliet is opgesteld. De detector van de telescoop is een CMOS APS-beeldsensor, ontwikkeld door Fillfactory. Door de komst van deze APS, toegelicht in hoofdstuk , is de CCD overbodig geworden voor gebruik op ruimtevaartuigen en instrumenten. APS bracht de volgende voordelen met zich mee:
• Het vermogenverbruik daalde enorm, tot een 50mW op een regeling van 3.3V • Tot 5 keer kleiner ontwerp, een lager gewicht en daling van de kostprijs • Functionaliteit op de chip zelf, we denken hier voornamelijk aan de ADC
Figuur 3.2: Vereenvoudigdblok van de StarTracker architectuur .
3.2 SpaceWire
21
De CMOS APS sensor maakt een beeld van de sterrenhemel en plaatst deze in het geheugen. In de `stareld' databank zijn er ruim 20.000 gerefereerde sterren opgeslagen. Het verwerkingsalgoritme `Search-Less Algorithm' (SLA) zal instaan voor het mappen van het opgenomen beeld met bestaande sterrenkaarten. Men gebruikt het inertiële assenstelsel, dit is een assenstelsel dat vasthangt aan de sterrenhemel en dus niet meedraait met de Aarde, zodat het resultaat van de processor naar de gyroscoop van de satelliet wordt verstuurd. De gyroscoop kan het ruimtevaartuig slechts voor een korte tijd stabiel houden, om de paar seconden. Door de gegevens die de processor heeft verwerkt gaat de gyroscoop veel nauwkeuriger werken. Roll is lengtedrift van de satelliet, Pitch is de veranderingen in het baanvlak en Yaw is de toenemende afwijkingen uit zijn centrale punt. Hierdoor houden beide (gyroscoop en de berekende waarden) de satelliet stabiel en bepalen eveneens de juiste richting, de satelliet weet nu zijn locatie in de ruimte. (g. 3.2)
Werkingstoestanden van de StarTracker [9] : De LCMS CMOS-beeldsensor kan in de volgende werkingstoestanden als StarTracker functioneren: 1) ACQUISITION Op basis van geregistreerde sterren (g. 3.3):
• Uitlezen van een volledig beeld (5 frames/s) • Prestatie is niet kritisch indien er iets misloopt en de uitlezing genoodzaakt is te herstarten
Figuur 3.3: Sterrenhemel.
22
SpaceWire protocol
2) TRACKING Sterren exact volgen (g. 3.4):
• 20 vensters van 20 op 20 pixels (10 frames/s) • Elk op zijn eigen versterking en belichting • Prestatie is kritisch en kan tot misvattingen leiden (sterren die misplaatst zijn)
Figuur 3.4: Gevonden `matches' in de sterrenhemel.
3.2.2 Geschiedenis SpaceWire is oorspronkelijk door de ruimtevaartorganisatie ESA ontworpen, de Europese tegenhanger van de NASA. Het is een protocol dat ontwikkeld is om data snel en correct te kunnen versturen van en naar de gebruikte apparatuur op een satelliet. (g. 3.5)
Figuur 3.5: SpaceWire interfacekabel.
3.2 SpaceWire
23
Het ESA ruimtevaartprogramma is gericht op het bouwen en in de ruimte brengen van onbemande satellieten en ruimtesondes en het uitvoeren van allerhande onderzoeken onder gewichtloze condities. Aardobservatie (g. 3.6), telecommunicatie -en navigatietoepassingen als voornaamste werkterreinen. In ESTEC, het technisch en wetenschappelijk onderzoekscentrum van de Europese ruimtevaartorganisatie ESA, is deze nieuwe standaard ontwikkeld. De dienst technische ondersteuning (DTO) bracht een ultrasnelle datacommunicatie uit. De SpaceWire norm is vastgelegd door Steve Parkes, de directeur van STAR-Dundee Ltd., en met steun van ingenieurs over heel Europa. STAR-Dundee Ltd. is een onderzoeksteam die hun toetrede in de ruimte-industrie hebben gevonden op de universiteit van Dundee te Schotland. [10]
Figuur 3.6: Earthcare: een observatiesatelliet . De generatie SpaceWire op satellieten is vooral gekomen uit kostenoverwegingen maar ook vooral vanwege zijn eciëntie en exibiliteit. Een satelliet bestaat uit een platform met allerlei basisvoorzieningen zoals de elektriciteitsproductie en de standregeling van de satelliet in zijn baan. De lading bestaat uit apparaten en instrumenten voor onderzoek, telecommunicatiedoeleinden en andere wetenschappelijke toepassingen.
24
SpaceWire protocol
De IEEE 802.11/SpaceWire interface in g. 3.7 zal worden gebruikt voor het aansluiten van de IEEE 802.11 Access Point (draadloos) aan de SpaceWire link (bekabeld) zodat deze gebruikt kan worden op Inter-Satellite Links (ISL).
Figuur 3.7: IEEEE 802.11/SpaceWire netwerk architectuur. Een gericht signaal wordt door een satelliet zoals een spiegel gereecteerd en teruggezonden naar de aarde. De gebruikte signalen (microgolven) zijn onzichtbaar en planten zich met de snelheid van het licht voort. De signalen (microgolven) zijn door hun frequentie zeer hoog, GigaHertzen (GHz). Deze signalen worden overgebracht door parabolische antennes van de aarde naar de satelliet. De signalen worden geconverteerd (= veranderd/overgezet) en versterkt naar andere frequenties en vervolgens weer naar Aarde teruggezonden. De gereserveerde frequenties voor satellietverbindingen zijn terug te vinden in de WARC 1979 banden. De SpaceWire staat in voor dataverwerking aan boord van de satelliet. Om een succesvolle missie te garanderen moet er een goede architectuur van verbindingen aanwezig zijn. De communicatie tussen het grondstation en de satelliet is essentieel. Indien er iets fout zou gaan, moeten alle systemen op afstand volledig opnieuw gecongureerd worden. Zoals we de Plug & Play1 verbindingen van randapparatuur op de computer kennen moet er op deze manier op hetzelfde gemak verbindingen gewisseld kunnen worden. SpaceWire is een seriële verbinding die een hoge datatransmissiecapaciteit van 10 tot 200Mbit per seconde kan leveren. [11]
1
Plug & Play (PnP): is een term die gebruikt wordt om aan te geven dat het installeren van randapparatuur of hardware eenvoudig lukt.
3.2 SpaceWire
25
3.2.3 De standaard De hierop volgende tekst is een samenvatting van het SpaceWire protocol dat voor de LCMS demo camera van toepassing is. The SpaceWire Standard (ECSS-E50-12A) [12] en Aeroex Colorado Springs SpaceWire family [13] zijn de gebruikte bronnen. SpaceWire is een full duplex2 , bidirectionele, seriële punt-tot-punt datalink. Door middel van verschilsignalen in 2 paren kan de link in elke richting de gegevens coderen om te verzenden. Er wordt dus gebruik gemaakt van 8 signaaldraden, met 4 in elke richting. SpaceWire standaard is een serieel protocol dat een hoge snelheid en een laag energieverbruik combineert met een gebruikersomgeving dat eenvoudig aan te sturen is. Het is gebaseerd op het "DS-DE"(=Datastrobe, Dierential Ended) gedeelte van de IEEE 1355-1995 [14] standaard samengebracht met de TIA/EIA-644 [15] Low Voltage Dierential Signaling (LVDS) standaard. De IEEE-1355 is bij SpaceWire uitgebreider omwille dat deze connectoren en kabels gaat gebruiken speciek voor ruimtemissies. Ook is dit communicatie netwerk verschillend op het vlak van commando berichten. SpaceWire verstuurt en ontvangt simultaan berichten (=full duplex) over zijn communicatie kanaal. De gebruikersomgeving is eenvoudig omdat deze gebruikt maakt van het principe FIFO met 9 of 10 bits transactie. De link kan gebruikt worden voor verscheidende data snelheden en pakket grootte. Door het gebruik van LVDS verbruikt SpaceWire 80% minder stroom dan PECL apparatuur. PECL werkt ook met een dierentieel systeem maar met een positieve voedingspanning van 5V. Door LVDS te gebruiken bracht dit de volgende voordelen met zich mee:
• Een hoge snelheid (bandbreedte met een data snelheid van 2 tot 400Mbits/s) • Een laag energieverbruik, 50mW per driver/ontvanger • De kabel functioneert optimaal tot een lengte van 10 meter Het gebruik van gekwaliceerde 9-pin D-type connectoren (g. 3.8) is vastgelegd bij de standaard.
Figuur 3.8: SpaceWire 9-pin D-type connector.
2
Full duplex: datatransmissie waarbij men gelijktijdig kan zenden en ontvangen.
26
SpaceWire protocol
Met deze standaard wou men volgende doelen bereiken:
• Het bouwen van systemen die een hoge prestatie van dataverwerking kunnen leveren in de ruimtevluchten • Systeemkosten zo laag mogelijk te houden • Compatibiliteit bij het aansluiten van andere systemen • De aansturing van dataverwerking moet verschillende ruimtemissies kunnen meegaan
3.2.4 Randeisen in ruimtemissies De volgende vereisten zijn een noodzaak bij gebruik van een SpaceWire link in de ruimte:
• Datasnelheid: een vereiste van 100 Mbits/s is een minimum om voldoende bandbreedte te kunnen leveren voor het vervoer van de gegevens • Linkafstand: afhankelijk van de grootte van het ruimtetoestel vereist men tot een afstand van 10 m een goed resultaat te bekomen • Schalen: hiermee bedoelt men het parallel gebruik van verschillende linken om aan de datavereisten van de toepassing te voldoen • Foutdetectie: men vereist een lage Bit Error Rate (BER). Voor standaard toepassingen een BER lager dan 10−12 en een BER van 10−14 bij hoge linksnelheden • Energieverbruik: het stroomverbruik zo laag mogelijk proberen te houden • Gewicht en afmetingen: de aansluiting van de datalink en kabel worden tot een zo klein mogelijke afmeting beperkt • Koude Redundantie: de datalink functioneert in koude omgevingen indien bepaalde delen op voedingsspanning staan en andere delen niet • Elektromagnetisch straling: niet gevoelig zijn voor interferenties. Er moet voldaan worden aan de elektromagnetische voorschriften voor de vereisten voor ruimtemissies • Magnetische gevoeligheid: de onderdelen voor het gebruik van de datalink mogen niet van ferro (ijzer) materialen zijn • ESD immuniteit: materialen van de link moeten hoge immuniteit tegen elektrostatische ontlading bezitten • Galvanische scheiding: het moet mogelijk gemaakt worden om de datatransmissie tussen zender en ontvanger galvanisch3 te scheiden 3
Een galvanische scheiding is een scheiding tussen twee stroomvoerende elektrische circuits en dient als veiligheidsmaatregel ter voorkoming van mogelijk onveilige stromen tussen verschillende spanningsbronnen, ten gevolge van een defect bijvoorbeeld.
3.2 SpaceWire
27
• Stralingstolerantie: de componenten van de link moeten een nul tolerantie tegen elke mogelijke vorm van straling hebben EMC-specicaties opgelegd voor SpaceWire: De vereisten zijn afgeleid van de ruimtemissies Rosetta en Envisat (anno 2004) die moeten gesteld worden wanneer SpaceWire in ruimte omgeving gaat functioneren. De eerste testen kwamen door Patria Finavitec Oy met steun van universiteit van Dundee. De testing hield het volgende in:
• Straling van emissie, elektrische en magnetische velden na te gaan • Stralingsgevoeligheid op punt stellen tegen elektrische en magnetische velden • Elektrostatische ontlading • Signaal analyse van de dataoverdracht • Galvanische scheiding • BER, energieverbruik
28
SpaceWire protocol
3.2.5 Algemene werking Het SpaceWire protocol beheert zichzelf. SpaceWire zal geen (data)blokken versturen voor men een verzoek van de andere zijde krijgt om data te verzenden. Fig. 3.9 geeft duidelijk hoe het werkingsprincipe werkt. SpaceWire ontvangt en verzendt simultaan langs beide zijde van de link datablokken.
Figuur 3.9: Werkingsprincipe van SpaceWire.
Tijdens normale werking zal de SpaceWire initiator node de data beheren door middel van tokens te verzenden naar de (ontvanger) node aan de andere zijde van de link. Elke token die naar de ontvanger wordt verstuurd geeft aan dat de initiator node een capaciteit van 8 bytes buerruimte heeft. De ontvanger bezit een teller om elke token vast te leggen. Indien er 3 tokens ontvangen worden zal er aan de initiator zijde een capaciteit van 24 bytes data beschikbaar zijn.
Figuur 3.10: Flowchart - tokensprincipe.
* Het subsysteem zal meteen data beginnen te verzenden indien hij de eerste token heeft ontvangen en deze in het Xmit geheugen zit.
3.2 SpaceWire
29
Opmerkingen: Beide nodes werken langs zender en ontvanger via het FIFO principe. De beide nodes zijn zowel initiators als ontvangers. Voorts wordt elke initiator dat tokens verzend onderbroken met een stroom van zowel data als andere karakters. Dit geldt zolang dat er 8 bytes beschikbare ruimte is aan de initiator van ontvanger zijde. Langs beide zijde wordt het aantal van ontvangen en verstuurde initiators via een teller bijgehouden.
3.2.6 Protocol stack SpaceWire bezit twee (fysieke en datalink) lagen van het OSI-model4 (of ISO-OSI) dat vooral nog als referentiemodel gebruikt wordt. Het is onderverdeeld in verschillende protocol lagen. (g. 3.11)
Figuur 3.11: OSI-model links, SpaceWire model rechts.
3.2.7 Fysisch niveau Dit niveau omringt kabels, connectoren, assemblage van de kabel en de bevestiging op het PCB. De SpaceWire kabel bevat 4 twisted pair met een isolatieschild rond elk paar en buitenste isolatielaag. (g. 3.12)
4
OSI-model is een gestandaardiseerd middel om te beschrijven hoe data wordt verstuurd over een netwerk.
30
SpaceWire protocol
Figuur 3.12: Doorsnede SpaceWire bekabeling.
Volgende kenmerken zijn vereist om optimale prestatie te kunnen leveren van een SpaceWire link over een afstand van 10m (g. 3.14):
• De uitgangsimpedantie van de zender of de karakteristieke impedantie van de SpaceWire kabel (g. 3.13) gelijk maken aan 100 ohm • De skew5 laag houden tussen de data en strobe paren en tussen elk signaal van de dierentiële paren • Lage signaalverzwakking (=attenuatie) • Lage cross-talk6 • Hoge EMC prestaties
Figuur 3.13: Aansluiting van de 9-pin D-type SpaceWire connector.
5 6
Skew: vervorming van het signaal als gevolg van een variatie in de voortplantingstijd. Cross-talk: elektromagnetische interferentie tussen twee signalen, overspraak.
3.2 SpaceWire
31
Figuur 3.14: Seriële punt-tot-punt datalink.
3.2.8 Signaal niveau SpaceWire maakt gebruikt van LVDS als techniek om het signaal te transporteren en de ruis zo laag mogelijk houden. Het coderen van de data gebeurt via Data-Strobe (DS). LVDS principe (g. 3.15): Er is een driver (D) en anderzijds een ontvanger (R) aanwezig. Hiertussen wordt via twee connecties de nodige informatie uitgewisseld. De connecties zijn bij SpaceWire twisted pairs. De twee verbindingen voeren een dierentieel signaal met een kleine amplitude dat gesuperponeerd (=wisselende gelijkstroom) is op een common-mode spanning.
Figuur 3.15: LVDS principe.
32
SpaceWire protocol
De stroomrichting zal bepalen of er een logische 1 of 0 wordt verstuurd. Hier kunnen twee spanningen gedenieerd worden:
• Common-mode spanning (middelste lijn in g. 3.15) =
(v1+v2) 2
• Dierentiële spanningsmode = v1 − v2 Het signaal is ongevoelig voor common-mode ruis doordat de signalen dierentieel worden verstuurd. Deze ruis bekomt men door de spanning op de beide connecties te laten variëren in dezelfde richting. Hierdoor stijgt de globale common-mode spanning wel maar de dierentiële spanning blijft behouden tussen de twee connecties, dus er gaat geen informatie verloren. De ruis heeft weinig invloed, wat ons mogelijk maakt om geen grote spanning te gebruiken. De dierentiële spanning is gelijk aan 350mV, de common-mode spanning is gelijk aan 1.25V (volgens de ANSI/TIA/EIA-644-A-2001 standaard). Hierdoor wordt het vermogenverbruik vele kleiner en de transitietijden kort, want er moet slechts 350mV overbrugd worden, men bekomt hierdoor hoge datasnelheden. (g. 3.16)
Figuur 3.16: LVDS signaalniveaus. De gebruikte driver en ontvanger wordt verbonden met een medium (kabel of PCB sporen) van 100 ohm dierentieel impedantie. (weergegeven in g. 3.17) De LVDS driver staat in stroom mode. Een constante bron van circa 2,5 mA stroomt doorheen de driver, langs het transmissiemedium, via de 100 ohm uitgangsimpedantie en weer terug naar de driver langs heen het medium. De transistoren schakelingen bepalen de richting van de stroom doorheen de uitgangsimpedantie. Zodra de transistoren van de driver in + mode (ingeschakeld) en - (uitgeschakeld) zal er zich een positieve spanning over de uitgangsimpedantie gerealiseerd worden. In de tegengestelde richting geeft dit een negatieve spanning. Dit genereert een spanning van ongeveer ± 350 mV over de uitgangsimpedantie, LVDS ontvangers zijn opgegeven om een hoge input impedantie te bezitten zodat het meeste van de stroom door deze weerstand gaat vloeien.
3.2 SpaceWire
33
Figuur 3.17: LVDS operatie.
LVDS bezit fail-safe7 operatie dat andere signaaltechnieken niet bezitten zoals PECL. Het houdt in dat de uitgang van de ontvanger naar inactief valt wanneer:
• De ontvanger wordt gevoed en de driver niet bekrachtigd is • De ingangen kort bij elkaar vallen • De ingangen losgekoppeld zijn Data-Strobe (DS) principe (g. 3.18): De codering bestaat er in de transmissieklok te encoderen met de data in Data en Strobe signalen hiermee kan de klok eenvoudig hersteld worden door beiden te XOR'en. De data wordt verstuurd en telkens als de waarde van de data constant blijft gedurende 2 periodes zal het strobe signaal van toestand veranderen. Het voordeel hiervan is de skew te beperken tot een tolerantie van bijna 1-bit verandering.
Figuur 3.18: Data-Strobe (DS) principe.
7
Fail-safe: een veiligheid ingebouwd bij het falen van een systeem.
34
SpaceWire protocol
De SpaceWire link bezit 2 paar van dierentieel signalen. Een paar om Data en Strobe signalen in de ene richting te versturen en een ander paar om de tegengestelde richting te bekomen. In totaal geeft dit een resultaat van 8 draden per bidirectionele link.
3.2.9 Karakter niveau Deze is gebaseerd op het karakter niveau protocol gedenieerd in IEEE 1355-1995, hierbij zijn nog timecodes toegevoegd ter ondersteuning om rekening te houden met systeemtijd. Er zijn twee types van karakters: data en controle. Data karakters (g. 3.19):
Figuur 3.19: SpaceWire data karakters. Een data karakter bevat een pariteitsbit, een datacontrole vlag en een reeks van 8 bits data. De pariteitsbit houdt de vorige reeks van 8 bits, de huidige pariteitsbit en datacontrole vlag in het oog. Deze is gezet om oneven pariteit te bekomen zodat totaal van 1'en over het hele gebied uiteindelijk een oneven getal zijn. De datacontrole vlag is op nul gezet om aan te duiden dat het hier om een data karakter gaat. De reeks van 8 bits zal van LSB naar MSB verzonden worden. Controle karakters (g. 3.20):
Figuur 3.20: SpaceWire controle karakters. De controle karakters bestaan uit een pariteitsbit, een datacontrole vlag en een twee bits controle code. De datacontrole vlag is hier op 1 gezet om aan te duiden dat het om een controle karakter gaat. In de guur hierboven zijn de verschillende vormen van controle karakters te zien. De pariteitscontrole is dezelfde als bij data karakters. Door middel van het combineren van de vier verschillende controle karakters bekomen we langere codes.
3.2 SpaceWire
35
De NULL code is gevormd door ESC gevolgd door FCT. NULL wordt verzonden als een link geen data of controle tokens verzendt die de link actief houden. Ook geeft de NULL ondersteuning wanneer de link disconnect wordt. De timecode wordt gevormd door het ESC van de controle karakters te combineren met een data karakter. (g. 3.21)
Figuur 3.21: SpaceWire timecode karakter. In T0 tot T5 wordt de tijd voorgesteld. T6 en T7 zijn controle vlaggen. Met het timecode karakter kan men de systeemtijd beheren: Tick_in: de node een timecode karakter wenst. (slechts één node in het systeem mag tick_in hebben dat actief is), Tick_out: de user een timecode karakter ontvangen heeft. Om tijdens het verloop van een SpaceWire link (g. 3.22) disconnectie te vermijden maken we gebruik van het NULL karakter. Tijdens een stilte, wanneer er dus geen karakters worden verzonden, plaatsen we het NULL karakter om de link steeds actief te houden.
Figuur 3.22: Verloop van een SpaceWire link. Om tranmissiefouten op te sporen maken we gebruik van de pariteitsbit die telkens meegegeven wordt. (g. 3.23 en g. 3.24)
Figuur 3.23: Pariteitsdekking bij foutdetectie (1).
36
SpaceWire protocol
Figuur 3.24: Pariteitsdekking bij foutdetectie (2).
3.2.10 Exchange niveau Op dit niveau worden er een aantal services aangeboden die ook beschreven zijn in de IEEE 1355-1995. Initialisatie: Er wordt gebruikt gemaakt van een state machine (g. 3.25) met handshaking8 om begin en einde van de link met elkaar initialiseren. De ingang is gehouden op de reset toestand tot er een vraag komt om communicatie tussen beide linken te doen. De link ingang begint met het starten van NULL karakters en de link uitgang controleert voor de ontvangst van karakters bits. Vanaf er een NULL karakter aan de uitgang gepasseerd is, kan de ingang beginnen met het versturen van data of controle bits. Men begeeft zich in normale werkingstoestand.
Figuur 3.25: State diagram van een SpaceWire link. 8
Handschaking: het uitwisselen van afgesproken tekens tussen twee apparaten in een netwerk voorafgaand aan een communicatiesessie.
3.2 SpaceWire
37
Flow controle: Een zender kan enkel data karakters versturen indien er ruimte aan de zijde van de ontvanger is. Aan de hand van FCT die de ontvanger verstuurd wordt er aan de zender meegedeeld dat er ruimte is voor 8 data karakters. Indien meerdere FCT's achtereen worden ontvangen, wordt er aangeven dat een veelvoud van 8 data karakters beschikbare ruimte aanwezig is in de buer van de ontvanger. Detectie van disconnectie fouten: De link disconnectie wordt ontdekt wanneer de ontvanger binnen 850 nsec geen nieuwe data bits binnenkrijgt. Vanaf er een link disconnectie plaats heeft gevonden probeert de link zich te herstarten. Detectie van pariteitsfouten: Pariteitsfouten op data of controle karakter worden ontdekt vanaf er een nieuwe reeks van karakters binnenkomt. Dit komt doordat de pariteitsbit telkens gezet wordt in het veldje van het volgende karakter. De link zal herstarten na het vaststellen van een fout. Herstarten van de link: Telkens na een fout of een reset van de link zal men proberen te synchroniseren om de link opnieuw op te starten, dit is aangegeven in g. 3.26. Vanaf dat er een fout of reset optreedt langs een zijde van de link zal de transmissie gestaakt worden. De eerste link reset zijn ingang en uitgang voor 6.4 µs zodat de andere zijde zeker de disconnectie detecteert. Hierna zal deze zijde ook 6.4 µs wachten. Nadien is er een stilte van 12.8 µs langs beide zijde voor men opnieuw start met versturen. Deze tijdsperiode is voldoende lang genomen om ervoor te zorgen dat beide links opnieuw gesynchroniseerd zijn en opnieuw data kunnen gaan ontvangen.
Figuur 3.26: Herstarten van een SpaceWire link.
38
SpaceWire protocol
3.2.11 Pakket niveau Deze laag volgt de standaard IEEE 1355-1995 op hoe een pakket beschreven wordt. De indeling van het pakket is als volgt:
<Einde van de markering van het pakket> Het bestemming adres is een lijst van gegevens bestaande uit nul of meer tekens. Deze lijst van gegevens vertegenwoordigt ofwel de identicatiecode of het pad dat naar de bestemmingsknoop leidt. Het bestemmingsadres wordt gebruikt door SpaceWire routers om de correcte weg van het pakket garanderen. Indien een punt-tot-punt verbinding gebruikt wordt, is het niet nodig om gebruik te maken van het adres. De lading zijn de gegevens die men naar de bestemming wilt versturen. Het einde van het pakket wordt aangegeven met een markering. Er zijn twee soorten beschikbaar:
• EOP (=Normal end of Packet) karakters geeft het einde van het pakket • EEP (=Error end of packet) karakters geeft aan dat het pakket voortijdig beëindigd is vanwege een fout in de link Aangezien er geen start karakter is voorzien, zal de eerst volgende data karakters na het EOP of EEP karakter beschouwd worden als een nieuwe start van een reeks gegevens.
3.2.12 Netwerk niveau Een router zal het gebruik van meerdere SpaceWire links beheren zodat pakketten van de ene naar de andere SpaceWire link kunnen verzonden worden. (g. 3.27) Men vereist een vorm van netwerktopologie om de verschillende pakketten naar hun bestemming te krijgen. Hiermee bedoelt men dat elk knooppunt het bestemmingsadres van zijn bestemming moet kennen.
Figuur 3.27: SpaceWire netwerkconguratie.
3.3 Besluit
39
3.2.13 Toepassingsniveau Om de functionaliteit van het SpaceWire protocol te gebruiken is er het toepassingsniveau. De SpaceWire interface wordt toegepast in de dataverwerkingssystemen van een satelliet en wordt hier als communicatieprotocol gebruikt bij de demo camera. De applicatie die we gebruiken is BenchTools. BenchTools maak het mogelijk de demo camera met CMOS-beeldsensor op een gemeenschappelijk netwerk te plaatsen zodat deze geprogrammeerd en getest kan worden. De data wordt verstuurd en ontvangen via SpaceWire. Met onze demo geven we de toepassing zoals die te werk gaat op een satelliet weer.
3.3 Besluit SpaceWire is in feite een soort van netwerkverbinding, deels gebaseerd op de IEEE 1355 communicatiestandaard. Het is een communicatieprotocol dat zijn toepassing in de ruimtevaart heeft gevonden waar de behoefte bestaat aan high speed computing en safe interconnecting. Hieruit hebben we de belangrijkste toepassing ervan leren kennen, de StarTracker. Onze LCMS demo camera doet dienst als demonstrator om zijn toepassing ervan `de StarTracker' aan te tonen. Om onderzoek te doen naar SpaceWire is er een compleet aanbod van evaluatie, test -en ontwikkelingsapparatuur beschikbaar gesteld door STAR-Dundee [3]. Voor de demo camera is de SpaceWire-USB Brick genomen die de communicatie legt tussen de camera en de PC. Dit hoofdstuk geeft vooral een samenvatting van de werking van SpaceWire weer dat nodig is om dit communicatieprotocol te begrijpen. Met deze achtergrondinformatie gaan we in het volgende hoofdstuk over naar het programmeren van de demo software nodig om te communiceren met de camera.
40
SpaceWire protocol
Hoofdstuk 4
Demo camera ontwikkeling 4.1 Inleiding De ontwikkeling van de LCMS demo camera (zie g. 4.1) omvat zowel een hardware als software gedeelte. In dit hoofdstuk bespreken we de evolutie van het ontwerp, hoe opduikende problemen aanpakt werden en tot welke resultaten we gekomen zijn. Het hardware gedeelte bestond uit de verbetering van een bestaand PCB ontwerp. De software ontwikkeling bestond erin een LCMS driver in C# code te schrijven. Deze maakt via het SpaceWire protocol communicatie tussen de demo camera en de PC. Daarnaast bezit deze de LCMS camera controle software om de sensor te evalueren. De software bespreken we aan de hand van een owchart die de LCMS driver voorstelt. Hieruit worden de verschillende klassen en de voornaamste methodes beschreven. Hierna volgen de bekomen resultaten, onder de vorm van Analyse en Debug om vervolgens af te sluiten met het besluit.
Figuur 4.1: De LCMS demo camera.
42
Demo camera ontwikkeling
4.2 Hardware ontwikkeling 4.2.1 Inleiding In deze paragraaf bespreken we het hardware gedeelte van de demo camera. Om de LCMS sensor aan te sturen moet er een printed circuit board (PCB) gemaakt worden. Een PCB is een mechanische samenstelling bestaande uit verschillende lagen glasvezel met daarop geëtste koperbaan patronen. Dit wordt gebruikt om elektronische componenten erop te bevestigen door deze erop te solderen. Het eindproduct is een kant en klare elektronische schakeling. Het vertrekpunt is een bestaand PCB ontwerp (110 x 130 mm), weergegeven in g. 4.2. De LCMS demo camera vindt zijn toepassing in de ruimtevaartindustrie waarbij `low cost' en `low mass' de voornaamste randeisen zijn. Om dit te illustreren werd er gevraagd dit PCB ontwerp te optimaliseren naar een zo klein mogelijk ontwerp. Nadat het elektronisch schema op papier gezet is, kan men overgaan naar het maken van de PCB. Maar vooraleer je de PCB kan etsen, moet je eerst de PCB lay-out maken.
Figuur 4.2: Het bestaande PCB ontwerp van ESA.
4.2 Hardware ontwikkeling
43
4.2.2 Het PCB ontwerp proces Om een professioneel PCB ontwerp te bekomen, doorlopen we de volgende fases: 1. Denkwerk voor het ontwerp 2. De voorbereiding 3. PCB design setup 4. Routen van de PCB 5. Uitvoering 6. Post Processing We gaan nu de verschillende fases naderbij bekijken en beschrijven hoe ons PCB ontwerp hieruit ontstaan is.
4.2.2.1 Denkwerk voor het ontwerp Om de afmetingen van de PCB te bepalen, hebben we een analyse gedaan van het bestaande PCB. Het ontwerp werd in zes delen opgesplitst:
• de LCMS chip met PLCC-84 socket (Plastic Leaded Chip Carrier met 84 pinnen) • de schakeling die een periodiek signaal opwekt, de oscillator (20 MHz clock) • de schakeling met de drukknop om de LCMS chip te resetten • de SpaceWire interface • de ADC instelling • de ingangsschakeling om het geheel te voeden. De gebruikte componenten om het ontwerp op te bouwen zijn opgezocht op de website van Farnell [16]. Om de PCB te verkleinen zijn alternatieve componenten gezocht die kleiner konden en de axiale componenten werden naar SMD 0603 formaat gebracht. Op de bijhorende CD zijn de datasheets van elke component opgenomen.
44
Demo camera ontwikkeling
Er werd een gepaste SpaceWire connector, DC voeding, Aan/Uit schakelaar, regulatoren, fuse1 en reset knop gekozen. De capaciteiten en weerstanden werden in SMD2 formaat verkleind. Vervolgens is hieruit de gebruikte componentenlijst (zie Bill of materials in bijlage A) opgesteld. Het bestaande PCB ontwerp had voor de instelling van de ADC potentiometers3 staan. In g. 4.3 staat het schema om de instelling te maken. De twee potentiometers zijn vervangen door drie vaste weerstanden waar we een verbruik van 10mA rekenen. De weerstanden bedragen dan R1 = 1500 Ohm, R2 = 1200 Ohm en R3 = 680 Ohm volgens E12 reeks. Hier zijn 12 genormaliseerde weerstandswaarden per decade mogelijk.
Figuur 4.3: Instellen van de ADC. Hierna is het elektronische schema (zie Schematisch LCMS board in bijlage B) opgesteld. Door de LCMS chip centraal te zetten en hiervan de pinlijst uit de datasheet [1] te raadplegen is de opbouw ontstaan. De componenten zijn toegevoegd en kregen een uniek label (designator) toegekend met bijkomende informatie die niet zichtbaar is op het schema maar wel nuttig is om het PCB ontwerp op te bouwen (de footprint4 , etc.) en achteraf de bestelling te kunnen doen.
1
Fuse is een zekering die bescherming tegen overbelasting of kortsluiting biedt. SMD: Surface-mounted device en betekent letterlijk oppervlak-gemonteerd onderdeel. 3 Potentiometer is een variabele weerstand, waarvan de weerstand wordt bepaald door de stand van een mechanisch beweegbare component. 4 Footprint is de ruimte die een bepaalde component inneemt op het PCB ontwerp. 2
4.2 Hardware ontwikkeling
45
4.2.2.2 De voorbereiding In deze fase gaan we de netlist, een lijst van verbindingen, genereren. Hierin is elke component met zijn uniek label (designator) en footprint opgenomen. Ook worden de verbindingen tussen de componenten weergegeven. Hiervoor zijn er een aantal footprints getekend die niet standaard zijn opgenomen in de bibliotheek van Altium. De netlist kon hieruit automatisch gegeneerd worden. Om de onderdelen op de printplaat te bevestigen maken we een keuze tussen through-hole (1) en SMD (2): 1. voor elk component twee of meer gaten geboord moeten worden (Axiaal). 2. de componenten worden rechtstreeks op de print gesoldeerd (Surfacemount). Om de SpaceWire connector te bevestigen, de lenshouder te plaatsen en uiteindelijk de PCB in de toekomst van een behuizing te voorzien zijn er tien through-hole gaten in het PCB ontwerp gemaakt. De andere componenten worden in SMD formaat geplaatst. Er zijn verschillende symbolen in de netlist. Pads zijn de interfaces tussen de componenten en de koperbanen. De opening in het pad moet groot genoeg zijn om variaties van pin-diameters van componenten toe te laten. Aan de buitenkant moet er voldoende kopercirkel aanwezig zijn om te kunnen solderen. Buiten de kopercirkel wordt er nog ruimte vrijgehouden (solder mask) om aanraking met andere pads of tracks te vermijden. Online tutorials [2] beschreven hoe groot de paden moesten zijn. Footprints zijn de entiteiten die de componenten voorstellen. Ze bestaan uit pads, lijnen en teksten. Om de pads juist te laten passen in het afgewerkte print zijn deze gerangschikt volgens het patroon van de componentaansluitingen. De lijnen vormen een tekening van de componenten met de maximale dimensies die later op de printplaat worden gedrukt (silkscreen layer). De tekst duidt aan over welke componenten het gaat: IC1, R1, C1, etc. en het device is de interface tussen de footprints en de component.
4.2.2.3 PCB design setup Om van het getekende elektronische schema over te gaan naar het PCB ontwerp werd de netlist geïmporteerd. Een netlist is een le waarin alle verbindingen en componenten met hun footprints opgenomen zijn. Deze lijst is de basis voor het vervaardigen van een PCB. Wanneer je deze lijst importeert, gaat Altium nakijken op eventuele fouten (verkeerde footprints, dubbele naamgeving, etc.). Hierna kon het ontwerp getekend worden. Het meest haalbare ontwerp resulteerde in een 70 x 70 mm PCB ontwerp. Hiervoor moest de PCB lay-out over 4 lagen (g. 4.4) beschikken. De dikte ervan bedraagt 1.6 mm. De isolatie en koper werden door de leverancier van de PCB gekozen. Dit in functie van de goedkoopste prijs
46
Demo camera ontwikkeling
op moment van bestelling. Op de bovenzijde is de SpaceWire connector, Aan/Uit schakelaar en de socket PLCC-84 socket voor de LCMS sensor geplaatst. De tussenliggende lagen zijn het grond vlak (GND) en het power vlak (voedingen). Het power vlak bestaat uit twee oppervlaktes om respectievelijk de analoge en digitale pinnen van de sensor te voeden. Op de onderzijde van de PCB worden de overige componenten geplaatst.
Figuur 4.4: PCB lay-out in 4 lagen.
4.2.2.4 Routen van de PCB Bij de plaatsing van de componenten hebben we rekening gehouden met hun elektrische functie, fysische afmetingen en temperatuursfactoren. De ontwerpregels (design rules) werden ingeladen, zodat Altium automatisch foutmeldingen gegeneerd. Hierna zijn we PCB gaan routen en zijn de componenten eigenhandig geplaatst.
4.2 Hardware ontwikkeling
47
4.2.2.5 Uitvoering Na de plaatsing van de componenten en de routing van de banen, komt de silkscreen-layer aan de beurt. Hier gaan we de omlijningen van de componenten aanpassen zodat deze niet samenvallen met de printbanen en dat de tekst ook nog leesbaar is nadat de componenten zijn geplaatst op het bord. Het is nu ook het moment om bedrijfslogo en tekst op de PCB te plaatsen. Het resultaat van het PCB ontwerp is in g. 4.5 weergegeven. (zie PCB LCMS board in bijlage C)
Figuur 4.5: Het gemaakte PCB ontwerp.
4.2.2.6 Post Processing Als laatste fase laten we Altium de verschillende outputles genereren. Hiermee kan de PCB besteld worden.
48
Demo camera ontwikkeling
4.2.3 Soldeertechniek voor SMD componenten Om het prototype van de LCMS demo camera te fabriceren, hebben we bij het solderen van de PCB enkele technieken bijgeleerd. [17] De meest populaire, goedkoopste en vlotste leverbare component bij het solderen is de 0603 SMD bouwvorm. Om de techniek ervan toch even te illustreren daar elk PCB gebruiker met deze component in aanraking komt, is in g. 4.6 het solderen van een SMD weerstand of capaciteit weergegeven.
Figuur 4.6: Solderen van een SMD weerstand of capaciteit.
4.3 Software ontwikkeling
49
4.3 Software ontwikkeling 4.3.1 Inleiding In dit deel bespreken we het software gedeelte van de demo camera. Cypress Semiconductor maakt gebruik van Microsoft .NET framework in combinatie met hun programma BenchTools. Omdat de huidige Java software van ESA niet door .NET ondersteund wordt, is er gevraagd de LCMS camera controle software in C# te programmeren. De demo software in C# zal dezelfde functionaliteit hebben als de Java code. Uit de Java code gaan we enkel de code herbruiken die met de sensor communiceert. Deze moet dus naar C# geport worden. Om de communicatie te maken met de camera is het SpaceWire protocol voorzien. In Java is er een library5 met driver `SpaceWireDrivers.jar' voorzien. Deze ondersteunt communicatie met SpaceWire USB apparaten in de Java applicatie programma's. Om deze communicatie in C# te programmeren, moet er zelf een driver geschreven worden en dit doen we aan de hand van de bijgeleverde API6 User Manual van StarDundee. [18] Deze manual bevat pseudo code en C++ code om met SpaceWire apperaten te werken. De demo software bestaat erin dit communicatieprotocol `SpaceWire' in te bouwen en de nodige Java functionaliteit, om met de camera te communiceren, te porten naar C#. Dit is de LCMS driver. De code ervan wordt in Visual Studio gecompileerd tot een .DLL zodat deze in BenchTools kan ingeladen worden. In BenchTools zal de driver een communicatie maken met de LCMS demo camera. Zo kan er in dit platform de nodige debugging en testing gebeuren om de functionaliteit ervan te testen.
4.3.2 C# C# is een object-georiënteerde programmeertaal ontwikkeld door Microsoft. Microsoft omschrijft de taal als een eenvoudige, moderne, objectgeoriënteerde en typesafe programmeertaal afgeleid van C en C++. De taal ontstond met de ontwikkeling van het .NET framework om er eenvoudig mee samen te werken. Men kan C# het beste situeren tussen Java en C++. De taal probeert van types het beste mee te nemen. De kracht van C# bevindt zich echter niet alleen in de taal zelf, maar behoort ook vooral toe aan de .NET bibliotheek die zeer uitgebreid is. Voor C# is er een uitgebreide ondersteuning door middel van documentatie, IDE's7 , tools en tutorials. Zo is er de Microsoft Developer Network (MSDN) library en bestaan er reeds verschillende versies van de ontwikkelomgeving Visual Studio .NET. 5
Library: Bibliotheken van gecompileerde code van functies die aangeroepen kunnen worden door uitvoerbare programma's. 6 API (Application Programming Interface) beschrijft de interface tussen een programma en bibliotheken of een computersysteem. De schrijver van het programma weet enkel hoe bepaalde zaken kunnen aangesproken worden zonder de implementatie te kennen. 7 IDE (Integrated development environment) is een applicatie die de programmeur helpt bij het ontwikkelen van software
50
Demo camera ontwikkeling
4.3.3 Flowchart van de demo software
Figuur 4.7: Voorstelling van de demo software in owchart.
Algemene bespreking : Fig. 4.7 geeft de opbouw van de LCMS driver. De LCMS driver bezit twee specieke namespaces, LCMS en TestRunner2. De TestRunner2 bezit de main klasse die de klasse Run uitvoert, hier wordt het testprogramma uitgevoerd om de SpaceWire functionaliteit te testen. Deze bestond in eerste instantie als command-line-interface en nadien is er een Grasch User Interface (GUI) geschreven. De GUI based application is niet opgenomen in de LCMS driver, en laten we buiten beschouwing. Dit was ook meer een update om het testprogramma grasch mooier voor te stellen. De LCMS bestaat uit drie belangrijke klassen:
• De StarDundee Brick bezit de geschreven code om over SpaceWire te communiceren. • TestExample is de geschreven code voor het testprogramma. • De LCMS:Sensor bezit de LCMS camera controle software die van Java naar C# geport werd. Deze klasse wordt gemaakt op basis van de bestaande klasse Sensor, hiermee krijgt deze alle eigenschappen van de Sensor klasse tot beschikking.
De Sensor klasse van de LCMS wordt gebruikt in BenchTools. Vanaf de LCMS driver in BenchTools wordt ingeladen, zullen de gebruikte overrides functies aan knoppen toegewezen worden zodat de sensor geprogrammeerd en getest kan worden. De LCMS:Sensor klasse bestaat uit de klasse CommSpW om de connectie met de SpaceWire-USB Brick op te bouwen en vervolgens data te kunnen transporteren en te ontvangen. Communication is de abstracte klasse die de ongedenieerde methodes
4.3 Software ontwikkeling
51
bevat die uit de subklasse CommSpW worden overgeërfd. De klassen Pixel, Window en Region of Interest (ROI) zijn nodig om het beeld van de camera te deniëren. Vervolgens gaan we de verschillende klassen en de voornaamste methodes beschrijven om de inhoud van de LCMS driver toe te lichten, deze lijst is in bijlage D opgenomen. Een gedetailleerde bespreking laten we buiten beschouwing.
4.3.4 Class1.cs Het doel is de SpaceWire functionaliteit te testen, hiervoor is er een testprogramma (commandline-interface) geschreven dat in de main routine van de Namespace TestRunner2 wordt aangesproken. (listing 4.1) Deze gebruikt de functionaliteit van de klasse StarDundee Brick (listing 4.2) en de klasse TestExample (listing 4.4) die in de Namespace LCMS verderop wordt besproken.
Listing 4.1: Het testprogramma (command-line-interface) 1 2 3 4
namespace TestRunner2{ class Class1{ [STAThread] static void Main(string[] args){
5 6 7 8 9 10 11
12 13
Class1 program = new Class1(); program.Run(); } public void Run(){ Console.WriteLine("Starting...\n"); Console.WriteLine("Version of the Configuration Library in use: {0}\n\n", StarDundeeBrick.USBSpaceWire_GetAPIVersion()); Console.WriteLine("\tSearching for SpaceWire Brick: \n\n"); Console.WriteLine("\t\tDevice count: {0}\n\n", StarDundeeBrick. USBSpaceWire_CountDevices());
14 15 16
17 18 19 20 21 22 23
if (IsCheckBrickPresent()){ Console.WriteLine("\t\tWe get a brick object to send and receive packets!\n "); Console.WriteLine("\tResult:\n"); Console.WriteLine("\t\tFound SpaceWire Brick...\n\n\n"); Console.WriteLine("Functionality of SpaceWire functions: \n\n"); LCMS.TestExample.TestBrick(); } Console.WriteLine("Press enter to exit"); Console.ReadLine();
52
Demo camera ontwikkeling } static bool IsCheckBrickPresent(){ int[] listIDs; StarDundeeBrick.DeviceType[] listType; StarDundeeBrick.GetListDevices(out listIDs, out listType); int index = LCMS.StarDundeeBrick.GetIndexFirstBrick();
24 25 26 27 28 29 30
if (index == -1){ Console.WriteLine("\t\tSpaceWire Brick not found...\n\n"); return false; } return true; }
31 32 33 34 35 36 37 38
} }
4.3.5 LCMS.cs Het bronbestand `LCMS.cs' bevat de functionaliteit van de LCMS driver die nodig is om de sensor aan te sturen. Hierin bespreken we de klasse StarDundee Brick, de klasse TestExample en de klasse LCMS:Sensor.
4.3.5.1 StarDundee Brick De StarDundee Brick klasse bevat alle functionaliteit die nodig is om via het SpaceWire protocol te kunnen communiceren. In de Java code was hiervoor een driver voorzien. Om hiervan gebruik te maken in C# is deze klasse geschreven. Deze klasse is tot stand gebracht aan de hand van de API User Manual van StarDundee. [18] De SpaceWire-USB Brick van StarDundee beschikt over drie bibliotheken (RouterCongLibrary.dll, RouterUSBExAPI.dll en RouterUSBAPI.dll) om SpaceWire functies gebruiken. Hier hebben we de .NET P/Invoke (DLL wrapping) techniek op toegepast. Externe methodes kunnen beschikbaar worden gesteld door DLL Import te gebruiken en vervolgens de declaratie. Hierna volgt een opsomming van private en public properties8 . Om een idee te krijgen hoe de code van de StarDundee Brick is opgebouwd, verwijzen we naar de listing 4.2 voor de functionaliteit en in listing 4.3 wordt er een beschrijving gegeven hoe deze gebruikt kan worden.
Listing 4.2: public class StarDundeeBrick 1
// ------------------- Import DLLs ---------------------------
2 8
Property is een member van een klasse wat tussen een veld en een methode inzit
4.3 Software ontwikkeling 3 4
5
[DllImport("RouterUSBAPI.dll")] private static extern int} USBSpaceWire_Open(ref IntPtr handle, uint nDeviceNum) ; ...
6 7
// ------------------- private properties ----------------------
8 9
const byte TRUE = 1; const byte FALSE = 0;
10 11 12 13 14 15 16
private enum USB_SPACEWIRE_EOP_TYPE{ NO_EOP = 0, EOP = (byte)0x80, EEP = (byte)0x40 } ...
17 18
// ------------------- public properties ----------------------
19 20 21 22
static public uint maxSizeReadPacket = 1024 * 1024; static public uint maxSizeSendPacket = 1024 * 1024; ...
23 24
// ------------------- Public Static Methods -------------------
25 26 27 28
public static int GetListDevices(out int[] listIDs, out DeviceType[] listType) public static int GetIndexFirstBrick() ...
29 30
// ------------------- Public Object Methods -------------------
31 32 33 34 35
public bool Open() public uint ReadPacketWait(out byte[] packetRead,bool indefinitely) ... public void Close()
36 37
// ------------------- Private Methods -------------------------
38 39 40
53
private StarDundeeBrick(int id) ...
54
Demo camera ontwikkeling Listing 4.3: Om de StarDundeeBrick klasse te gebruiken
1
1) Een Brick object verkrijgen om pakketten te versturen en te ontvangen
2 3 4 5 6
int[] listIDs; DeviceType[] listType; GetListDevices(out listIDs, out listType); StarDundeeBrick myBrick = GetBrick( GetIndexFirstBrick() );
7 8
2) Configuren van de Brick en de links starten
9 10 11 12 13
myBrick.Open(); myBrick.Config(true, true); myBrick.StartPort(1); myBrick.StartPort(2);
14 15
3) Starten om pakketten te ontvangen
16 17
myBrick.StartReceivePackets()
18 19
4) Een pakket versturen
20 21 22
byte[] myPacket = ["..."]; SendPacket(myPacket);
23 24
5) Een pakket lezen
25 26 27 28
byte[] packetRead; int length; length = ReadPacketWait(packetRead, false);
29 30
-------------------------------------------------------
31 32
Met isSendCompleted() kan men controleren of het pakket daadwerkelijk is ontvangen.
33 34
De maximum grootte van het pakket om te versturen en te ontvangen kan aangepast worden:
35 36 37
maxSizeSendPacket maxSizeReadPacket
4.3 Software ontwikkeling 4.3.5.2 TestExample Listing 4.4: Code functionaliteit van het testprogramma 1
public class TestExample{
2 3
Console.WriteLine("Test the SPW Brick: \n");
4 5
// Get the first brick found
6 7
StarDundeeBrick brick = StarDundeeBrick.GetBrick(StarDundeeBrick. GetIndexFirstBrick());
8 9
// Configure Brick and start links
10 11 12 13 14
brick.Open(); brick.Config(true, true); brick.StartPort(1); brick.StartPort(2);
15 16
//ToString method
17 18
Console.WriteLine(brick.ToString());
19 20
// Start receiving packets
21 22
if (!brick.StartReceivePackets()) return false;
23 24
brick.StartReceivePackets();
25 26
Console.WriteLine("\nType 'yes' to use a testpacket and type 'no' to input your packet or type any other key to quit!\n");
27 28
select = Console.ReadLine();
29 30 31 32 33 34 35 36
if(select == "yes"){ ... } else if(select == "no"){ ... }
55
56 37
Demo camera ontwikkeling
// ------------ Convert methods -----------------
38 39 40 41 42 43 44
public string dataToText( byte[] data, bool hex){ ... } public static bool GetInputBytes(string dataText, out byte[] data, bool hex){ ... }
45 46
}
4.3.5.3 LCMS:Sensor De komende secties die nu volgen in de software ontwikkeling is het deel C# code dat geport moest worden uit de bestaande Java code. Omdat het zinloos is de volledige C# code uit te leggen gaan we dit samenvatten door de twee grootste problemen, de enumeraties en het threading verhaal, en de klasse CommSpW die nodig was om te communcieren met de LCMS sensor bespreken. Om de gebruikte commando's en registers van de LCMS camera aan te spreken gebruiken we enumeraties. Een enumeratie is een gebruikersgedenieerd integer type. In Java zijn deze iets gecompliceerder dan in C#. In Java kunnen deze een deel van het programma, functies, bevatten. Om dit op te lossen is er in C# een enum (CMD) en een klasse (Command) geschreven. (listing 4.5)
Listing 4.5: Commanding the LCMS 1
// ------------------ Commanding the LCMS ----------------------
2 3 4 5
private readonly Command RESET = new Command(CMD.RESET) ... private readonly Command CM_D = new Command(CMD.CM_D);
6 7
// low level commands and registers, sent/filled with 0,1 or 2 arguments
8 9
10 11 12 13 14
[Flags] //allows to to perform bitwise operations on it so you can use to have settings for class. public enum CMD : uint { RESET = 0x49, ... , CM_D = 0x5A //Commands and Registers of the LCMS camera }
15 16
public class Command
4.3 Software ontwikkeling 17
{ // command and address members private readonly byte address;
18 19 20
// constructor: setup address based on the supplied command
21 22
public Command(CMD cmd) { this.address = (byte) cmd; //BUG solved by replacing address with cmd }
23 24 25 26 27
public void send(Communication c) { send((byte) 0, (byte) 0, c); }
28 29 30 31 32
public void send(byte arg1, Communication c) { send(arg1, (byte) 0, c); }
33 34 35 36 37
public void send(byte arg1, byte arg2, Communication c) { ... }
38 39 40
private static void calculateParity(byte[] arr) { ... }
41 42 43
}
57
58
Demo camera ontwikkeling
Het thread verhaal dat gebruikt wordt in Java is het volgende grote probleem. Een thread is een onafhankelijke stroom van instructies in een programma. Het is vaak wenselijk om twee zaken naast elkaar te kunnen uitvoeren. Met threads kunnen twee zaken gescheiden worden en blijft de goede interactie tussen het systeem en de gebruiker behouden. In de Java code zijn er twee threads aanwezig (PacketReceiver en ImageAssembler). De ene is nodig om de SpaceWire communicatie te ontvangen en de pakketten met pixels op te slaan, en de andere zal de pakketten met pixel ontleden en dit in een beeld buer steken. In C# lossen we dit op door de code in een lusje te schrijven. Dit is geschreven in de functie start (int frames). (listing 4.6)
Listing 4.6: De functie start (int frames) 1 2 3 4
public bool start (int frames) { switch (opmode) { ... }
5 6 7 8 9 10 11
//issue the GetNFrames(N) command if (frames == 0) frames = 128; // do continuous acquisition, infinite video streaming //1-127 get equal amount of frames /0 stops any current action after finishing the output //of the current frame and returns to the idle state
12 13 14 15
GET_N_FRAMES.send((byte) frames, getInterface()); running = true; //receive N frames of (near-)contiguous data
16 17 18
//PacketReceiver while(true){
19 20 21 22
23
this.rawPacket = comm.receive((4 + 513 * 2) * 2); // large enough for 2 packets in unpacked 16bit/pixel configuration // raw data packet undecoded used to store the unencoded HK and pixel data packets // in FF_MODE each packet holds (header and) one image line and is send sequentially;
24 25 26 27 28 29 30
if(rawPacket !=null)break; { //put raw packet in BUFFER try{ packetBuffer = rawPacket; }
4.3 Software ontwikkeling 31 32 33 34 35 36
59
catch (Exception ex){ System.Console.WriteLine("Exception: " + ex.Message); } } //ImageAssembler while(true){
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
int packetsDequeued = dequeueAndDispatchPackets(); if (0 == packetsDequeued) try{ System.Threading.Thread.Sleep(10); //no new packets since last call, time to relax } catch (Exception ex){ System.Console.WriteLine("Exception: " + ex.Message); } else break; } return true; }
4.3.5.4 CommSpW & Communication Om de LCMS sensor over SpaceWire te laten communiceren moet er een connectie opgebouwd worden en zijn er functies nodig om data te kunnen verzenden en te ontvangen. Dit gebeurt in de klasse CommSpW (listing 4.8) waarvan de klasse Communication een interface is. Interface is een soort abstracte klasse en bestaat enkel uit abstracte methoden en constanten. Hieruit kan men de communicatie van de klasse CommSpW gebruiken. (listing 4.7)
Listing 4.7: De interface klasse Communication 1 2 3 4 5 6
public interface Communication{ void connect(); void disconnect(); void send(byte[] data, int len); byte[] receive(int len); }
Listing 4.8: De klasse CommSpW 1 2
public class CommSpW : Communication {
60 3 4 5 6
Demo camera ontwikkeling private byte address = 0x5; //SPW start addresss private int linknum = 1; //USB devices is 1 based count, while PCI is 0 based (not used in LCMS board )
7 8 9 10
public CommSpW(byte adr){ address = adr; }
11 12
StarDundeeBrick brick = null;
13 14
public void connect(){
15 16
if (IsCheckBrickPresent()){
17 18 19
//Get SpaceWireDevice this.brick = StarDundeeBrick.GetBrick(StarDundeeBrick.GetIndexFirstBrick());
20 21 22 23 24 25
// Configure Brick and start links brick.Open(); brick.Config(true, true); brick.StartPort(1); brick.StartPort(2);
26 27 28 29 30 31
// Start receiving packets if (!brick.StartReceivePackets()){ throw new Exception("StartReceivePackets failed."); } }
32 33 34 35 36
public void disconnect(){ brick.StopReceivePackets(); brick.Close(); }
37 38 39
static bool IsCheckBrickPresent() { ... }
40 41 42
public void send(byte[] data, int len){
4.3 Software ontwikkeling bool status; byte [] tdata = new byte[Math.Min(data.Length, len) + 1]; tdata[0] = (byte)linknum; Array.Copy(data, 0, tdata, 1, Math.Min(data.Length, len));
43 44 45 46 47
if(true){ try{ bool tid = brick.SendPacket(tdata); } catch (Exception ex){ System.Console.WriteLine("Exception: " + ex.Message); } }
48 49 50 51 52 53 54 55 56
status = brick.isSendCompleted();
57 58
if(status){ Console.WriteLine("\tSend completed\n\n"); } }
59 60 61 62 63
public byte[] receive(int len){
64 65
byte[] packetRead = new byte[len]; uint length = brick.ReadPacketWait(out packetRead, false); byte[] outpacket = null;
66 67 68 69
if(length > 0){ outpacket = new byte[length-1]; Array.Copy(packetRead, 1,outpacket,0, length-1); //remove the address byte already here } return outpacket; }
70 71 72
73 74 75 76
}
61
62
Demo camera ontwikkeling
4.4 Analyse / Debug 4.4.1 Het PCB ontwerp Vooraleer een denitieve print besteld kon worden, moest er een prototype gemaakt worden. Dit om onvoorziene fouten op te sporen en weg te werken. Het PCB ontwerp werd gefabriceerd bij Eurocircuit en de componenten, die niet in stock van Cypress Semiconductor beschikbaar waren, werden apart aangekocht bij Farnell. In tussentijd is er in deze periode een cursus [17] gevolgd om de PCB correct te gaan solderen. Nadat de bestelling was geleverd, is er een PCB prototype gesoldeerd.
4.4.1.1 Debugging Er werden 3 fouten opgemerkt in het PCB ontwerp. Door een analyse te doen van het bestaande PCB van ESA met het aangepaste PCB, noteerde we alle spanningsvallen op de voornaamste punten (de 84 pinnen van de LCMS sensor, de regulatoren, de SpaceWire connector, etc.). Aan de hand van een oscilloscoop (g. 4.8) werd het prototype nagemeten. De eerste fout waren de regulatoren die niet werkten, deze moeten een hoge Enable hebben. Het werd tijdelijk opgelost door een draadje te solderen die de Enable pin met de voeding van de regulator verbindt. De tweede fout werd in de plaatsing van de weerstand R12 en de capaciteit C19 gevonden. Tijdens het solderen waren deze van plaats gewisseld. Bij het ontwerpen van de PCB was er onvoldoende ruimte om de naamlabels bij de juiste footprint te plaatsen. De derde fout is opgemerkt bij de condensator C34, het symbool en de footprint waren omgekeerd gepolariseerd en moesten dus aangepast worden in het PCB ontwerp.
Figuur 4.8: Debuggen van het PCB ontwerp met oscilloscoop.
4.4 Analyse / Debug
63
4.4.1.2 Testen Na aanpassing hebben we de PCB getest met de LCMS camera controle software in Java. Er ontstond een werkend prototype, hiermee kon vervolgens de software ontwikkeld worden.
4.4.1.3 Revisie In Altium werd het PCB ontwerp (versie 1.0) aangepast. De volgende updates waren nodig:
• Regulatoren(RG1, RG2) beschikken over een Hoge Enable. Pin 1 (Vin) en 3 (Enable) werden aan elkaar gekoppeld. • Condensator (C34) had een verkeerde plaatsing van zijn footprint. Deze werd omgedraaid. • De naamlabels van de footprints werden duidelijker geplaatst, in bijzonder de ontkoppelcircuits van de LCMS sensor. De fouten werden in het elektronische schema en in het PCB ontwerp rechtgezet. Daarnaast is er een versie log aangemaakt met de aanpassingen. Dit resulteerde in de denitieve print, LCMS board versie 1.1. In bijlage A,B,C is de componentenlijst (Bill of materials), het elektronische schema en het PCB ontwerp weergegeven. De nale print, met de componenten erop gesoldeerd, werd besteld bij Eurocircuit. Na de levering, is de PCB opnieuw getest. Het LCMS board versie 1.1 werkte correct en kan nu in de demo opstelling gebruikt worden.
4.4.2 De demo software De software is ontwikkeld in Microsoft Visual C# .NET Framework 1.1 in combinatie met BenchTools. De opdracht bestaat er in een C# `LCMS' driver te maken met specieke functies voor SpaceWire communicatie. Hiermee kan dan de basis functionaliteit van de bestaande Java code nagebouwd worden. Uit de LCMS driver wordt een DLL gegenereerd die we in BenchTools inladen. In BenchTools maken we de connectie en wordt de camera geprogrammeerd voor hij beelden gaat nemen. Dit programma doet dienst als Windows-based Application platform, hierin gaan we debuggen en testen. Door de knop Grab Frame te bedienen, wordt het beeld uitgelezen.
4.4.2.1 LCMS driver LCMS driver bestaat uit SpaceWire functionaliteit met een testprogramma en de LCMS functionaliteit die over de bestaande Java code beschikt. In g. 4.9 is het schema van SpaceWire USB-Brick interface weergegeven. Om deze te gebruiken waren de SpaceWire USB drivers [3] beschikbaar.
64
Demo camera ontwikkeling
Figuur 4.9: SpaceWire USB-Brick interface.
Het communicatieprotocol SpaceWire is geschreven in C# code dat in Visual studio gedebugt en getest is geweest. In g. 4.10 is het testprogramma in command-line-interface weergegeven. Met een loopback kabel is de communicatie getest door deze te plaatsen tussen poort 1 en poort 2 van de SpaceWire-USB Brick. Hiermee worden de pakketten met type data ontvangen.
Figuur 4.10: Command-line-interface om de SpaceWire functionaliteit te testen.
4.4 Analyse / Debug
65
Hierna volgde nog een eenvoudig grasche user interface (GUI) in Visual Studio, om het ook in een grasche tint tijdens de tussentijdse presentatie van januari 2009 te kunnen tonen. (g. 4.11)
Figuur 4.11: GUI based application om SpaceWire pakketten te versturen en te ontvangen.
4.4.2.2 BenchTools Nadat LCMS driver in Visual Studio geschreven was, kon deze in BenchTools als .DLL ingeladen worden. Naast de twee bestaande ethernet controllers van BenchTools was er een emulator nodig om deze aan de SpaceWire-USB Brick te koppelen. Door een connectie te maken met de knop Init, was de sensor via SpaceWire communicatie aan de PC gekoppeld. Vervolgens kon de sensor gecongureerd worden. Hierna volgde een controle van de voornaamste stappen om een `full frame` beeld uit de sensor uit te lezen. 1. upload the static conguration of the device (interface settings, ...) 2. upload the region of interest settings 3. upload the desired exposure time 4. upload the desired gain and oset for the PGA 5. set the W_M register for full-frame mode 6. issue the GetNFrames(N) command 7. receive N frames of (near-)contiguous data In de laatste stap (7) liep het mis. In BenchTools werd er maar geen pixelwaarden ontvangen omdat er volgens de SpaceWire-USB Brick geen data uit de sensor wordt verstuurd. We onderzochten dit in de Java code door bij elke stap, die nodig is om de sensor te congureren en daarna een beeld te nemen, een `println' te plaatsen die ons meer informatie gaf hoe commando's werden opgestuurd. Hierbij werd de nadruk nog is onderzocht op de byteconversie en het threadverhaal. Omdat in C# een byte als unsigned byte (0 - 255) en in Java als signed byte (-128 - 127) wordt
66
Demo camera ontwikkeling
gepresenteerd. De gelijkenis tussen beide bleek dezelfde hexadecimale code op te sturen. Na de hele opbouw door lopen te hebben en de code ervan gecontroleerd te hebben, kwamen we erop uit dat het probleem niet bij de C# code lag maar aan de SpaceWire USB-Brick. Als we de bestaande Java applicatie uitvoerde, ontdekten we dat dezelfde fouten optraden. De SpaceWire-USB Brick stuurde de volgende error signalen frequent tijdens het debuggen:
TX Status = Transfer Error: Could not nd the specied operation De SpaceWire USB-Brick is oine gegaan.
Error, read status of 6 Er kan geen data worden verstuurd of ontvangen.
Error, Couldn't read a reply packet with correct transaction ID De data die de brick ontvangt is fout en wordt verwijderd. Met deze problemen hebben we Star-Dundee ingelicht. Ten snelle reactie van de programmeurs in dienst werd verkregen. Na een aantal berichten konden zij de fout niet direct opsporen, hun test programma's bleken te werken op de SpaceWire-USB Brick. Men raadde vervolgens aan om de nieuwste driver en rmware versie van de Brick te installeren. Omdat deze nog niet beschikbaar was op de website, verkregen we een login en kon er een update verkregen worden. Na installatie werd de SpaceWire USB driver van versie 2.4 naar 2.44 gebracht. Er werden aanpassingen gedaan voor de nieuwe USB Brick en fouten in de Conguration library en RMAP packet library werden opgelost. Na deze update verkregen we de nodige pixelwaarden in de buer die het beeld gaan vormen. Op de volgende pagina is de g. 4.12 weergegeven, hier is duidelijk te zien dat de gevraagde 12 bit Word data met pixelwaarden worden ontvangen. Het gevraagde 12 bit Word wordt als output data ontvangen. Deze ontdekking kwam slechts op 28 april waardoor deze nog niet volledig onderzocht kon worden om deze nog in de thesis tekst toe te voegen. Het probleem was vervolgens nog niet volledig opgelost, na een aantal disconnects en connects kon er opnieuw geen data ontvangen worden. Dit probleem wordt nu nader onderzocht. Daar de volledige Java functionaliteit ingebouwd is, moet de vraag gesteld worden waarom de SpaceWire-USB Brick de data slechts af en toe kan ontvangen. Er zal een andere SpaceWire-USB Brick van ESA worden meegebracht om beiden met elkaar te vergelijken. Na g. 4.12 volgt g. 4.13, daar het programma BenchTools is weergegeven. In de pixelarray van BenchTools zal uiteindelijk het beeld gevormd worden.
4.4 Analyse / Debug
Figuur 4.12: Ontvangen van pixelwaarden die het beeld gaan vormen.
67
68
Demo camera ontwikkeling
Figuur 4.13: LCMS sensor evalueren in BenchTools.
4.5 Besluit
69
4.5 Besluit De twee laatste delen van de ontwikkeling houden de evaluatie van de PCB in en het uitschrijven van de demo software. Het bestaande PCB ontwerp werd geoptimaliseerd, een prototype werd ontwikkeld en hierna is een revisie gedaan dat uiteindelijk het ontwerp vormde. Deze kan vervolgens in de toekomst dienen in de demo opstelling van de LCMS demo camera. Om de LCMS sensor aan te sturen is er een protocol nodig om te communiceren, dit is het SpaceWire protocol. Hiervan hebben we de functionaliteit in C# geschreven en deze hierna getest in het test programma. Deze functionaliteit kan nu in Cypress worden gebruikt als SpaceWire controller naast twee bestaande ethernet-gebaseerde sensor controllers. Hiermee kunnen sensoren die met SpaceWire communiceren automatisch herkend worden in BenchTools en vervolgens aangestuurd worden. De laatste opdracht bestond erin de bestaande Java Code in C# te porten. Hiervan hebben we de nodige basis functionaliteit gebruikt. Dit is de LCMS driver. Deze driver is vervolgens in BenchTools ingeladen zodat de sensor geprogrammeerd en getest kon worden. Tijdens het debuggen van de LCMS driver is er een fout opgetreden met het ontvangen van pixelwaarden. We zijn gebotst op het probleem dat de SpaceWire-USB Brick incorrect werkte. Nadat dit probleem is gemeld bij Star-Dundee en de nodige driver en rmware update gedaan te hebben, werd er pixelwaarden ontvangen en kon uiteindelijk het beeld gevormd worden. Door dat dit probleem in een laat stadium van de thesis ontdekt is, hebben we het resultaat van de beeldopname in BenchTools eruit gelaten. Het probleem zal verder onderzocht worden door een SpaceWire USB-Brick van ESA te gaan gebruiken zodat eventueel de demo software op het einde van het academiejaar correct zal werken.
70
Demo camera ontwikkeling
Hoofdstuk 5
Conclusie 5.1 Algemene conclusie Het uitwerken van deze thesis was een echte uitdaging. Allereerst werd een professioneel PCB ontworpen. Het ontwerpen van een PCB was een leerrijke ervaring en werd naast mijn ingenieursopleiding bijgeleerd. Voor de demo software hebben we zowel onderzoek gedaan naar de programmeertalen Java en C#. Op De Nayer Instituut werd Java uitgebreid gezien. Met C# is weer een nieuwe programmeertaal bijgeleerd. Het resultaat is een SpaceWire controller die functionaliteit geeft aan sensoren die de SpaceWire interface bezitten. Daarnaast is er een conversie gedaan van Java naar C# om de LCMS demo software ervan te gebruiken. Na de vele problemen die we gekend hebben met de SpaceWire-USB Brick is er uiteindelijk toch data ontvangen die de pixelwaarden van het beeld bevatten. De Demo software zal voor het einde van academie jaar nog in BenchTools gepresenteerd worden.
5.2 Bedenkingen voor verder werk Er zal nog verder onderzoek dienen te gebeuren na het onjuist functioneren van de SpaceWire USB-Brick. Het probleem werd echter deels verholpen na het updaten van de nieuwe driver en rmware. Toch blijft de vraag waarom de SpaceWire-USB Brick op bepaalde tijden wel bleek te werken. Verder kan er nog een datasheet worden geschreven die het gemaakte PCB en de demo software in C# bespreekt. Zo kunnen klanten die de demo opstelling gebruiken de ontwikkelde code evalueren.
72
Conclusie
B¼lage A
Bill of materials Dit gedeelte bevat de Bill of materials in 3 delen:
• Bill of materials deel 1 (g. A.1) • Bill of materials deel 2 (g. A.2) • Bill of materials deel 3 (g. A.3)
74
Bill of materials
75
76
Bill of materials
Figuur A.3: Bill of materials deel 3.
B¼lage B
Schematisch LCMS board Dit gedeelte bevat het elektronische schema (A3 formaat op CD) van het PCB ontwerp:
• Schematisch LCMS board (g. B.1)
78
Schematisch LCMS board
Figuur B.1: Schematisch LCMS board.
B¼lage C
PCB LCMS board Dit gedeelte bevat de voor-en achterkant van het gemaakte PCB ontwerp:
• PCB LCMS board voorkant (g. C.1) • PCB LCMS board achterkant (g. C.2)
80
PCB LCMS board
Figuur C.1: PCB LCMS board voorkant.
81
Figuur C.2: PCB LCMS board achterkant.
82
PCB LCMS board
B¼lage D
C-sharp functies
Figuur D.1: Voorstelling van de LCMS demo software in owchart.
De volgende lijst geeft de voornaamste functies en klassen die in de LCMS driver (g. D.1) worden gebruikt.
Namespace TestRunner2 class Class1
static void Main(string[] args) public void Run() static bool IsCheckBrickPresent()
Namespace LCMS public class StarDundeeBrick
public enum DeviceType
84
C-sharp functies
public static int GetIndexFirstBrick() public static int GetListDevices(out int[] listIDs,out DeviceType[] listType) public static StarDundeeBrick GetBrick(int id) public public public public public public public public public public public public public public public public public public public public
bool BrickOpened bool Open() bool Cong(bool isRmap, bool LSBcrc) bool SendPacket(byte[] buSend) bool SendPacket(byte[] PathAddr, byte[] packet ) bool isSendCompleted() void ResetSending() bool Reset() void Close() bool StartReceivePackets() uint ReadPacketWait(out byte[] packetRead, bool indenitely) bool IsWaitingDrivers() void InterruptReadPacketWait() void StopReceivePackets() bool PortRunning(byte port) byte GetPorts() bool StartPort(byte port) bool setNetworkID(uint value) void SetLinkSpeed(uint divider) override string ToString()
public class TestExample
public static bool TestBrick() public string dataToText(byte[] data,bool hex) public static bool GetInputBytes(string dataText, out byte[] data, bool hex) public class CommSpW : Communication
public CommSpW(byte adr) public void connect() public void disconnect() static bool IsCheckBrickPresent() public void send(byte[] data, int len) public byte[] receive(int len) public interface Communication
85 void connect(); void disconnect(); void send(byte[] data, int len); byte[] receive(int len); public class LCMS:Sensor
public Communication getInterface() public LCMS() public enum CMD : uint public Command(CMD cmd) public void send(Communication c) public void send(byte arg1, Communication c) public void send(byte arg1, byte arg2, Communication c) private static void calculateParity(byte[] arr) public override void UploadParameters() public override void Init() public override void StartSequencer() public void GrabFrame2(FillFactory.BenchTools.ImageProcessing.BindexClass bindex, int FrameNr)
private int[] assemblePixelData(Window[] w) private int dequeueAndDispatchPackets() public public public public
bool run() bool start (int frames) void reset() void stop()
public bool doStaticCong() public void SetPacking(int mode) private void initProgramMem() private void uploadROI() public void uploadFFPga() public void uploadFFExpTime()
86
C-sharp functies
public void uploadMode() private void uploadTH() private void uploadFBL() private void uploadOPS() private int bbToInt(byte b1, byte b2) private int bbToIntHigh(byte b1, byte b2) private void switchPixelData() private int[] decodeFFLinePacket(byte[] raw, int oset) void dispatchPacket(byte[] raw) private bool getHkPacket() private void decodeHkPacket(byte[] raw, int oset) class StatisticalData private bool checkWSize(int s) public void setSize(int s) public void setRoi(int xmin, int xwidth, int ymin, int yheight, int expTimeInMsec, int oset, int gain) public void setWindow(int index, int x1, int y1, int width, int height, int expTimeInMsec, int oset, int gain) public Window[] getWindows(bool undistortedOnly) public void resetWindow(int index) public void resetAllWindows() public bool isOverlapping(int x1, int y1) public class Roi
public Roi(int xP0, int yP0, int xP1, int yP1) public Roi(int xP, int yP) public int width() public int height() public int pCount() public void calculateCenter() public bool overlapsWith(Roi r) public bool overlapsWith(int x1, int y1)
87 public void mergeWithRoi(Roi r) public void addPoint(int i, int j) public class Window
public Window(int x1, int y1, int width, int height, int tExpInMsec, int oset, int gain) public void calcStats(int[] data ) private int[] index1DTo2D(int index1D, int width) public void[] centroid() public int[] binarise(int threshold) public int[] extractPixels(Roi r) public class Pixel
public Pixel(int xP, int yP, int v) public Pixel(int xP, int yP) public int getValue() public void setValue(int v)
88
C-sharp functies
Bibliograe [1] LCMS Detailed Specication - ICD, 1st ed., Cypress Semiconductor, januari 2008. [2] Altium, Altium designer tutorials, LearningGuides/, 2008.
http://www.altium.com/les/AltiumDesigner6/
[3] S. McClements, C. Parkes, SpaceWire USB drivers Version 1.1/2.4 (cd-rom). Universiteit STAR-Dundee, 2004.
Schotland:
[4] D. Van Aken, Ontwikkeling en verbetering van elektro-optische metingen op cmosbeeldsensoren, Master's thesis, Hogeschool Antwerpen, 2002. [5] J. Wauters, Intelligente camera's, InterConnect, vol. 1, p. 13, 1997. [6] M. D'hoedt, Evaluatie van videosensoren, Master's thesis, Katholieke Hogeschool Brugge, 2005. [7] H. Bracquene, Flemish space companies, Vlaams Ruimtevaart Industriëlen, vol. 11, no. 2, pp. 23, 2006. [8] R. Zenick, Low-power coarse star tracker, http://www.aeroastro.com/publications/ SSC03-X-7.pdf, 2008. [9] G. Meynants, Iris3 visual monitoring camera . . . on a chip, http://microelectronics.esa. int/mpd2004/y_5feb_micro_presentation2.pdf, 2008. [10] ICT-Perspective, Nieuwe spacewire standaard voor supersnelle dataverbindingen aan boord van satellieten, http://www.dto.tudelft.nl/algemeen/item/uitgaven/03-01/space.htm, 2008. [11] ESA, Earth explorers, http://esamultimedia.esa.int/docs/EEUCM/EarthCARE_TPA. pdf, 2004. [12] S. Parkes, Spacewire: serial point-to-point links, http://ams.cern.ch/AMS/Electronics/ Docs/spacewire_std_draft_c.pdf, 2000. [13] AEROFLEX, Spacewire product familiy, http://ams.aeroex.com/productpages/RH_ spacewire.cfm, 2008.
90
BIBLIOGRAFIE
[14] I. C. Society, EEE Standard for Heterogeneous Interconnect (HIC) (Low-Cost, Low-Latency Scalable Serial Interconnect for Parallel System Construction). IEEE Standard 1355-1995. [15] T. communications Industry Association, Electrical Characteristics of Low Voltage Dierential Signaling (LVDS) Interface Circuits. Standard ANSI/TIA/EIA-644 1995. [16] Farnell, Farnell belgië, http://be.farnell.com/, 2009. [17] C. Inventor, How to solder correctly, http://www.curiousinventor.com/guides/How_To_ Solder, 2009. [18] SpaceWire USB Driver - API User Manual, v2.4 ed., STAR-Dundee, oktober 2006.
CD