Home

lab4 - Cristinel Ababei

image

Contents

1. 4 data transferred n bytes acknowledge Read Transaction From master to slave A Acknowledge From slave to master A Not Acknowledge 8 Start condition P Stop Condition Figure 8 I2C write and read transactions 5 The LPC17xx I2C interfaces are byte oriented and have four operating modes master transmitter mode master receiver mode slave transmitter mode and slave receiver mode Please read Chapter 19 of the LPC17xx user manual for details on each of these operating modes 5 Also please read NXP I2C bus specification and user manual for even more details 6 I2C Device Addressing All I2C addresses are either 7 bits or 10 bits The use of 10 bit addresses is rare Most common chips use 7 bit addresses we can have up to 128 devices on the I2C bus When sending out the 7 bit address we still always send 8 bits The extra bit is used to inform the slave if the master is writing to 1t or reading from it If the bit is zero the master is writing to the slave If the bit is 1 the master is reading from the slave The 7 bit address is placed in the upper 7 bits of the byte and the Read Write R W bit is in the LSB 6 Wii NunChuck The Wii NunChuk is an input device with a joystick two buttons and a three axis accelerometer as illustrated in Fig 9 10 The three axes X Y and Z correspond to the data produced by the accelerometer Joystick X is right left Y is forward backwards and Z is up
2. possible to compute pitch rotation around the X axis roll rotation around the Y axis and yaw rotation around the Z axis For joystick replacement it is sufficient to compute after range conversion to 512 511 pitch atan roll atan m Remember that this 1s for 360 degrees and a reasonable of motion to measure is perhaps 90 degrees Please read more about NunChuck hacking in the cited references 10 and on the Internet 7 Example 3 NunChuck data amp moving circle according to joystick displayed on LCD display of the MCB1700 board Note Because I have only one NunChuck and a single NunChuck adaptor and because this example requires some wiring you will not actually do this example in the lab I will demonstrate it in each of the lab sessions or in class However you should read and study the source code to get familiar with this example and how it uses I2C In this example we use the I2C to connect the NunChuck to the board We ll display the data read from the NunChuck on the 320x240 pixels display and we ll use this data to move around a circle drawn on the display The files necessary for this example are located in I2C NunChuck folder as part of the downloadable archive for this lab This is actually the whole uVision project directory Just copy it to keil_ examples this is the code bundle of lab 2 Then clean and re build the project Download to the board Connect the N
3. should also drive the 8 LEDs as in example 1 1 Credits and references 0 Textbook Sections 18 4 5 References on CAN 1 LPC17xx user manual Chapter 16 http www nxp com documents user manual UM10360 pdf 2 Schematic Diagram of the MCB1700 board http www keil com mcb1700 mcb1700 schematics pdf 3 Pointers on CAN related information Keil CAN Primer http www keil com download files canprimer v2 pdf CAN Introduction http www esd electronics usa com Controller Area Network CAN Introduction html CAN Information http hem bredband net stafni developer CAN htm CAN Primer http www dgtech com images primer pdf CAN Tutorial http www computer solutions co uk info Embedded tutorials can tutorial htm Jonathan W Valvano s lecture 15 http users ece utexas edu valvano EE345M view15_CAN pdf Note his lectures are based on Stellaris MCU s however the basics about CAN are the same Entry on Wikipedia http en wikipedia org wiki CAN bus CAN Specification Version 2 0 1991 http esd cs ucr edu webres can20 pdf NXP s Bosch CAN protocol standard http www freescale com files microcontrollers doc data sheet BCANPSV2 pdf CAN Bus Description http www interfacebus com CAN Bus Description Vendors Canbus Protocol html Marco Di Natale Understanding and using the Controller Area Network 2008 http www inst eecs berkeley edu ee249 fa08 Lectures handout_canbus2 pdf
4. sprinti text burfer DId 2 Dutton GLCD Dasplaystrang l 10 EFI aimee L JEext butter SPIIDLI texrt burrer 0210 6 Dutton GLCD Daisplaystring So l0 Fi aime Lt text butter ext Durfrer 15
5. to connect one or more masters with one or more slaves The case of a single master the LPC1768 communicating with two slave devices is illustrated in Fig 5 In this configuration a single master LPCxxxx communicates with two slaves over the pair of signal wires SCL serial clock line and SDA serial data address Example slave devices include temperature humidity and motion sensors as well as serial EEPROMs serial RAMs LCDs tone generators other microcontrollers etc OTHER DEVICE WITH OTHER DEVICE WITH I 2C INTERFACE 3C INTERFACE Figure 5 I2C bus configuration Electrically the value of the two signal wires is high unless one of the connected devices pulls the signal low The two pull up resistors in Fig 5 force the default value of the two bus wires to VCC typically 3 3V Any device on the bus may safely force either wire low to GND at any time because the resistors limit the current draw however the communication protocol constrains when this should occur To communicate a master drives a clock signal on SCL while driving or allowing a slave to drive SDA Therefore the bit rate of a transfer is determined by the master The I2C Physical Protocol Communication between a master and a slave consists of a sequence of transactions where the master utilizes the SCL as a clock for serial data driven by the master or a slave on SDA as shown in Fig 6 When the master wishes to talk to a slave it begin
6. to learn more about CAN Also take a look at the datasheet of the NXP s TJA1040 High speed CAN transceiver integrated circuit included in the downloadable archive of this lab 4 3 Example 1 CAN2 CANI loopback on the same board The files necessary for this example are located in CAN Keil470 folder as part of the downloadable archive for this lab This is actually the whole uVision project directory Just copy it to keil examples this is the code bundle of lab 2 Then clean and re build the project Download to the board Connect the serial cable as shown in Fig 3 using the adaptor from your TA Observe operation and comment Figure 3 Block diagram of example 1 4 Example 2 CAN2 of board A sends to CANI of board B This 1s basically the same example as in the previous section You do not need to create another uVision project To do this example work with your neighboring team to realize the configuration shown in Fig 4 Use the serial cable to connect CAN2 of the transmitter board board A to the CANI of the receiver board board B Tune the potentiometer of board A and observe that it s received by board B which drives its 8 LEDs and also displays the data on the LCD Receiver Transmitter E TE zT w mr o saan 2 LI aT a T A E E Ng t ce his Figure 4 Block diagram of example 2 5 I2C Introduction I2C inter integrated circuit 1s a two wire protocol used
7. x axis bytes gt 2 amp 0xD5j accel y axis bytes gt gt 4 UxU3 accel z axis 49 bytes gt gt O amp DEDI void NunChuck print date init void this should be called once only GLCD SetTektColor White GLCD Clear Black clear graphical LCD display set all pixels to Black GLCD SetBackColor Black set background color for when characters text is printed GLCD SetTextColor White GLCD Displayotring 0 D FI This is I2C example GLCD DisplayString l 0 FI Data from NunChuck GLCD DisplavsLtringi2 2 EI joys e GLCD Dasplavystraing 3 2 EI j3o0yY 12 GLCD DaisplayBtraingil 2 PII TAO e GLCD DisplaysBrtringio 2 Pl acer 33 GLCD Displavstraingio 2 PI aces 3 GLCD DisplayString 2 EFI 2 a 2 GLCD DaisplaysString 9 2 PIE C at s void NunChuck print data void this is called as many times as reads from the NunChuck GLCD SetTextColor White sprinti text burrfer 050 Joy x axis GLCD DisplaysStrangi2 10 FI Ginto Lt text butter Sprintrf text butter 050 Joy y axis GLCD DaisplaysStrang 2 10 Pi aimee L JEext butter Sprintr text burfer S0JO accel x axis 7 GLCD DisplaysStrang 4 10 Fi aimee t Jtext butter sprinti text butter 040 accel y axis GLCD DisplesysStraing 3j 10 FI aimee L Eext butter Sprintr text Durrer 040 accel z axis GLCD DisplaysStrangi o 10 Fil aimee t t
8. CAN PPT presentation at CMU http www ece cmu edu ece649 lectures 11_can pdf 4 NXP s TJA1040 High speed CAN transceiver integrated circuit http www nxp com documents data_sheet TJA1040 pdf References of I2C 5 LPC17xx user manual Chapter 19 http www nxp com documents user_manual UM10360 pdf 6 Pointers on I2C related information NXP I2C bus specification and user manual http www nxp com documents user_manual UM10204 pdf tutorial 1 http www best microcontroller projects com 12c tutorial html tutotial 2 http www robot electronics co uk acatalog I2C_Tutorial html tutorial 3 http embedded lab com blog p 2583 Wikipedia entry http en wikipedia org wiki I oC2 B2C 10 7 Lab manual of course http homes soic indiana edu geobrown c335 Chapter 9 8 http www 12c bus org addressing 9 I2C vs SPI http www byteparadigm com applications introduction to 12c and spi protocols 10 Pointers on NunChuck Robotshop http www robotshop com ca content PDF inex zx nunchuck datasheet pdf Chad Philips Read wii nunchuck data into arduino http www windmeadow com node 42 Wikipedia Wii remote http en wikipedia org wiki Wi Remote Wiibrew Wiimote Extension Controllers http wiibrew org wiki Wiimote Extension Controllers Dangerousprototype http dangerousprototypes com docs Wii Nunchuck quick guide Freescale Semiconductor Tilt sensing using linear accelerometer
9. Lab 4 CAN and I2C EE 379 Embedded Systems and Applications Electrical Engineering Department University at Buffalo Last update Cristinel Ababei March 2013 1 Objective The objective of this lab is to learn about Controller Area Network CAN We ll do this by experimenting with an example that on board A converts ADC the value of the potentiometer and sends it via CAN to board B where the LEDs will be turned on off by the received value The transmitted and received data are displayed on the LCD screens of both boards We ll also study I2C communication protocol and use a Wii NunChuck to control a moving circle on the LCD display 2 CAN Introduction This discussion is based on Chapter 16 of the LPC17xx user manual 1 Please take time to read the aforementioned chapter completely CAN Controllers Controller Area Network CAN is the definition of a high performance communication protocol for serial data communication The CAN Controller of the LPC1768 microcontroller supports 2 CAN controllers and buses 11 bit identifier as well as 29 bit identifier is designed to provide a full implementation of the CAN Protocol according to the CAN Specification Version 2 0B Microcontrollers with this on chip CAN controller are used to build powerful local networks by supporting distributed real time control with a very high level of security The applications are automotive industrial environments and high speed networks as well as low
10. adius if x new lt 0 radius x new radius if Joy y axis gt 190 dy delta lse if joy y axis lt 90 1 dy delta else dy 0 y new y prev dy if y new gt 240 radius y new 240 radius if y new 0 radius y new radius if x new x prev y new y prev must move circle first erase the circle at previous location GLCD SetTextColor Black CRIS draw oxrcle x prev y prev radius then re draw at new location GLCD SetTextoolor Yellow CRIS draw circle x new y new radius x prey x new y prev y new d long delay such that I have enough time to release joystick and have the circle stay at new location this is a hack and should be modified to work nicely and to use rotations delay dirty OxlI0D000 void NunChuck translate data void int bytes IZUSIaveBurrerlPOBT USED IS joy x axis IZCOSlaveButfer PORT USED 0 joy y axis IZOSlayeButrer PORT USED 1 I2CSlaveBuffer PORT USED accel x axis 2 2 accel y axis IIZCSlaveBuffer IPOBT USED o lt 2 3 accel z axis I2C2olaveBuffer lPORT USED 4 lt 273 Z puctonu 0 eG button Uy byte I2CSlaveBuffer PORT USED 5 contains bits for z and c buttons it also contains the least significant bits for the accelerometer data if byte5 gt gt 0 amp 1 z Dutton 1 if byte5 gt gt 1 amp 1 14 c button 1j accel
11. cost multiplex wiring The result 1s a strongly reduced wiring harness and enhanced diagnostic and supervisory capabilities The CAN block is intended to support multiple CAN buses simultaneously allowing the device to be used as a gateway switch or router among a number of CAN buses in various applications The CAN module consists of two elements the controller and the Acceptance Filter All registers and the RAM are accessed as 32 bit words CAN Controller Architecture The CAN Controller is a complete serial interface with both Transmit and Receive Buffers but without Acceptance Filter CAN Identifier filtering is done for all CAN channels in a separate block Acceptance Filter Except for message buffering and acceptance filtering the functionality is similar to the PeliCAN concept The CAN Controller Block includes interfaces to the following blocks see Fig 1 APB Interface Acceptance Filter Nested Vectored Interrupt Controller NVIC CAN Transceiver a separate chip on the MCB1700 board shown in Fig 2 Common Status Registers Figure 1 CAN controller block diagram 1 Kl GND Ok CANI 33V 5 R3 E ND j ll 5 POLO R5 3 10 OR a a PO 1 I N SubD 9M ci i GND l i ATO 5 OR CAN2 R2 3 GND 10k ENET_MDC CAN ETH MCB1750 only 100n GND Figure 2 Portion of the schematic diagram of MCB1700 board that shows the CAN1 2 connections 2 Please read through the pointers suggested 3
12. down accelerometer only C button 3 3V y AU E SDA N C 4 aN M Analog joystick Z button Ni i 4 7 L sensor is installed in 1 right angle axis with TT joystick m GND sa 7 Handheld Pin assignment of Nunchuk connector M See from front view i Hi i 3 axis acceleromoter j 2 Nunchuk component Figure 9 NunChuck basic information Y g Z C button a gt a Z button X x Fa M g x a d x Ae J Analog joystick X j bw p Fi M Figure 10 NunChuck X Y Z The NunChuck communicate via I2C We ll hook the NunChuck to the I2C1 bus of the LPC1768 microcontroller on the MCB1700 board We ll initialize the Nunchuk to a known state and then to regularly poll its state The data are read from the NunChuck in a six byte read transaction These data are 6 formatted as illustrated in Fig 11 and are read beginning with byte 0x0 little endian The only complication with this format is that the 10 bit axis accelerometer data are split Joystick JX Joystick JY Accelerometer A X 8 2 Accelerometer AY 9 2 Accelerometer A Z 8 2 AX LO Figure 11 Formatting of data from NunChuck The NunChuck is a slave I2C bus device It has 2 slave IDs for writing OxA4 and reading 0xA5 data which is shown in Fig 12 a2 0o s o eogJys yjo jmuw Figure 12 Slave IDs Communication with the NunChuk consists of two p
13. g only purposes NunChuck phasel init Note Be careful with dirty fixed delays realized with for loops From device to device or even same device with different write length or various I2C clocks such delay may need to be changed however it s good to have a break point between phases 6 for ever loop while 1 lf ia gest stuff for 1 0 1 lt BUFSIZE i44 I2CSlaveBuffer PORT USED a 0x00 b NunChuck phase 2 NunChuck phase2 read Nu nChnck translate data NunChuck print data c re draw the circle to mimic movement if necessary Note joy x axis joy y axis have values in range 30 230 with mid range value of about 130 when the joystick rests implement the simplest method to move the circle around whenever joy x axis 190 230 upper values in its range keep shifting the circle to the right jj whenever joy x a8x15 30 0 lower values in its range keep shifting the circle to the left gt whenever joy x axis is in the mid range do not move circle 13 apply same logic for joy x axis TODO assignments move the circle based on the rotations i e do not use joystick use buttons Z and C to increase or decrease the radius of the circle displayed on LCD Lr Joy X axis gt 1907 dx delta else if Joy x axis lt 90 d dx e delraj else dx 0 x new Xx prev dx it x new gt 320 ragdlus x Dew 320 r
14. hases an initialization phase executed once in which specific data are written to NunChuk and a repeated read phase in which the six data bytes are read Each read phase consists of two transactions a write transaction which sets the read address to zero and a read transaction Initialize start NunChuk command The initialization consists of two write transactions each of which writes a single byte to a register internal to the I2C slave reg 0xf0 0x55 reg Oxfb 0x00 Normally this done once only The read process consists of writing a 0 and then reading 6 bytes of data Conversion command 0x00 Send this command to get all sensor data and store into the 6 byte register within Nunchuk controller This must be executes before reading data from the Nunchuk Data read command Send the slave ID for reading 0xA5 and wait for the stream data 6 byte from the Nunchuk The joystick data are in the range 0 255 roughly centered at 128 The dynamic range 1s somewhat less than the full range approximately 30 220 The accelerometer data are in the range 0 1023 where 0 corresponds to 2g and 1023 corresponds to 42g The accelerometer can be used both to detect motion acceleration but also as a tilt sensor when it is not in motion because we can use the earth s gravitational field as a reference Suppose we have measured values of gravity in three dimensions Gx Gy Gz Then Gi G G lg From this it is
15. igh defines a Stop There are three types of transactions on the I2C bus all of which are initiated by the master These are write read depending on the state of the direction bit R W and combined transactions The first two of these illustrated in Fig 8 are 1 Write transaction Data transfer from a master transmitter to a slave receiver The first byte transmitted by the master 1s the slave address Next follows a number of data bytes The slave returns an acknowledge bit after each received byte unless the slave device is unable to accept more data 2 Read transaction Data transfer from a slave transmitter to a master receiver The first byte the slave address 1s transmitted by the master The slave then returns an acknowledge bit Next follows the data bytes transmitted by the slave to the master The master returns an acknowledge bit after all received bytes other than the last byte At the end of the last received byte a not acknowledge is returned The master device generates all of the serial clock pulses and the START and STOP conditions A transfer is ended with a STOP condition or with a repeated START condition Since a repeated START condition is also the beginning of the next serial transfer the I2C bus will not be released S Slave Address R W 0 A Data A Data A A P 4 data transferred n bytes acknowledge Write Transaction S Slave Address R W 1 A Data A Data A P
16. nsists of two phases phase 1 initialization phase executed once in which specific data are written to the Nunchuk Essentially initialization consists of two write transactions each of which writes a single byte to a register internal to the I2C slave reg Oxf0 0x55 reg Oxfb 0x00 phase 2 repeated read phase in which six data bytes are read again and again each read phase consists of two transactions a write transaction which sets the read address to zero and a read transaction NOTES 3 I2CO0 only supports fast mode that the NunChuck uses When I2CO is used the pin connections are SDA P0 27 SCL P0 28 When I2C1l is used the pin connections are SDA P0 19 SCL P0 20 void Nunchuck phasel init void this function should be called once only Mints t ag I2CWriteLength PORT USED 3 write 3 bytes I2CReadLength PORT USED 0 read 0 bytes iZCMastereurter PORT USED 0 NUNCHUK ADDRESS SLAVEI i12CMasterBurfer PORT USED I OxF0 at adress OxFO of NunChuck write I2CMasterBuffer PORT USED 2 0x55s data 0x55 I2CEngzine PORT USED 3j should I introduce a delay people say it s useful when debugging delay dirty Ox100000 I2CWriteLength PORT USED 3 write 3 bytes I2CReadLength PORT USED 0 read 0 bytes I2CMasterBuffer PORT USED 0 NUNCHUK ADDRESS SLAVE1 1 2 I2CMasterBuffer PORT USED OxFB at adress OxFB of NunChuck write I2CMaste
17. rBuffer PORT USED 0x00 data 0x00 I2UEDngine PORT USED jj void NunChuck phase2 read void l this is called repeatedly to realize continued polling of NunChuck uinti ij I2CWriteLength PORT USED 2 write 2 bytes I2CReadLength PORT USED 0 read 6 bytes I2CMasterBuffer PORT USED 0 NUNCHUK ADDRESS SLAVE1 I2CMasterBuffer PORT USED 1 0x00 address IzCEnginet PORT USED J delay dirty 0x10000 I2CWriteLength PORT USED 1 write 1 bytes I2CReadLength PORT USED 6 read 6 bytes I2CMasterBuffer PORT USED 0 NUNCHUK ADDRESS SLAVEZ IZzCEngine PORT USED when I2CEngine is executed 6 bytes will be read and placed into I2CSlaveButfter I 12 int main void ninrpozr 1j ULnt22s t x prevelou y prev 120 uint322 t x new 100 y newsl2D lnt22 Lr dx e4 dy 4 delta 5 rogiuse ib l1 Initializations of GLED and SER GLCD Init GLCD DetTextCcolor Yellow CRIS draw Gircle 160 120 radius NunChuck print data initi 2 SystemClockUpdate updates the SystemFrequency variable SystemClockUpdate 3 Init I2C devices though we ll use only I2C1 I2CU0IBit 17 loCllnzxbt 43 l202lInibt J 4 LPC SC PCONP 1 lt lt 15 LPC_GPIOO gt FIODIR 1 lt lt 21 1 lt lt 22 LPC GPIO0 FIOCLR 1 lt lt 21 LPC GPIO0 FIOSET 1 lt lt 22 5 NunChuck phase 1 search for i2c devices debu
18. s 2012 11 Wii NunChuck adaptor https www sparkfun com products 928 1 APENDIX A Listing of the main source code file for example 3 include lt stdio h gt include lt stdlib h gt include lpcl7xx h include type h include i2c h include GLCD h include CRIS UTILS h wold MunChuck translate data velo j void Nunchuck print data ini void void Nunchuck print data void void search for 120 GOSVIOGGSU VOLO define FI 1 Use font index 16x24 define PORT USED 1 define NUNCHUK ADDRESS SLAVE OxA4 define NUNCHUK ADDRESS SLAVE2 0xA5 v latile int Joy x axi volatile int Joy y ax15j volgtlle int seoQuel x axi j volatile int accel y axis volatile int accel s exis 0 0 volatile int z button volatile int 6 D tton extern volatile guint8 t I2CMasterBuffer I2C PORT NUM BUFSIZE BUFSIZE 64 extern volatile uint t I205laveBurffer I2C PORT NUM BUFO IZE extern volatile uint32 t I2CReadLengtn 12C PORT NUM extern volatile uint2o2 t IZUWriLeLengthil2o PORT NUMI char text buffer s volatile uint8 t ack received ack sent debugging only we ll use delay dirtyi as a software delay function it should produce about a second when del 1 24 or so of delay depending on CCLK volatile uinto2 t temp void delay dirty uint os E del 11 di fi 4 Ti r7 7 i zy if if i Li Uints2 t Xj for i20 i del i temp i Communication with the Nunchuk co
19. s by issuing a start sequence on the I2C bus A start sequence is one of two special sequences defined for the I2C bus the other being the stop sequence These are also referred to as Start condition S and Stop condition P SDA TALES XXX XX CS a N SCL TINANA fr rx ee ee ee 3 P Figure 6 I2C physical protocol A transaction consists of a sequence of bytes Each byte 1s sent as a sequence of 8 bits The bits of each byte of data are placed on the SDA line starting with the MSB The SCL line 1s then pulsed high then low For every 8 bits transferred the device receiving the data sends back an acknowledge bit so there are actually 9 SCL clock pulses to transfer each 8 bit byte of data If the receiving device sends back a low ACK bit then it has received the data and 1s ready to accept another byte If it sends back a high Not Acknowledge NACK then it is indicating it cannot accept any further data and the master should terminate the transfer by sending a stop sequence sDA _ D7 D6 D5 D4 D3 D2 D1 DO ACK seck tL 2L J3L Jal sl Je jJ fa a Figure 7 Illustration of sending of 1 byte of data The data may be sent by either the slave or the master as the protocol dictates and the ACK or NACK is generated by the receiver of the data Start S and Stop P conditions are always generated by the master A high to low transition on SDA while SCL is high defines a Start A low to high transition on SDA while SCL is h
20. unChuck as shown as shown in Fig 13 using the wires provided by your instructor Observe operation and comment Figure 13 NunChuck connected to MCB1700 board Data from NunChuck controls the movement of a circle on the LCD display 8 Lab Assignment Pre lab report worth 6 points out of 20 points for this whole lab Write the pre lab report and explain line by line of code the following functions from inside can c file of example 1 vord CAN setup u1n 52 CUr T ess J void CAN start wint32 Ctrl T sss 7 vold CAN waitReady qTUlDLOZ Ct OGLEL Y s J void CAN wrMsSg U1BDt22 L OUrl CAN meg meog Y sss void CAN rdMsg Qurnt22 Cccrl CAN mog nsg 2 4 void CAN IROHandler void Lab assignment project demo worth 6 points final report worth 6 points Modify example 1 as follows remove the part related to the ADC and add instead the part related to the UART from the example studied in lab 2 In fact from the UART1 source code you should add only the part that sends characters typed on the keyboard of the host PC to the board You can remove from the UART code the part that sends the characters back to the host PC which we used to display in the Putty terminal Here in this modified example we want to send character by character via CAN send out via CAN2 Tx and receive in via CANI Rx The transmitted and received character should be displayed on the LCD instead of the old ADC value The received character

Download Pdf Manuals

image

Related Search

Related Contents

GE PSC23SHT User's Manual  2 g 2.6  Metra XSVI-2104 electrical connector assembly    ダウンロード - ソニー製品情報  Pelco Camera and CitectSCADA Integration  Ersatzteilliste Kränzle quadro 1500 TS / TST  TBX-1316 High-Voltage Attenuator Terminal Block Installation Guide  Targus Slim Laser Case  La Semaine 2734  

Copyright © All rights reserved.
Failed to retrieve file