default_CONFIG += CONFIG_OC_I2C_DRV_SYSLESS=x CONFIG_OC_SPI_DRV_SYSLESS=x
default_CONFIG += CONFIG_APP_ROCON_WITH_USB=x CONFIG_KEYVAL=x CONFIG_LIB_U2U_V2=x
default_CONFIG += CONFIG_OC_CMDPROC=x CONFIG_PXMC=x CONFIG_PXMC_COORDMV=x
+default_CONFIG += CONFIG_OC_MTD_DRV_SYSLESS=x
ifeq ($(CONFIG_APP_ROCON),y)
ifeq ($(CONFIG_OC_I2C_DRV_SYSLESS),y)
lib_LOADLIBES += i2c_drv
endif
+ifeq ($(CONFIG_OC_MTD_DRV_SYSLESS),y)
+lib_LOADLIBES += mtd_drv
+endif
ifeq ($(CONFIG_OC_SPI_DRV_SYSLESS),y)
lib_LOADLIBES += spi_drv
endif
#include "appl_version.h"
#include "appl_fpga.h"
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+#include <mtd_spi_drv.h>
+#endif
+
#ifndef APPL_WITH_SIM_POSIX
#include <hal_machperiph.h>
#endif /*APPL_WITH_SIM_POSIX*/
#endif
#endif /*APPL_WITH_ULAN*/
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+struct mtd_spi_state_t mtd_spi_state = {
+ .spi_addr = 0x08,
+ .page_size = 256,
+};
+#endif
+
uint32_t usn; /* uLAN/USB device serial number */
int usb_enable_flag = 1;
appl_distore_init();
#endif /* APPL_WITH_DISTORE_EEPROM_USER */
+ /***********************************/
+ // SPI connected FLASH
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+ mtd_spi_state.spi_drv = spi_find_drv(NULL, 0);
+#endif
+
/***********************************/
// Micro Windows GUI
return 0;
}
+int cmd_do_mtdspitest(cmd_io_t *cmd_io, const struct cmd_des *des, char *param[])
+{
+ mtd_spi_test();
+ return 0;
+}
+
#ifdef SDRAM_BASE
int sdram_access_test(void)
{
cmd_do_spimst_blocking, {(void *) - 1}
};
+cmd_des_t const cmd_des_mtdspitest = {0, 0,
+ "mtdspitest", "test SPI connected Flash",
+ cmd_do_mtdspitest, {(void *) - 1}
+ };
+
#ifdef SDRAM_BASE
cmd_des_t const cmd_des_testsdram = {0, 0,
"testsdram", "test SDRAM",
&cmd_des_test_loglevel,
&cmd_des_spimst,
&cmd_des_spimstx,
+ &cmd_des_mtdspitest,
#ifdef SDRAM_BASE
&cmd_des_testsdram,
#endif /*SDRAM_BASE*/
-#include <types.h>
+#include <inttypes.h>
#include <cpu_def.h>
#include <system_def.h>
#include <string.h>
#include <hal_machperiph.h>
#endif /*CONFIG_KEYVAL*/
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+#include <mtd_spi_drv.h>
+#endif
+
#include <endian.h>
#if __BYTE_ORDER == __BIG_ENDIAN
#include <byteswap.h>
#define USB_VENDOR_TARGET_TUMBL 0x03
#define USB_VENDOR_TARGET_32BIT 0x04
+#define USB_VENDOR_TARGET_SPI_FLASH 0x05
#define USB_CMD_FPGA_CONFIGURE 0xF000
#define USB_CMD_FPGA_MEASURE_READ 0xF001
return 0;
}
+static int usb_spi_flash_pkt_wr(struct usb_ep_t *ep, int len, int code)
+{
+ unsigned char *ptr = ep->ptr - len;
+
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+ mtd_spi_write(&mtd_spi_state, ptr, len, ep->user_data, 0);
+#endif /*CONFIG_KEYVAL*/
+
+ ep->user_data += len;
+ ep->ptr = ep0_buffer;
+ return USB_COMPLETE_OK;
+}
+
+int usb_spi_flash_pkt_rd(struct usb_ep_t *ep, int len, int code)
+{
+ ep->ptr = ep0_buffer;
+#ifdef CONFIG_OC_MTD_DRV_SYSLESS
+ mtd_spi_read(&mtd_spi_state, ep->ptr, len, ep->user_data, 0);
+#endif /*CONFIG_KEYVAL*/
+
+ ep->user_data += len;
+ return USB_COMPLETE_OK;
+}
+
static void usb_goto(unsigned address)
{
#ifdef CONFIG_KEYVAL
return 0;
case USB_CMD_FPGA_LXMASTER_GET_RESET:
- printf("LXMASTER RESET: 0x%02x\n", *fpga_lx_master_reset);
+ printf("LXMASTER RESET: 0x%02"PRIx32"\n", *fpga_lx_master_reset);
return 0;
case USB_CMD_FPGA_LXMASTER_SET_RESET:
return 0;
case USB_CMD_FPGA_LXMASTER_TRANSMITTER_GET_REG:
- printf("LXMASTER TRANSMITTER REG: 0x%02x\n", *fpga_lx_master_transmitter_reg);
+ printf("LXMASTER TRANSMITTER REG: 0x%02"PRIx32"\n", *fpga_lx_master_transmitter_reg);
return 0;
case USB_CMD_FPGA_LXMASTER_TRANSMITTER_SET_REG:
udev->ep0.ptr = ep0_buffer;
break;
+ case USB_VENDOR_TARGET_SPI_FLASH:
+ udev->ep0.next_pkt_fnc = usb_spi_flash_pkt_wr;
+ udev->ep0.user_data = addr;
+ udev->ep0.ptr = ep0_buffer;
+ break;
+
default:
return -1;
}
usb_send_control_data( udev, ep0_buffer, len);
break;
+ case USB_VENDOR_TARGET_SPI_FLASH:
+ udev->ep0.next_pkt_fnc = usb_spi_flash_pkt_rd;
+ udev->ep0.user_data=addr;
+ usb_send_control_data( udev, ep0_buffer, len);
+ break;
+
default:
return -1;
}