📜 ⬆️ ⬇️

Domestic processor from the company ELVIS


Hello! Our article about the domestic processor Multiklet, has caused quite a lot of interest. True, for some reason, many have decided that this is an article from the Multiklet itself.

In this article we will talk about domestic manufacturers of processors (microcontrollers). Now this topic is quite popular: for example, the OSDay conference was devoted to this . In general, this time we got a board from the company "Electronic Computing Information Systems" ELVIS . We dragged our Embox there and decided that it would be interesting for Habr users to learn about this epic.

So, the processor, or rather the system on a chip (SOC), or more precisely “the MICROSHEME INTEGRAL 1892BM14YA ”, as stated in the user manual , has:


We were interested in the core Cortex-A9, the rest, unfortunately, never “felt”. We already had some support for Cortex-A9 for the i.MX6 and vexpress-a9 (qemu) platforms, so we hoped that we would make it all right away. Looking ahead to say that almost happened.
')

Unpacking



So, the Salyut-EL24D2 board came to us, in appearance quite decently made, and we already happily wanted to supply power, but then we found out that there is a power connector, but we do not observe a connector for the console (UART).


Considering that the bundled was a USB adapter with RX / TX / GND / 3V3 / 5V outputs, it was most logical to start searching for a port with the same names. A quick glance at the board didn’t find any suitable inscriptions on the pins.


In addition to RS-485 in the manual in the list of connectors is XP3 connector, which is compatible with RaspberryPi, containing the RS-232 interface. It turned out that it is his and uses u-boot. As we were told in technical support, “on the Salyut-EL24D1, the console is by default outputted to a port on the same Raspberry Pi connector (UART0). On the DB9, the UART3 is displayed. ” They also clarified that the RS232 is a 12-volt interface, and the UART (three-volt interface) is derived on XP3

Having coped with this task, we saw the Linux console (we will not list the entire listing), and found that the heatsink included in the delivery is clearly needed, because without it, the processor is very hot.



U-boot issues


After the apparent success, we started to launch Embox because, as mentioned above, we had support for the Cortex-A9, which means we lacked only the correct memory card and the UART driver to see our console.

The memory card and description of the UART were found in the documentation, some drivers were written, but they found that the installed u-boot does not have network support, that is, you can download from the SD card, how Linux starts, or through the UART console, that is, very slowly.
The support service confirmed to us that the support question was confirmed that there is no network support, since drivers are not ported to the u-boot.

A small digression to the account of the support service
We had the telephone number of the head of the support service, but attempts to find him on the spot were in vain. On the other hand, he responded to the post office quickly and to the point, which is much more important.

The next major problem was the cache and other settings that remain after the u-boot, for example, enabled address translation.

The problem was the following: the assembler program simply recording something in the UART worked, and even a small Embox (several tens of kilobytes) didn’t output anything with the same driver, and in general behaved very well. As a result, it turned out that after filling the image into memory, it is necessary to reset the cache. We contacted the support service, after some correspondence, they reproduced the situation, suggested rebuilding the u-boot with an additional flag, flashing it in spi-flash, and additionally using the dcache flush command.

With the included MMU, problems also arose. In fact, the first thing we do in our loader is turning off address translation. Enabled, if I understand correctly, the MMU was, just to enable caching, in large ARMs, if I understand correctly, caching is defined in page descriptors. Why do I need to include a cache in the U-boot, to be honest I don’t know, but it is possible to speed up the boot.

Drivers


After dancing with the Embox cache, “took off”, outputted a command line in which you could execute commands, because, as already mentioned, we had support for cortex-a9, and the standard Cortex-A9 includes the interrupt controller and timers, well, the ARMv7 standard contains work with MMU and caches. In general, I wanted to make a network card to try at least some interesting functionality.

The manual was a description of the network card, but of course I wanted to borrow the code as much as possible, or to have at least as an example. There was no indication of what kind of IP core this was; the documentation in the documentation was called “GEMAC”. On the Internet, the source code for this network card was stubbornly not found. We were told in the support service that this is in fact a network card from Arasan, and the drivers were suggested to be viewed in Linux, the source code of which is available ( link ), since now this network card is not supported in the vanilla kernel.

For the sake of interest, we looked at what else was modified in this Linux. By running the grep command, we got the following output:

Conclusion
~/elvees/mcom02-buildroot-v2.1-2016-08-30/linux $ grep -rn ELVEES
arch/arm/plat-mcom/platsmp.c:2: * Copyright 2015 ELVEES NeoTek CJSC
arch/arm/mach-vip1/vip1.c:2: * Copyright 2015 ELVEES NeoTek CJSC
arch/arm/mach-vip1/vip1.c:99:DT_MACHINE_START(VIP1, "ELVEES VIP-1 (Flattened Device Tree)")
arch/arm/mach-mcom02/mcom02.c:2: * Copyright 2015 ELVEES NeoTek CJSC
arch/arm/mach-mcom02/mcom02.c:99:DT_MACHINE_START(MCOM02, "ELVEES MCom-02 (Flattened Device Tree)")
drivers/uio/uio_delcore30m.c:4: * Copyright 2016 ELVEES NeoTek JSC
drivers/mtd/nand/arasan_nfc.c:4: * Copyright (C) 2015 ELVEES NeoTek CJSC
drivers/media/i2c/soc_camera/ov2715.c:2: * Copyright 2015 ELVEES NeoTek CJSC
drivers/media/platform/soc_camera/vinc/math/math.h:2: * Copyright 2016 ELVEES NeoTek JSC
drivers/media/platform/soc_camera/vinc/vinc-neon.h:2: * Copyright 2016 ELVEES NeoTek JSC
drivers/media/platform/soc_camera/vinc/vinc-neon.c:2: * Copyright 2016 ELVEES NeoTek JSC
drivers/media/platform/soc_camera/vinc/vinc-driver.c:2: * Copyright 2015 ELVEES NeoTek CJSC
drivers/net/ethernet/arasan/arasan_gemac.c:2: * Copyright 2015 ELVEES NeoTek CJSC
drivers/net/ethernet/arasan/arasan_gemac.h:2: * Copyright 2015 ELVEES NeoTek CJSC
include/uapi/linux/vinc.h:2: * Copyright 2015 ELVEES NeoTek CJSC
include/uapi/linux/vpoutfb.h:2: * Copyright 2016 ELVEES NeoTek JSC


As you can see, ELVIS uses third-party IP-cores for many of its blocks, and the blocks are sometimes so new that you have to modify the drivers yourself.

Having started developing a driver, we couldn’t understand for a long time why we didn’t see anything in its registers, checked the base address, we were dumb, until we were told by those support that it was necessary to apply a frequency to this module. The energy saving control module or, as described in the manual, the PMCTR controller allows you to control not only the power supply, but also the clock frequency of the device. As a result, reading and writing registers started to work, but the PHYs did not light up the lights, that is, there was no link, and the PHY itself did not respond to any MII interface.

In the support service we were offered to do the same as in Linux, but it was completely incomprehensible what we had forgotten about this. That is, there was a suspicion of the reset function, or rather, the need to install the corresponding GPIO into one, but it was not easy to determine which GPIO controller is used by which leg, for us programmers who do not like to read the documentation completely. Fortunately, the port and contact number was suggested in support (PORTB1). Searching through the configuration prompted us to use the dwapb_gpio driver. After correctly implementing the GPIO interface and submitting the unit to this port, the link caught fire, the PHY showed up on the seventh port of MII. Further there were no significant problems, of course there were the usual problems with errors in implementation, but there were no special ones, as a result, the network card worked.

To check the performance run telnet:



Actually, everything works quite perfectly.

findings


Of course, the processor from ELVIS cannot be compared with Multiklet, too unequal weight categories among companies. But it is worth noting that the completeness of the solution is also completely different. Of course, you can refer to the already ready software, for Cortex-A9, but even its refinement is a significant and resource-intensive problem, which Elvis solves, albeit not ideally, but quite sanity. Or take a support service: it is also far from ideal and global companies, but still you can achieve results from it in a reasonable time.

Therefore, with all the pros, focus on the cons.

The main disadvantage, in my opinion, is that the purchased blocks are used. This is an absolute advantage to enter the market, but the Cortex-A9 can hardly be called a domestic processor. I understand perfectly well that there are two more DSP cores, but still the basis is third-party blocks with very low added value, as we like to say lately. That is, the money from this microcircuit is mainly developed by the engineers of the companies from which these cores were purchased (ARM, ARASAN and others), and which develop the corresponding software.
If we compare it with the same i.MX 6, the consumption is significantly higher, although the ELVIS company said that it is necessary to switch off unnecessary blocks, and then the consumption will be comparable. Probably, it is, because the processor cores are the same.

The price, to put it mildly, is high. In ELVIS, of course, they say that the overall performance of the microcircuit is also very high, but I doubt that having several DSP cores can increase it so much to make it attractive compared to the same i.MX 6. That is, I admit that there are a number of tasks for which the price is not important, for example, avionics, but it is not clear why there are DSP cores.

Unclear target market. As stated in the previous paragraph, due to the high price and high performance, the class of tasks for which the use of this chip would be justified, except for those places where only domestic equipment can be used, is incomprehensible (very narrow). The references to cameras with pattern recognition and counting the number of visitors who, as I know, exist, do not convince me personally, as well as statements that a queue of western buyers has already lined up.

On this let me finish. In general, I personally like that, albeit with difficulties, domestic microelectronics is developing.

Traditionally, all that is written in the article can be reproduced from source .

PS In the minuses there was a personal opinion, I think ELVIS will have worthy answers to my claims :)

As in the case of the previous test (Multiklet), we contacted the company and received the following comments, we give it literally:
Below are the comments of our developers to the wording: “rather strange settings that remain after the u-boot”, “With the MMU turned on, problems also arose,” and “After the dances in the cache”.

On any Cortex-A9, after executing the 'go' command in the U-Boot cache and the MMU remain on. This is correct and correct behavior. The 'go' command is not intended to start the OS. On iMX6, with which you worked, the option CONFIG_SYS_DCACHE_OFF was apparently enabled in the configuration file. At the same time, U-Boot does not initialize the MMU and does not include the data cache.

Booting the OS via U-Boot is performed using the 'bootm' command. This command loads an OS image from memory. The image in U-Boot format must be in memory. Such an image contains the OS_TYPE field, through which U-Boot determines the necessary procedure for preparing to boot a particular OS. In order for your OS to boot correctly, U-Boot must _know_ about the procedure for preparing to boot your OS. See, for example, do_bootm_linux () and cleanup_before_linux ().

We reached into the hands of the board that you had on testing and checked it for processor consumption.

When running under Linux Buildroot 2.2 without a load at room temperature, the processor without a radiator warms up to about 43 degrees (the lid is warm, the finger is not burned). Turning off DSP and VPU slightly reduces CPU consumption and the temperature on its case.

Under load tests, the processor managed to warm up to 55-57 degrees (the finger from the cover is hot, but for the processor it is quite normal temperature).

The working temperature of the processor 189214 to 85 degrees. That is, for the Salyut-EL24D2 debug module, when the air temperature is below 50 degrees, additional cooling of the processor is not necessary.

Regarding the temperature, I admit that the temperature of 50 degrees might well have seemed uncomfortable for such a convolutional measuring instrument like a finger :)

In addition, in those support we were informed that “as of today, this support is already integrated into U-Boot, will be in the next release of Buildroot”

Source: https://habr.com/ru/post/329170/


All Articles