Compare commits

..

2 Commits

Author SHA1 Message Date
936bb8c1a4 ECAD #46: Added DIP switch options 2025-09-22 23:02:35 -07:00
e2dae71295 SW #43: Added SD/MMC interface to CubeMX 2025-09-21 22:31:33 -07:00
5 changed files with 2488 additions and 66 deletions

View File

@@ -430,7 +430,7 @@
"no_connect_dangling": "warning", "no_connect_dangling": "warning",
"pin_not_connected": "error", "pin_not_connected": "error",
"pin_not_driven": "error", "pin_not_driven": "error",
"pin_to_pin": "warning", "pin_to_pin": "error",
"power_pin_not_driven": "error", "power_pin_not_driven": "error",
"same_local_global_label": "warning", "same_local_global_label": "warning",
"similar_label_and_power": "warning", "similar_label_and_power": "warning",
@@ -630,6 +630,10 @@
"be3c13b5-9ed7-48d7-9628-fcde8ceb3f83", "be3c13b5-9ed7-48d7-9628-fcde8ceb3f83",
"Battery" "Battery"
], ],
[
"a8171546-98b4-47a7-9095-ce46e093fe39",
"DIP Switch Options"
],
[ [
"e94fe28b-7032-4620-a8c2-7db10727010e", "e94fe28b-7032-4620-a8c2-7db10727010e",
"MicroSD Card" "MicroSD Card"

View File

@@ -488,6 +488,16 @@
) )
(uuid "13819209-add6-4349-a8ec-bb28f64b6721") (uuid "13819209-add6-4349-a8ec-bb28f64b6721")
) )
(wire
(pts
(xy 116.84 118.11) (xy 133.35 118.11)
)
(stroke
(width 0)
(type default)
)
(uuid "13c363a4-c597-49c2-b2af-ef25b6673017")
)
(wire (wire
(pts (pts
(xy 165.1 85.09) (xy 181.61 85.09) (xy 165.1 85.09) (xy 181.61 85.09)
@@ -538,6 +548,16 @@
) )
(uuid "60987c9f-844b-426a-b6b6-30296457622d") (uuid "60987c9f-844b-426a-b6b6-30296457622d")
) )
(wire
(pts
(xy 116.84 113.03) (xy 133.35 113.03)
)
(stroke
(width 0)
(type default)
)
(uuid "69994a85-f4c6-4792-a5b4-0654547fa089")
)
(wire (wire
(pts (pts
(xy 116.84 85.09) (xy 133.35 85.09) (xy 116.84 85.09) (xy 133.35 85.09)
@@ -568,6 +588,16 @@
) )
(uuid "99fd7406-0870-4482-abe0-9f433e302d41") (uuid "99fd7406-0870-4482-abe0-9f433e302d41")
) )
(wire
(pts
(xy 116.84 115.57) (xy 133.35 115.57)
)
(stroke
(width 0)
(type default)
)
(uuid "a2b402ac-d137-45d2-a7c2-4e6d0ee65cf7")
)
(wire (wire
(pts (pts
(xy 224.79 87.63) (xy 224.79 97.79) (xy 224.79 87.63) (xy 224.79 97.79)
@@ -598,6 +628,16 @@
) )
(uuid "d145da29-7e8e-420f-af0e-6023ea36fed2") (uuid "d145da29-7e8e-420f-af0e-6023ea36fed2")
) )
(wire
(pts
(xy 116.84 110.49) (xy 133.35 110.49)
)
(stroke
(width 0)
(type default)
)
(uuid "d55d9317-234d-430b-a85e-1f3f78a5a111")
)
(wire (wire
(pts (pts
(xy 165.1 114.3) (xy 181.61 114.3) (xy 165.1 114.3) (xy 181.61 114.3)
@@ -1169,6 +1209,46 @@
(justify right) (justify right)
) )
) )
(pin "SD_EJECT" input
(at 133.35 115.57 180)
(uuid "ef6c95f3-c96a-48cf-b1d5-92f1c53a1991")
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
)
(pin "USR_SW" input
(at 133.35 118.11 180)
(uuid "ce640ea0-0b9e-4a89-a679-836693df1991")
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
)
(pin "BOOT0" input
(at 133.35 113.03 180)
(uuid "ed057c86-f665-478e-8841-37788f04ae99")
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
)
(pin "~{RST}" input
(at 133.35 110.49 180)
(uuid "3f9e3b91-2464-4b18-8c0d-90c8f1a7b9fa")
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
)
(instances (instances
(project "dyna-micro" (project "dyna-micro"
(path "/0389eb62-6503-47dc-9bba-f194441b9f54" (path "/0389eb62-6503-47dc-9bba-f194441b9f54"
@@ -1177,6 +1257,88 @@
) )
) )
) )
(sheet
(at 101.6 106.68)
(size 15.24 15.24)
(exclude_from_sim no)
(in_bom yes)
(on_board yes)
(dnp no)
(fields_autoplaced yes)
(stroke
(width 0.1524)
(type solid)
)
(fill
(color 0 0 0 0.0000)
)
(uuid "a8171546-98b4-47a7-9095-ce46e093fe39")
(property "Sheetname" "DIP Switch Options"
(at 101.6 105.9684 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
)
(property "Sheetfile" "options.kicad_sch"
(at 101.6 122.5046 0)
(effects
(font
(size 1.27 1.27)
)
(justify left top)
)
)
(pin "EJECT" output
(at 116.84 115.57 0)
(uuid "6462aca9-72c2-4dc4-8f73-2401b09e28f4")
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
)
(pin "BOOT0" output
(at 116.84 113.03 0)
(uuid "3008ff35-a471-48fa-93fa-3d87cf35c2b3")
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
)
(pin "~{RESET}" output
(at 116.84 110.49 0)
(uuid "95a5d4b0-002d-4ef4-bfc5-0af5109b8a00")
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
)
(pin "USER" output
(at 116.84 118.11 0)
(uuid "99d928b8-c42a-42aa-ba11-2f2fe7060b4c")
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
)
(instances
(project "dyna-micro"
(path "/0389eb62-6503-47dc-9bba-f194441b9f54"
(page "7")
)
)
)
)
(sheet (sheet
(at 127 46.99) (at 127 46.99)
(size 30.48 10.16) (size 30.48 10.16)

View File

@@ -2318,10 +2318,26 @@
(color 0 0 0 0) (color 0 0 0 0)
(uuid "ec0b595a-02a9-4663-9bf8-bd22a8986751") (uuid "ec0b595a-02a9-4663-9bf8-bd22a8986751")
) )
(no_connect
(at 153.67 114.3)
(uuid "01a97c16-284a-4a50-b2a1-bda6c5ee2721")
)
(no_connect (no_connect
(at 228.6 92.71) (at 228.6 92.71)
(uuid "03a99696-c18d-42cf-84e1-f3357873c585") (uuid "03a99696-c18d-42cf-84e1-f3357873c585")
) )
(no_connect
(at 153.67 101.6)
(uuid "03b93063-0ffa-4ad2-ab02-6a574da30598")
)
(no_connect
(at 153.67 111.76)
(uuid "170dbabe-b20d-47de-baf3-16065987dca8")
)
(no_connect
(at 184.15 99.06)
(uuid "1a9eaca5-d52c-4b3c-aa65-460eebd50167")
)
(no_connect (no_connect
(at 228.6 85.09) (at 228.6 85.09)
(uuid "1ccc4ddb-803c-46ce-983a-c15f08afb075") (uuid "1ccc4ddb-803c-46ce-983a-c15f08afb075")
@@ -2330,6 +2346,62 @@
(at 228.6 87.63) (at 228.6 87.63)
(uuid "1f392776-691d-4898-b4c4-9d208ef6f28d") (uuid "1f392776-691d-4898-b4c4-9d208ef6f28d")
) )
(no_connect
(at 153.67 119.38)
(uuid "32a044c4-1e39-4e4d-bca4-e3aabcc9ab7a")
)
(no_connect
(at 153.67 91.44)
(uuid "4d5a7727-5cf2-4925-9ca7-4298e1dd2b17")
)
(no_connect
(at 153.67 78.74)
(uuid "7c28edf2-cfaf-432c-982e-6c23a271aadd")
)
(no_connect
(at 184.15 68.58)
(uuid "9e00f517-9145-4377-a10c-8a74c92be272")
)
(no_connect
(at 153.67 66.04)
(uuid "aa34b066-49db-4a1c-a04e-2b80d35fdda2")
)
(no_connect
(at 153.67 99.06)
(uuid "aeb75163-9bd1-4abe-bac0-2ea141fa4958")
)
(no_connect
(at 184.15 81.28)
(uuid "afcc168d-27d3-48ec-afb3-633944788cbe")
)
(no_connect
(at 153.67 109.22)
(uuid "b1a28bd1-6045-4089-a78a-e32aa9916614")
)
(no_connect
(at 153.67 81.28)
(uuid "b1cf5897-eec4-4cb0-bc58-fa3b9713c6ed")
)
(no_connect
(at 153.67 106.68)
(uuid "bafa4ba0-d39a-4f64-a869-72f541020789")
)
(no_connect
(at 153.67 68.58)
(uuid "c2683a05-380a-4401-80ad-8075b39bae8f")
)
(no_connect
(at 153.67 88.9)
(uuid "da5beea3-4eba-4f4e-bd0d-1825889ec02d")
)
(no_connect
(at 153.67 76.2)
(uuid "e0864f05-e1f3-467b-8af1-c26f4a4c5251")
)
(no_connect
(at 184.15 71.12)
(uuid "f9501dd9-9c17-4623-8293-ba92dfc6025d")
)
(wire (wire
(pts (pts
(xy 147.32 121.92) (xy 153.67 121.92) (xy 147.32 121.92) (xy 153.67 121.92)
@@ -2440,6 +2512,16 @@
) )
(uuid "24bb5b8d-6e0a-487a-9dc6-a01648b4fbed") (uuid "24bb5b8d-6e0a-487a-9dc6-a01648b4fbed")
) )
(wire
(pts
(xy 184.15 66.04) (xy 191.77 66.04)
)
(stroke
(width 0)
(type default)
)
(uuid "295dfdb4-74f8-4374-ace3-811739794f4e")
)
(wire (wire
(pts (pts
(xy 220.98 100.33) (xy 228.6 100.33) (xy 220.98 100.33) (xy 228.6 100.33)
@@ -2540,6 +2622,16 @@
) )
(uuid "936c77db-1d32-44be-a233-8ef1fc0fc002") (uuid "936c77db-1d32-44be-a233-8ef1fc0fc002")
) )
(wire
(pts
(xy 147.32 71.12) (xy 153.67 71.12)
)
(stroke
(width 0)
(type default)
)
(uuid "9899b26a-6f7d-40eb-94b0-6ccdcdb18d5e")
)
(wire (wire
(pts (pts
(xy 147.32 93.98) (xy 153.67 93.98) (xy 147.32 93.98) (xy 153.67 93.98)
@@ -2610,6 +2702,16 @@
) )
(uuid "c390a098-5a3a-4713-860b-f0e8fe2581e3") (uuid "c390a098-5a3a-4713-860b-f0e8fe2581e3")
) )
(wire
(pts
(xy 184.15 60.96) (xy 191.77 60.96)
)
(stroke
(width 0)
(type default)
)
(uuid "c469e716-23e5-45cd-924d-51dc34a314d8")
)
(wire (wire
(pts (pts
(xy 58.42 105.41) (xy 71.12 105.41) (xy 58.42 105.41) (xy 71.12 105.41)
@@ -2770,16 +2872,6 @@
) )
(uuid "a6de2a57-8730-4a88-8b18-7c2a662be342") (uuid "a6de2a57-8730-4a88-8b18-7c2a662be342")
) )
(label "~{RST}"
(at 147.32 60.96 0)
(effects
(font
(size 1.27 1.27)
)
(justify left bottom)
)
(uuid "df743cd7-ea94-4a69-bc33-1e6a0883833e")
)
(label "VCP_RX" (label "VCP_RX"
(at 191.77 86.36 180) (at 191.77 86.36 180)
(effects (effects
@@ -2790,6 +2882,17 @@
) )
(uuid "e3982cec-8da9-4a41-b362-0b5065a83eed") (uuid "e3982cec-8da9-4a41-b362-0b5065a83eed")
) )
(hierarchical_label "SD_EJECT"
(shape input)
(at 191.77 60.96 0)
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
(uuid "0e385a70-69f0-4d1c-b1a6-c8b93e5ef16e")
)
(hierarchical_label "PRES_SCK" (hierarchical_label "PRES_SCK"
(shape output) (shape output)
(at 191.77 73.66 0) (at 191.77 73.66 0)
@@ -2835,6 +2938,17 @@
) )
(uuid "2ff1fd22-b29b-4eb6-95bb-678783af0237") (uuid "2ff1fd22-b29b-4eb6-95bb-678783af0237")
) )
(hierarchical_label "~{RST}"
(shape input)
(at 147.32 60.96 180)
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
(uuid "5cf6f3bf-557b-467a-b2f7-8e4bb3bb1d51")
)
(hierarchical_label "SD_D3" (hierarchical_label "SD_D3"
(shape bidirectional) (shape bidirectional)
(at 147.32 96.52 180) (at 147.32 96.52 180)
@@ -2857,6 +2971,17 @@
) )
(uuid "a8becb29-7567-4250-94ca-5d25c91ca1ae") (uuid "a8becb29-7567-4250-94ca-5d25c91ca1ae")
) )
(hierarchical_label "BOOT0"
(shape input)
(at 147.32 71.12 180)
(effects
(font
(size 1.27 1.27)
)
(justify right)
)
(uuid "c0b6483b-553e-4394-b8a5-9f1dba09af7a")
)
(hierarchical_label "USB_D+" (hierarchical_label "USB_D+"
(shape bidirectional) (shape bidirectional)
(at 191.77 91.44 0) (at 191.77 91.44 0)
@@ -2902,6 +3027,17 @@
) )
(uuid "ed0beb14-5673-4969-a388-d54c9e4d2864") (uuid "ed0beb14-5673-4969-a388-d54c9e4d2864")
) )
(hierarchical_label "USR_SW"
(shape input)
(at 191.77 66.04 0)
(effects
(font
(size 1.27 1.27)
)
(justify left)
)
(uuid "ed54f12e-1b9a-468b-b698-4f71e1ded534")
)
(hierarchical_label "SD_D0" (hierarchical_label "SD_D0"
(shape bidirectional) (shape bidirectional)
(at 147.32 121.92 180) (at 147.32 121.92 180)

File diff suppressed because it is too large Load Diff

View File

@@ -9,33 +9,32 @@ Mcu.CPN=STM32L4Q5CGT6
Mcu.Family=STM32L4 Mcu.Family=STM32L4
Mcu.IP0=NVIC Mcu.IP0=NVIC
Mcu.IP1=RCC Mcu.IP1=RCC
Mcu.IP2=SPI1 Mcu.IP2=SDMMC2
Mcu.IP3=SPI3 Mcu.IP3=SPI1
Mcu.IP4=SYS Mcu.IP4=SYS
Mcu.IP5=USART1 Mcu.IP5=USART1
Mcu.IP6=USB_OTG_FS Mcu.IP6=USB_OTG_FS
Mcu.IPNb=7 Mcu.IPNb=7
Mcu.Name=STM32L4Q5CGTx Mcu.Name=STM32L4Q5CGTx
Mcu.Package=LQFP48 Mcu.Package=LQFP48
Mcu.Pin0=PA5 Mcu.Pin0=PA1
Mcu.Pin1=PA6 Mcu.Pin1=PA5
Mcu.Pin10=PA14 (JTCK/SWCLK) Mcu.Pin10=PA11
Mcu.Pin11=PA15 (JTDI) Mcu.Pin11=PA12
Mcu.Pin12=PB3 (JTDO/TRACESWO) Mcu.Pin12=PA13 (JTMS/SWDIO)
Mcu.Pin13=PB4 (NJTRST) Mcu.Pin13=PA14 (JTCK/SWCLK)
Mcu.Pin14=PB5 Mcu.Pin14=PB3 (JTDO/TRACESWO)
Mcu.Pin15=PB6 Mcu.Pin15=PB4 (NJTRST)
Mcu.Pin16=PB7 Mcu.Pin16=VP_SYS_VS_Systick
Mcu.Pin17=VP_SYS_VS_Systick Mcu.Pin2=PA6
Mcu.Pin2=PA7 Mcu.Pin3=PA7
Mcu.Pin3=PB0 Mcu.Pin4=PB0
Mcu.Pin4=PB12 Mcu.Pin5=PB12
Mcu.Pin5=PA9 Mcu.Pin6=PB14
Mcu.Pin6=PA10 Mcu.Pin7=PB15
Mcu.Pin7=PA11 Mcu.Pin8=PA9
Mcu.Pin8=PA12 Mcu.Pin9=PA10
Mcu.Pin9=PA13 (JTMS/SWDIO) Mcu.PinsNb=17
Mcu.PinsNb=18
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32L4Q5CGTx Mcu.UserName=STM32L4Q5CGTx
@@ -52,6 +51,8 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA1.Mode=SD_4_bits_Wide_bus
PA1.Signal=SDMMC2_CMD
PA10.Mode=Asynchronous PA10.Mode=Asynchronous
PA10.Signal=USART1_RX PA10.Signal=USART1_RX
PA11.Mode=Device_Only PA11.Mode=Device_Only
@@ -64,10 +65,6 @@ PA13\ (JTMS/SWDIO).Signal=SYS_JTMS-SWDIO
PA14\ (JTCK/SWCLK).Locked=true PA14\ (JTCK/SWCLK).Locked=true
PA14\ (JTCK/SWCLK).Mode=Serial_Wire PA14\ (JTCK/SWCLK).Mode=Serial_Wire
PA14\ (JTCK/SWCLK).Signal=SYS_JTCK-SWCLK PA14\ (JTCK/SWCLK).Signal=SYS_JTCK-SWCLK
PA15\ (JTDI).GPIOParameters=GPIO_Label
PA15\ (JTDI).GPIO_Label=FLASH_CS
PA15\ (JTDI).Locked=true
PA15\ (JTDI).Signal=GPIO_Output
PA5.GPIOParameters=GPIO_Label PA5.GPIOParameters=GPIO_Label
PA5.GPIO_Label=PRES_SCK PA5.GPIO_Label=PRES_SCK
PA5.Mode=Full_Duplex_Master PA5.Mode=Full_Duplex_Master
@@ -86,30 +83,16 @@ PB0.GPIOParameters=GPIO_Label
PB0.GPIO_Label=PRES_CS PB0.GPIO_Label=PRES_CS
PB0.Locked=true PB0.Locked=true
PB0.Signal=GPIO_Output PB0.Signal=GPIO_Output
PB12.GPIOParameters=GPIO_Label PB12.Mode=SD_4_bits_Wide_bus
PB12.GPIO_Label=DEBUG_LED PB12.Signal=SDMMC2_CK
PB12.Locked=true PB14.Mode=SD_4_bits_Wide_bus
PB12.Signal=GPIO_Output PB14.Signal=SDMMC2_D0
PB3\ (JTDO/TRACESWO).GPIOParameters=GPIO_Label PB15.Mode=SD_4_bits_Wide_bus
PB3\ (JTDO/TRACESWO).GPIO_Label=FLASH_SCK PB15.Signal=SDMMC2_D1
PB3\ (JTDO/TRACESWO).Mode=Full_Duplex_Master PB3\ (JTDO/TRACESWO).Mode=SD_4_bits_Wide_bus
PB3\ (JTDO/TRACESWO).Signal=SPI3_SCK PB3\ (JTDO/TRACESWO).Signal=SDMMC2_D2
PB4\ (NJTRST).GPIOParameters=GPIO_Label PB4\ (NJTRST).Mode=SD_4_bits_Wide_bus
PB4\ (NJTRST).GPIO_Label=FLASH_MISO PB4\ (NJTRST).Signal=SDMMC2_D3
PB4\ (NJTRST).Mode=Full_Duplex_Master
PB4\ (NJTRST).Signal=SPI3_MISO
PB5.GPIOParameters=GPIO_Label
PB5.GPIO_Label=FLASH_MOSI
PB5.Mode=Full_Duplex_Master
PB5.Signal=SPI3_MOSI
PB6.GPIOParameters=GPIO_Label
PB6.GPIO_Label=FLASH_RST
PB6.Locked=true
PB6.Signal=GPIO_Output
PB7.GPIOParameters=GPIO_Label
PB7.GPIO_Label=FLASH_WP
PB7.Locked=true
PB7.Signal=GPIO_Output
PinOutPanel.RotationAngle=0 PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false ProjectManager.BackupPrevious=false
@@ -142,7 +125,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,5-MX_SPI3_Init-SPI3-false-HAL-true,6-MX_USART1_UART_Init-USART1-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_USB_OTG_FS_PCD_Init-USB_OTG_FS-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_SDMMC2_SD_Init-SDMMC2-false-HAL-true
RCC.ADCFreq_Value=48000000 RCC.ADCFreq_Value=48000000
RCC.AHBFreq_Value=120000000 RCC.AHBFreq_Value=120000000
RCC.APB1Freq_Value=120000000 RCC.APB1Freq_Value=120000000
@@ -208,11 +191,6 @@ SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
SPI1.Mode=SPI_MODE_MASTER SPI1.Mode=SPI_MODE_MASTER
SPI1.VirtualType=VM_MASTER SPI1.VirtualType=VM_MASTER
SPI3.CalculateBaudRate=60.0 MBits/s
SPI3.Direction=SPI_DIRECTION_2LINES
SPI3.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
SPI3.Mode=SPI_MODE_MASTER
SPI3.VirtualType=VM_MASTER
USART1.IPParameters=VirtualMode-Asynchronous USART1.IPParameters=VirtualMode-Asynchronous
USART1.VirtualMode-Asynchronous=VM_ASYNC USART1.VirtualMode-Asynchronous=VM_ASYNC
USB_OTG_FS.IPParameters=VirtualMode USB_OTG_FS.IPParameters=VirtualMode